基于朴素贝叶斯分类器的文本分类算法(下)

 

源代码下载:NaviveBayesClassify.rar 

Preface

文本的分类和聚类是一个比较有意思的话题,我以前也写过一篇blog基于K-Means的文本聚类算法》,加上最近读了几本数据挖掘和机器学习的书籍,因此很想写点东西来记录下学习的所得。

在本文的上半部分《基于朴素贝叶斯分类器的文本分类算法(上)》一文中简单介绍了贝叶斯学习的基本理论,这一篇将展示如何将该理论运用到中文文本分类中来,具体的文本分类原理就不再介绍了,在上半部分有,也可以参见代码的注释。

文本特征向量

文本特征向量可以描述为文本中的字/词构成的属性。例如给出文本:

Good good study,Day day up.

可以获得该文本的特征向量集:{ Good, good, study, Day, day , up.}

朴素贝叶斯模型是文本分类模型中的一种简单但性能优越的的分类模型。为了简化计算过程,假定各待分类文本特征变量是相互独立的,即朴素贝叶斯模型的假设。相互独立表明了所有特征变量之间的表述是没有关联的。如上例中,[good][study]这两个特征变量就是没有任何关联的。

在上例中,文本是英文,但由于中文本身是没有自然分割符(如空格之类符号),所以要获得中文文本的特征变量向量首先需要对文本进行中文分词

中文分词

      这里采用极易中文分词组件,这个中文分词组件可以免费使用,提供Lucene接口,跨平台,性能可靠。

package com.vista;
import java.io.IOException;      
import jeasy.analysis.MMAnalyzer;

/**
* 中文分词器
*/
public class ChineseSpliter 
{
    
/**
    * 对给定的文本进行中文分词
    * @param text 给定的文本
    * @param splitToken 用于分割的标记,如"|"
    * @return 分词完毕的文本
    
*/
    
public static String split(String text,String splitToken)
    {
        String result 
= null;
        MMAnalyzer analyzer 
= new MMAnalyzer();      
        
try      
        {
            result 
= analyzer.segment(text, splitToken);    
        }      
        
catch (IOException e)      
        {     
            e.printStackTrace();     
        }     
        
return result;
    }
}

停用词处理

      去掉文档中无意思的词语也是必须的一项工作,这里简单的定义了一些常见的停用词,并根据这些常用停用词在分词时进行判断。

package com.vista;

/**
* 停用词处理器
* @author phinecos 

*/
public class StopWordsHandler 
{
    
private static String stopWordsList[] ={"""我们","","自己","","","","","","","","","","","","","","","","","","","","","","","","",""};//常用停用词
    public static boolean IsStopWord(String word)
    {
        
for(int i=0;i<stopWordsList.length;++i)
        {
            
if(word.equalsIgnoreCase(stopWordsList[i]))
                
return true;
        }
        
return false;
    }
}

训练集管理器

      我们的系统首先需要从训练样本集中得到假设的先验概率和给定假设下观察到不同数据的概率。

package com.vista;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* 训练集管理器
*/
public class TrainingDataManager 
{
    
private String[] traningFileClassifications;//训练语料分类集合
    private File traningTextDir;//训练语料存放目录
    private static String defaultPath = "D:\\TrainningSet";
    
    
public TrainingDataManager() 
    {
        traningTextDir 
= new File(defaultPath);
        
if (!traningTextDir.isDirectory()) 
        {
            
throw new IllegalArgumentException("训练语料库搜索失败! [" +defaultPath + "]");
        }
        
this.traningFileClassifications = traningTextDir.list();
    }
    
/**
    * 返回训练文本类别,这个类别就是目录名
    * 
@return 训练文本类别
    
*/
    
public String[] getTraningClassifications() 
    {
        
return this.traningFileClassifications;
    }
    
/**
    * 根据训练文本类别返回这个类别下的所有训练文本路径(full path)
    * 
@param classification 给定的分类
    * 
@return 给定分类下所有文件的路径(full path)
    
*/
    
public String[] getFilesPath(String classification) 
    {
        File classDir 
= new File(traningTextDir.getPath() +File.separator +classification);
        String[] ret 
= classDir.list();
        
for (int i = 0; i < ret.length; i++
        {
            ret[i] 
= traningTextDir.getPath() +File.separator +classification +File.separator +ret[i];
        }
        
return ret;
    }
    
/**
    * 返回给定路径的文本文件内容
    * 
@param filePath 给定的文本文件路径
    * 
@return 文本内容
    * 
@throws java.io.FileNotFoundException
    * 
@throws java.io.IOException
    
*/
    
public static String getText(String filePath) throws FileNotFoundException,IOException 
    {
        InputStreamReader isReader 
=new InputStreamReader(new FileInputStream(filePath),"GBK");
        BufferedReader reader 
= new BufferedReader(isReader);
        String aline;
        StringBuilder sb 
= new StringBuilder();
        
while ((aline = reader.readLine()) != null)
        {
            sb.append(aline 
+ " ");
        }
        isReader.close();
        reader.close();
        
return sb.toString();
    }
    
/**
    * 返回训练文本集中所有的文本数目
    * 
@return 训练文本集中所有的文本数目
    
*/
    
public int getTrainingFileCount()
    {
        
int ret = 0;
        
for (int i = 0; i < traningFileClassifications.length; i++)
        {
            ret 
+=getTrainingFileCountOfClassification(traningFileClassifications[i]);
        }
        
return ret;
    }
    
/**
    * 返回训练文本集中在给定分类下的训练文本数目
    * 
@param classification 给定的分类
    * 
@return 训练文本集中在给定分类下的训练文本数目
    
*/
    
public int getTrainingFileCountOfClassification(String classification)
    {
        File classDir 
= new File(traningTextDir.getPath() +File.separator +classification);
        
return classDir.list().length;
    }
    
/**
    * 返回给定分类中包含关键字/词的训练文本的数目
    * 
@param classification 给定的分类
    * 
@param key 给定的关键字/词
    * 
@return 给定分类中包含关键字/词的训练文本的数目
    
*/
    
public int getCountContainKeyOfClassification(String classification,String key) 
    {
        
int ret = 0;
        
try 
        {
            String[] filePath 
= getFilesPath(classification);
            
for (int j = 0; j < filePath.length; j++
            {
                String text 
= getText(filePath[j]);
                
if (text.contains(key)) 
                {
                    ret
++;
                }
            }
        }
        
catch (FileNotFoundException ex) 
        {
        Logger.getLogger(TrainingDataManager.
class.getName()).log(Level.SEVERE, null,ex);
    
        } 
        
catch (IOException ex)
        {
            Logger.getLogger(TrainingDataManager.
class.getName()).log(Level.SEVERE, null,ex);
        }
        
return ret;
    }
}

先验概率

      先验概率是我们需要计算的两大概率值之一

package com.vista;
/**
* 先验概率计算
* <h3>先验概率计算</h3>
* P(c<sub>j</sub>)=N(C=c<sub>j</sub>)<b>/</b>N <br>
* 其中,N(C=c<sub>j</sub>)表示类别c<sub>j</sub>中的训练文本数量;
* N表示训练文本集总数量。
*/
public class PriorProbability 
{
    
private static TrainingDataManager tdm =new TrainingDataManager();
    
/**
    * 先验概率
    * 
@param c 给定的分类
    * 
@return 给定条件下的先验概率
    
*/
    
public static float calculatePc(String c)
    {
        
float ret = 0F;
        
float Nc = tdm.getTrainingFileCountOfClassification(c);
        
float N = tdm.getTrainingFileCount();
        ret 
= Nc / N;
        
return ret;
    }
}

分类条件概率

      这是另一个影响因子,和先验概率一起来决定最终结果

package com.vista;

/**
* <b>类</b>条件概率计算
*
* <h3>类条件概率</h3>
* P(x<sub>j</sub>|c<sub>j</sub>)=( N(X=x<sub>i</sub>, C=c<sub>j
* </sub>)+1 ) <b>/</b> ( N(C=c<sub>j</sub>)+M+V ) <br>
* 其中,N(X=x<sub>i</sub>, C=c<sub>j</sub>)表示类别c<sub>j</sub>中包含属性x<sub>
* i</sub>的训练文本数量;N(C=c<sub>j</sub>)表示类别c<sub>j</sub>中的训练文本数量;M值用于避免
* N(X=x<sub>i</sub>, C=c<sub>j</sub>)过小所引发的问题;V表示类别的总数。
*
* <h3>条件概率</h3>
* <b>定义</b> 设A, B是两个事件,且P(A)>0 称<br>
* <tt>P(B∣A)=P(AB)/P(A)</tt><br>
* 为在条件A下发生的条件事件B发生的条件概率。

*/

public class ClassConditionalProbability 
{
    
private static TrainingDataManager tdm = new TrainingDataManager();
    
private static final float M = 0F;
    
    
/**
    * 计算类条件概率
    * 
@param x 给定的文本属性
    * 
@param c 给定的分类
    * 
@return 给定条件下的类条件概率
    
*/
    
public static float calculatePxc(String x, String c) 
    {
        
float ret = 0F;
        
float Nxc = tdm.getCountContainKeyOfClassification(c, x);
        
float Nc = tdm.getTrainingFileCountOfClassification(c);
        
float V = tdm.getTraningClassifications().length;
        ret 
= (Nxc + 1/ (Nc + M + V); //为了避免出现0这样极端情况,进行加权处理
        return ret;
    }
}

分类结果

      用来保存各个分类及其计算出的概率值,

package com.vista;
/**
* 分类结果
*/
public class ClassifyResult 
{
    
public double probility;//分类的概率
    public String classification;//分类
    public ClassifyResult()
    {
        
this.probility = 0;
        
this.classification = null;
    }
}

朴素贝叶斯分类器

      利用样本数据集计算先验概率和各个文本向量属性在分类中的条件概率,从而计算出各个概率值,最后对各个概率值进行排序,选出最大的概率值,即为所属的分类。

package com.vista;
import com.vista.ChineseSpliter;
import com.vista.ClassConditionalProbability;
import com.vista.PriorProbability;
import com.vista.TrainingDataManager;
import com.vista.StopWordsHandler;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Vector;

/**
* 朴素贝叶斯分类器
*/
public class BayesClassifier 
{
    
private TrainingDataManager tdm;//训练集管理器
    private String trainnigDataPath;//训练集路径
    private static double zoomFactor = 10.0f;
    
/**
    * 默认的构造器,初始化训练集
    
*/
    
public BayesClassifier() 
    {
        tdm 
=new TrainingDataManager();
    }

    
/**
    * 计算给定的文本属性向量X在给定的分类Cj中的类条件概率
    * <code>ClassConditionalProbability</code>连乘值
    * 
@param X 给定的文本属性向量
    * 
@param Cj 给定的类别
    * 
@return 分类条件概率连乘值,即<br>
    
*/
    
float calcProd(String[] X, String Cj) 
    {
        
float ret = 1.0F;
        
// 类条件概率连乘
        for (int i = 0; i <X.length; i++)
        {
            String Xi 
= X[i];
            
//因为结果过小,因此在连乘之前放大10倍,这对最终结果并无影响,因为我们只是比较概率大小而已
            ret *=ClassConditionalProbability.calculatePxc(Xi, Cj)*zoomFactor;
        }
        
// 再乘以先验概率
        ret *= PriorProbability.calculatePc(Cj);
        
return ret;
    }
    
/**
    * 去掉停用词
    * 
@param text 给定的文本
    * 
@return 去停用词后结果
    
*/
    
public String[] DropStopWords(String[] oldWords)
    {
        Vector
<String> v1 = new Vector<String>();
        
for(int i=0;i<oldWords.length;++i)
        {
            
if(StopWordsHandler.IsStopWord(oldWords[i])==false)
            {
//不是停用词
                v1.add(oldWords[i]);
            }
        }
        String[] newWords 
= new String[v1.size()];
        v1.toArray(newWords);
        
return newWords;
    }
    
/**
    * 对给定的文本进行分类
    * 
@param text 给定的文本
    * 
@return 分类结果
    
*/
    @SuppressWarnings(
"unchecked")
    
public String classify(String text) 
    {
        String[] terms 
= null;
        terms
= ChineseSpliter.split(text, " ").split(" ");//中文分词处理(分词后结果可能还包含有停用词)
        terms = DropStopWords(terms);//去掉停用词,以免影响分类
        
        String[] Classes 
= tdm.getTraningClassifications();//分类
        float probility = 0.0F;
        List
<ClassifyResult> crs = new ArrayList<ClassifyResult>();//分类结果
        for (int i = 0; i <Classes.length; i++
        {
            String Ci 
= Classes[i];//第i个分类
            probility = calcProd(terms, Ci);//计算给定的文本属性向量terms在给定的分类Ci中的分类条件概率
            
//保存分类结果
            ClassifyResult cr = new ClassifyResult();
            cr.classification 
= Ci;//分类
            cr.probility = probility;//关键字在分类的条件概率
            System.out.println("In process.");
            System.out.println(Ci 
+ "" + probility);
            crs.add(cr);
        }
        
//对最后概率结果进行排序
        java.util.Collections.sort(crs,new Comparator() 
        {
            
public int compare(final Object o1,final Object o2) 
            {
                
final ClassifyResult m1 = (ClassifyResult) o1;
                
final ClassifyResult m2 = (ClassifyResult) o2;
                
final double ret = m1.probility - m2.probility;
                
if (ret < 0
                {
                    
return 1;
                } 
                
else 
                {
                    
return -1;
                }
            }
        });
        
//返回概率最大的分类
        return crs.get(0).classification;
    }
    
    
public static void main(String[] args)
    {
        String text 
= "微软公司提出以446亿美元的价格收购雅虎中国网2月1日报道 美联社消息,微软公司提出以446亿美元现金加股票的价格收购搜索网站雅虎公司。微软提出以每股31美元的价格收购雅虎。微软的收购报价较雅虎1月31日的收盘价19.18美元溢价62%。微软公司称雅虎公司的股东可以选择以现金或股票进行交易。微软和雅虎公司在2006年底和2007年初已在寻求双方合作。而近两年,雅虎一直处于困境:市场份额下滑、运营业绩不佳、股价大幅下跌。对于力图在互联网市场有所作为的微软来说,收购雅虎无疑是一条捷径,因为双方具有非常强的互补性。(小桥)";
        BayesClassifier classifier 
= new BayesClassifier();//构造Bayes分类器
        String result = classifier.classify(text);//进行分类
        System.out.println("此项属于["+result+"]");
    }
}

训练集与分类测试

作为测试,这里选用Sogou实验室的文本分类数据,我只使用了mini版本。迷你版本有10个类别 ,共计100篇文章,总大小244KB

使用的测试文本:

微软公司提出以446亿美元的价格收购雅虎

中国网2月1日报道 美联社消息,微软公司提出以446亿美元现金加股票的价格收购搜索网站雅虎公司。

微软提出以每股31美元的价格收购雅虎。微软的收购报价较雅虎1月31日的收盘价19
.18美元溢价62%。微软公司称雅虎公司的股东可以选择以现金或股票进行交易。

微软和雅虎公司在2006年底和2007年初已在寻求双方合作。而近两年,雅虎一直处于困境:市场份额下滑、运营业绩不佳、股价大幅下跌。对于力图在互联网市场有所作为的微软来说,收购雅虎无疑是一条捷径,因为双方具有非常强的互补性。
(小桥)

使用mini版本的测试结果:

In process.
IT:
2.8119528E-5
In process
.
体育:
2.791735E-21
In process
.
健康:
3.3188528E-12
In process
.
军事:
2.532662E-19
In process
.
招聘:
2.3753596E-17
In process
.
教育:
4.2023427E-19
In process
.
文化:
6.0595915E-23
In process
.
旅游:
5.1286412E-17
In process
.
汽车:
4.085446E-8
In process
.
财经:
3.7337095E-10
此项属于[IT]

作者:洞庭散人

出处:http://phinecos.cnblogs.com/    

本博客遵从Creative Commons Attribution 3.0 License,若用于非商业目的,您可以自由转载,但请保留原作者信息和文章链接URL。

posted on 2008-10-21 16:31 Phinecos(洞庭散人) 阅读(14498) 评论(104) 编辑 收藏

评论

#5楼[楼主] 2008-10-21 17:00 Phinecos(洞庭散人)      

这个,这个语言无关的吧,我工作用C++,学习用java,C#还是大2时用过,哈哈,还停留在C#1.0的阶段,没办法,为图方便,只能用java写,不过如果真被撤下来,那就太打击投稿的信心了。。。  回复 引用 查看   

#6楼 2008-10-30 16:23 RADARRADAR[未注册用户]

ret = (Nxc + 1) / (Nc + M + V);
我看了理论部分 这里V应该是所有训练文档中出现的词语数,而你这里用的是类别数?Nxc也应该是在某一类中单词出现的次数 你用的是出现的文档数?很不解?
 回复 引用   

#7楼 2008-11-10 11:23 yyk2627[未注册用户]

楼主,你好,我大概看了下你的文章,写得很好。有个地方我没看明白,我下载了一个搜狗语料库,我看里面都是各个分类的文章啊,这怎么训练啊?!  回复 引用   

#8楼[楼主] 2008-11-10 11:36 Phinecos(洞庭散人)      

TrainingDataManager类中这个字段指向语料库的目录所在, private static String defaultPath = "D:\\TrainningSet";  回复 引用 查看   

#9楼 2008-11-23 08:53 杨海[未注册用户]

我正在做这个的毕业设计,希望你能指导一下,我想问下,就是怎么训练,训练是得到什么结果,是得到训练集的特征向量吗?
 回复 引用   

#10楼[楼主] 2008-11-23 19:46 Phinecos(洞庭散人)      

@杨海
如何训练见上面的回复,训练的结果是样本数据的各个需要统计概率,具体的研究算法的思路,代码都很清晰了
 回复 引用 查看   

#11楼 2008-11-24 21:31 杨海[未注册用户]

训练是不是计算出先验概率p(Cj);还有就是得到训练类的特征向量吗,用来求条件概率p(Wj|Cj)吗?
能留下你的QQ吗?我的QQ275098896,我真的想请教一下
 回复 引用   

#12楼 2008-12-03 23:02 杨海[未注册用户]

那个极易分词组件的jar放jdk哪里去啊  回复 引用   

#13楼 2008-12-03 23:20 杨海[未注册用户]

你用的是什么开发软件,eclipse还是jcreator或者myeclipse  回复 引用   

#14楼[楼主] 2008-12-04 11:25 Phinecos(洞庭散人)      

@杨海
eclipse中,右键项目名,build path-->add external Archives
btw,Myeclipse只是eclipse的一个用于j2ee开发的插件,和前两者算不得一类
 回复 引用 查看   

#15楼 2008-12-04 13:22 杨海[未注册用户]

谢谢你  回复 引用   

#16楼 2008-12-04 13:24 杨海[未注册用户]

ret = (Nxc + 1) / (Nc + M + V);
这里每个符号代表能说一下吗
 回复 引用   

#17楼 2008-12-04 13:45 杨海[未注册用户]

我运行了一下,还装了和配置tomcat;但是出现一个问题,不知道怎么解决
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/lucene/analysis/Analyzer
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at com.vista.ChineseSpliter.split(ChineseSpliter.java:20)
at com.vista.BayesClassifier.classify(BayesClassifier.java:78)
at com.vista.BayesClassifier.main(BayesClassifier.java:122)
 回复 引用   

#18楼 2008-12-04 14:02 杨海[未注册用户]

那个问题已经解决,但是又出现下面问题,不好意思耽误你时间
Exception in thread "main" java.lang.NullPointerException
at com.vista.TrainingDataManager.getTrainingFileCountOfClassification(TrainingDataManager.java:102)
at com.vista.TrainingDataManager.getTrainingFileCount(TrainingDataManager.java:89)
at com.vista.PriorProbability.calculatePc(PriorProbability.java:24)
at com.vista.BayesClassifier.calcProd(BayesClassifier.java:47)
at com.vista.BayesClassifier.classify(BayesClassifier.java:87)
at com.vista.BayesClassifier.main(BayesClassifier.java:122)
 回复 引用   

#19楼[楼主] 2008-12-04 14:23 Phinecos(洞庭散人)      

@杨海
缺少org.apache.lucene.analysis.Analyzer ,那就下个lucene包,import缺少的jar,极易中文分词组件用到了lucene这个开源搜索包
 回复 引用 查看   

#20楼 2008-12-04 19:09 杨海[未注册用户]

那个已经下载,那个问题已经解决,第二个问题没有解决
Exception in thread "main" java.lang.NullPointerException
at com.vista.TrainingDataManager.getTrainingFileCountOfClassification(TrainingDataManager.java:101)
at com.vista.TrainingDataManager.getTrainingFileCount(TrainingDataManager.java:88)
at com.vista.PriorProbability.calculatePc(PriorProbability.java:24)
at com.vista.BayesClassifier.calcProd(BayesClassifier.java:47)
at com.vista.BayesClassifier.classify(BayesClassifier.java:87)
at com.vista.BayesClassifier.main(BayesClassifier.java:122)


 回复 引用   

#21楼 2008-12-04 19:42 杨海[未注册用户]

String[] result=ChineseSpliter.split(text, " ").split(" ");
这句程序好牛啊,它如何把一个字符串变成很多字符串的,还有为什么可以用两个split
 回复 引用   

#22楼 2008-12-04 20:17 杨海[未注册用户]

这是我用你写的分词对你的例子进行的分词结果:
微软公司
提出
446亿
美元
价格
收购
雅虎
中国网
2月
1日
报道
美联社
消息
微软公司
提出
446亿
美元
现金
加股票
价格
收购
搜索
网站
雅虎
公司
微软
提出
每股
31
美元
价格
收购
雅虎
微软
收购
报价

雅虎
1月
31日
收盘价
19.18
美元
溢价
62%
微软公司

雅虎
公司
股东
可以
选择
现金
股票
进行
交易
微软
雅虎
公司
2006
年底
2007
年初
已在
寻求
双方
合作
近两年
雅虎
一直
处于
困境
市场份额
下滑
运营
业绩
不佳
股价
大幅
下跌
对于
力图
互联网
市场
有所作为
微软
来说
收购
雅虎
无疑是
一条
捷径
因为
双方
具有
非常
强的
互补性
小桥



所以我有个问题,这里分词结果没有一个字的,所以停用词也可以不要一个字的把;而且没有标点符号;你这个分词程序很先进啊;
不好意思,问太多了
 回复 引用   

#23楼[楼主] 2008-12-05 20:59 Phinecos(洞庭散人)      

@杨海
这里停用词是用不上
 回复 引用 查看   

#24楼[楼主] 2008-12-05 21:00 Phinecos(洞庭散人)      

#21楼 218.64.17.* yanghai_1198709@126.com 2008-12-04 19:42 杨海 [未注册用户]
String[] result=ChineseSpliter.split(text, " ").split(" ");
这句程序好牛啊,它如何把一个字符串变成很多字符串的,还有为什么可以用两个split
============================================
这个问题你应该先看看java方面的基础教程
 回复 引用 查看   

#25楼 2008-12-10 14:19 roler[未注册用户]

那个je-analysis-1.5.3.jar放哪里去?急问,我现在在做主客观文本分类  回复 引用   

#26楼[楼主] 2008-12-10 15:01 Phinecos(洞庭散人)      

@roler
什么放哪里去?把需要的jar引入到项目中不就是了?
 回复 引用 查看   

#27楼 2008-12-10 19:22 杨海[未注册用户]

@Phinecos(洞庭散人)
高手能具体一点吗?
小弟真的不知道
,也不知道从哪里去查
 回复 引用   

#28楼 2008-12-10 21:12 杨海[未注册用户]

谢谢你,知道了,它是一个库函数,在api里找到的  回复 引用   

#29楼 2008-12-14 10:04 roler[未注册用户]

ChineseSpliter.java里
import jeasy.analysis.MMAnalyzer;这里报错
MMAnalyzer analyzer = new MMAnalyzer(); 这里报错
急问,为什么,那个je-analysis-1.5.3jar包我已经放到eclipse里面去了
还是报错。请问为什么
 回复 引用   

#30楼[楼主] 2008-12-14 14:25 Phinecos(洞庭散人)      

@roler
eclipse中,右键项目名,build path-->add external Archives,找到je-analysis-1.5.3jar,引入它
 回复 引用 查看   

#31楼 2008-12-14 15:45 roler[未注册用户]

那个je-analysis-1.5.3jar包我导入了,但是还是报错
ChineseSpliter.java里
import jeasy.analysis.MMAnalyzer;这里报错
MMAnalyzer analyzer = new MMAnalyzer(); 这里报错
 回复 引用   

#32楼[楼主] 2008-12-14 16:01 Phinecos(洞庭散人)      

@roler
报什么错?
 回复 引用 查看   

#33楼 2008-12-15 09:12 roler[未注册用户]

Exception in thread "main" java.lang.Error: 无法解析的编译问题:
MMAnalyzer 不能解析为类型
MMAnalyzer 不能解析为类型

at com.vista.ChineseSpliter.split(ChineseSpliter.java:20)
at com.vista.BayesClassifier.classify(BayesClassifier.java:78)
at com.vista.BayesClassifier.main(BayesClassifier.java:122)
 回复 引用   

#34楼[楼主] 2008-12-15 14:24 Phinecos(洞庭散人)      

@roler
Window->Preferences->Java->Compiler,选择编译器水平为5.0以上,因为可能用到泛型,
 回复 引用 查看   

#35楼 2008-12-15 17:00 roler[未注册用户]

编译器一致性级别是选的5.0.但是还是有问题  回复 引用   

#36楼 2008-12-16 10:58 杨海[未注册用户]

楼主,你能告诉我更大更好更正规的训练文本的网址吗?我觉得那个训练文本太少了,分辨率不高
 回复 引用   

#37楼[楼主] 2008-12-16 12:12 Phinecos(洞庭散人)      

@杨海
sogou实验室不是有个107M的语料库,还不够?
 回复 引用 查看   

#38楼 2008-12-18 21:45 杨海[未注册用户]

那个分类不好,而且文本太多,有没有很正规的
 回复 引用   

#39楼 2008-12-18 21:56 roler[未注册用户]

散人大哥,能否建个群,我们这些鸟有问题可以方便和你沟通啊?  回复 引用   

#40楼 2008-12-19 11:15 杨海[未注册用户]

群主你好,我又有一个问题,好像你这个没有对训练文本进行分词,去除停用词把,这个也应该有必要把?  回复 引用   

#41楼 2008-12-19 11:16 杨海[未注册用户]

我希望大哥能建个群
方便我们这些菜鸟问啊,真的

 回复 引用   

#42楼 2008-12-19 14:36 hhh[未注册用户]

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/lucene/analysis/Analyzer 怎么解决?  回复 引用   

#43楼[楼主] 2008-12-19 14:48 Phinecos(洞庭散人)      

@hhh
见19楼回复
 回复 引用 查看   

#44楼[楼主] 2008-12-19 14:50 Phinecos(洞庭散人)      

@杨海
只用过这个,其他的语料库你再搜索下,有很多学术用的,不过国外的比较多
 回复 引用 查看   

#45楼[楼主] 2008-12-19 14:53 Phinecos(洞庭散人)      

@杨海
呵呵,没这个必要了吧,有问题可以email交流,而且我也不是会员,没法建群
 回复 引用 查看   

#46楼 2008-12-19 23:37 杨海[未注册用户]

要不我建一个,你加进来啊,群主,我问你的那个没有对训练文本进行分词和删除停用词,你怎么不回答啊?
 回复 引用   

#47楼[楼主] 2008-12-20 10:13 Phinecos(洞庭散人)      

@杨海
不需要,这是基于概率统计的方法,不是直接让你计算余弦相似度,使用TermVector的做法才需要分词,认真读读理论先
 回复 引用 查看   

#48楼 2008-12-21 09:00 杨海[未注册用户]

谢谢了,我知道你这个是利用是否出现在文档判断,如果是利用在文档中出现了几次的话,你就要分词了把  回复 引用   

#49楼[楼主] 2008-12-21 09:26 Phinecos(洞庭散人)      

@杨海
那最好的方法就是用项向量,计算相似余弦度的方法
 回复 引用 查看   

#50楼 2008-12-21 12:19 杨海[未注册用户]

谢谢了  回复 引用   

#51楼 2008-12-23 10:52 杨海[未注册用户]

群主 ,我 把训练文本改为1000篇,运行好久都没出结果,怎么解决啊,你试过吗?
 回复 引用   

#52楼 2009-01-03 23:05 qiangge_29[未注册用户]

运行报错说
Selection does not contain a main type
 回复 引用   

#53楼[楼主] 2009-01-04 09:57 Phinecos(洞庭散人)      

@qiangge_29
出现这个问题,是因为.java文件不在项目的src路径内,也就是说源代码未被eclipse编译,字节码不存在无法运行了
在项目名上右键 -> Builder Path -> Configure Build Path -> 选择Source面板 再点Add Folder, 把源代码所在的包路径的上层目录加进来,而且如果你是把两个类写在一个文件里的话,你在右键选择Run As JavaAppication 的时候,要把光标至于包括main方法的类上
==========================
这种与文章思路无关的基础问题请自行google
 回复 引用 查看   

#54楼 2009-01-05 22:46 qiangge_29[未注册用户]

楼主再打搅一下调试出现一下问题:
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.lucene.analysis.StopFilter.<init>(Lorg/apache/lucene/analysis/TokenStream;Ljava/util/Set;Z)V
at jeasy.analysis.MMAnalyzer.tokenStream(Unknown Source:27)
at jeasy.analysis.lIlllIIIIIllIlII.segment(Unknown Source:234)
at com.ChineseSpliter.split(ChineseSpliter.java:22)
at com.Beyes.classify(Beyes.java:79)
at com.Beyes.main(Beyes.java:123)
想了很久不知怎么解决!
望回!
 回复 引用   

#55楼[楼主] 2009-01-06 10:48 Phinecos(洞庭散人)      

@qiangge_29
见19楼回复
 回复 引用 查看   

#56楼 2009-01-07 14:28 javaboy[未注册用户]

java.lang.NoClassDefFoundError: jeasy/analysis/MMAnalyzer
at net.maya.ad.struts.adv.AnalyzerUrlAction.findAll(AnalyzerUrlAction.java:63)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
...


我在action类中:MMAnalyzer analyzer = new MMAnalyzer(2);就报上面错误..在一个test类中的main方法里使用正常 ..帮忙解决下.谢谢
 回复 引用   

#57楼 2009-01-11 15:39 jiayafei      

原来本文的源出处在这里。赞作者的慷慨!!!!!!  回复 引用 查看   

#58楼 2009-02-08 11:47 wzh[未注册用户]

谢谢了,无私的楼主  回复 引用   

#59楼 2009-02-23 10:25 dingxin[未注册用户]

我也是在做这个毕业设计,出现了20同样的问题:
Exception in thread "main" java.lang.NullPointerException
at com.vista.TrainingDataManager.getFilesPath(TrainingDataManager.java:49)
at com.vista.TrainingDataManager.getCountContainKeyOfClassification(TrainingDataManager.java:116)
at com.vista.ClassConditionalProbability.calculatePxc(ClassConditionalProbability.java:34)
at com.vista.BayesClassifier.calcProd(BayesClassifier.java:44)
at com.vista.BayesClassifier.classify(BayesClassifier.java:87)
at com.vista.BayesClassifier.main(BayesClassifier.java:122)

打扰楼主了,帮忙解决下!
 回复 引用   

#60楼 2009-03-04 15:40 shling[未注册用户]

下载了lucene包,也import了,可是还是出现以下错误,帮忙一下,谢谢!

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.lucene.analysis.StopFilter.<init>(Lorg/apache/lucene/analysis/TokenStream;Ljava/util/Set;Z)V
at jeasy.analysis.MMAnalyzer.tokenStream(Unknown Source:27)
at jeasy.analysis.lIlllIIIIIllIlII.segment(Unknown Source:234)
at com.vista.ChineseSpliter.split(ChineseSpliter.java:29)
at com.vista.BayesClassifier.classify(BayesClassifier.java:74)
at com.vista.BayesClassifier.main(BayesClassifier.java:116)
 回复 引用   

#61楼 2009-03-04 19:45 shling[未注册用户]

自己弄好了,不过还是要谢谢!  回复 引用   

#62楼 2009-03-10 15:46 路上有雪[未注册用户]

ret = (Nxc + 1) / (Nc + M + V);
我看了理论部分 这里V应该是所有训练文档中出现的词语数,而你这里用的是类别数?Nxc也应该是在某一类中单词出现的次数 你用的是出现的文档数?很不解?
这个问题没有回答
 回复 引用   

#63楼 2009-03-17 16:16 gg[未注册用户]

回62楼
他的方法是伯努利贝叶斯法,你说的是多项式贝叶斯法,
都可以用
 回复 引用   

#64楼 2009-03-25 19:16 magic0419[未注册用户]

我eclipse中运行你提供的代码时,提示MMAnalyzer无法解析为类型,有谁懂的,能帮助一下我吗。  回复 引用   

#65楼 2009-03-25 19:54 magic0419[未注册用户]

64楼的问题已经解决,可是在调试TrainingDataManager时遇到“从未使用导入java.util.properties”,不知道怎么办?另个一个问题是,如果要运行楼主这写代码,都需要安装些什么工具呀?现在我的电脑上已经安装了jdk1.6.0和eclipse3.2中文版。  回复 引用   

#66楼 2009-03-25 20:10 magic0419[未注册用户]

我用的是eclipse3.2中文版,在调试BayesClassifier 时遇到“语法错误,仅当源级别为 5.0 时已参数化的类型才可用”,请问楼主源级别在哪改呀。不好意思,因为我第一次用eclipse所以对它不熟悉,麻烦楼主了,谢谢!  回复 引用   

#67楼 2009-03-25 20:14 magic0419[未注册用户]

并且还遇到“类型 ArrayList 不是通用的;不能使用参数 <ClassifyResult> 将它参数化”、类型 List 不是通用的;不能使用参数 <ClassifyResult> 将它参数化”和“类型 Vector 不是通用的;不能使用参数 <String> 将它参数化”的问题,请楼主给我指点一下吧,非常感谢您的帮助。  回复 引用   

#68楼 2009-03-25 20:18 magic0419[未注册用户]

67楼的提问题太笨了,哈哈,我明白过来了。不好意思,楼主,让您见笑了。期待您能对65、66楼的问题提供帮助。  回复 引用   

#69楼 2009-03-25 20:36 magic0419[未注册用户]

楼主,您好,66楼的问题已经解决。但还有一个警告“从不在本地读取字段BayesClassifier.trainnigDataPath”。  回复 引用   

#70楼 2009-03-26 08:25 cc0930[未注册用户]

楼主,你好!看了你的中文文本分类的,效率不错。我想请教下,怎么对英语文本进行预处理?如去停用词,去超文本标记,取词干等,用 C++写 谢谢!  回复 引用   

#71楼 2009-04-05 20:04 magic0419[未注册用户]

com.vista.TrainingDataManager getCountContainKeyOfClassification
严重: null
java.io.FileNotFoundException: D:\TrainningSet\SogouC.mini\Sample (拒绝访问。)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at java.io.FileInputStream.<init>(FileInputStream.java:66)
at com.vista.TrainingDataManager.getText(TrainingDataManager.java:65)
at com.vista.TrainingDataManager.getCountContainKeyOfClassification(TrainingDataManager.java:114)
at com.vista.ClassConditionalProbability.calculatePxc(ClassConditionalProbability.java:35)
at com.vista.BayesClassifier.calcProd(BayesClassifier.java:41)
at com.vista.BayesClassifier.classify(BayesClassifier.java:84)
at com.vista.BayesClassifier.main(BayesClassifier.java:119)
 回复 引用   

#72楼 2009-04-05 20:05 magic0419[未注册用户]

请问楼主,71楼那个问题怎么解决呀?谢谢啦。  回复 引用   

#73楼 2009-04-07 00:18 万里[未注册用户]

60楼的哥们(shling)你是如何解决你的问题的,望给予回复,急用,谢谢.
邮件s030501408@sina.com
QQ:281600859
 回复 引用   

#74楼 2009-04-08 09:43 magic0419[未注册用户]

有谁能解决71楼的问题呀,请教高手给予指点,谢谢。  回复 引用   

#75楼 2009-04-08 16:46 magic0419[未注册用户]

问题全部解决,不用回复了。  回复 引用   

#76楼 2009-04-11 15:19 车超[未注册用户]

看了你的代码,很少启发。但有一个问题,在程序getCountContainKeyOfClassification(c, x)方法中;每计算一个词的出现频次,都要重新读一次文件,这样大量的I/O 操作会不会影响程序的运行速度,另外,每次计算一个词条在类别Ci出现的条件下出现的概率都要使用getTrainingFileCountOfClassification(c)计算一次类别出现的概率,这是不是有些重复。  回复 引用   

#77楼 2009-04-11 15:20 车超[未注册用户]

前面说错了,是很受启发,呵呵。  回复 引用   

#78楼 2009-04-14 14:45 ZMEREDITH

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.lucene.analysis.StopFilter.<init>(Lorg/apache/lucene/analysis/TokenStream;Ljava/util/Set;Z)V
at jeasy.analysis.MMAnalyzer.tokenStream(Unknown Source:28)
at jeasy.analysis.lIlllIIIIIllIlII.segment(Unknown Source:209)
at JaneBayesClassify.ChineseSpliter.split(ChineseSpliter.java:22)
at JaneBayesClassify.BayesClassifier.classify(BayesClassifier.java:73)
at JaneBayesClassify.BayesClassifier.main(BayesClassifier.java:117)


我已入了你们说的包,但是还是这错误,怎么样解决,61楼是怎么弄好的?!
 回复 引用   

#79楼 2009-04-14 14:46 ZMEREDITH

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.lucene.analysis.StopFilter.<init>(Lorg/apache/lucene/analysis/TokenStream;Ljava/util/Set;Z)V
at jeasy.analysis.MMAnalyzer.tokenStream(Unknown Source:28)
at jeasy.analysis.lIlllIIIIIllIlII.segment(Unknown Source:209)
at JaneBayesClassify.ChineseSpliter.split(ChineseSpliter.java:22)
at JaneBayesClassify.BayesClassifier.classify(BayesClassifier.java:73)
at JaneBayesClassify.BayesClassifier.main(BayesClassifier.java:117)


我已入了你们说的包,但是还是这错误,怎么样解决,61楼是怎么弄好的?!
 回复 引用   

#80楼 2009-04-14 14:46 ZMEREDITH

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.lucene.analysis.StopFilter.<init>(Lorg/apache/lucene/analysis/TokenStream;Ljava/util/Set;Z)V
at jeasy.analysis.MMAnalyzer.tokenStream(Unknown Source:28)
at jeasy.analysis.lIlllIIIIIllIlII.segment(Unknown Source:209)
at JaneBayesClassify.ChineseSpliter.split(ChineseSpliter.java:22)
at JaneBayesClassify.BayesClassifier.classify(BayesClassifier.java:73)
at JaneBayesClassify.BayesClassifier.main(BayesClassifier.java:117)


我已入了你们说的包,但是还是这错误,怎么样解决,61楼是怎么弄好的?!
 回复 引用   

#81楼 2009-04-16 09:17 zhangzd

请问楼主 为什么测试分类效率有点低呢?和电脑CPU有关系吗?稍长点的文章要等上半分多钟将近一分钟。  回复 引用   

#82楼 2009-04-16 16:55 冰月[未注册用户]

楼主是个好人  回复 引用   

#83楼 2009-04-23 15:47 木木木木

博主,你好,请问你的特征提取用的是什么方法啊,在程序哪一块实现的呢?  回复 引用   

#84楼 2009-04-23 16:30 木木木木

楼主,你是不是把文档分词处理后,去除然后去除停用此,剩下的全部当作特征项了呢?  回复 引用   

#85楼 2009-05-13 12:57 afafafaf[未注册用户]

--引用--------------------------------------------------
木木木木: 博主,你好,请问你的特征提取用的是什么方法啊,在程序哪一块实现的呢?
--------------------------------------------------------
同样的问题,请楼主回下
 回复 引用   

#86楼 2009-05-20 19:38 刘捷[未注册用户]

20和60楼的问题如何解决的,谢谢大虾们的帮助  回复 引用   

#87楼 2009-05-21 11:50 oop_ming[未注册用户]

楼主你好,我用你的分类器进行测试,语料库是搜狗的精简版本,为什么测试的准确性不是很高?还有一个问题,怎样让分类器一次性训练好训练集,而不需要每次进行分类的时候重新训练一次?

呵呵,一下子提了这么多问题,希望得到楼主的帮助,万分感谢...
 回复 引用   

#88楼 2009-05-22 20:24 shling[未注册用户]

路径错了,训练文本集放在D:\\TrainningSet就可以了  回复 引用   

#89楼 2009-05-26 12:37 oop_ming[未注册用户]

我是这样设置的,但好像准确性不是很高,请问怎样提高准确性呢?  回复 引用   

#90楼 2009-05-29 23:20 dirty[未注册用户]

不知楼主在不?我运行了一下您的程序,结果出现了这样的问题:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/lucene/analysis/Analyzer
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at com.vista.ChineseSpliter.split(ChineseSpliter.java:20)
at com.vista.BayesClassifier.classify(BayesClassifier.java:78)
at com.vista.BayesClassifier.main(BayesClassifier.java:129)
Caused by: java.lang.ClassNotFoundException: org.apache.lucene.analysis.Analyzer
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
... 27 more
不知是什么原因,望楼主给予解答,也希望各位大侠不吝赐教,多谢啦
 回复 引用   

#91楼 2009-05-30 01:18 dirty[未注册用户]

20楼和60楼的问题怎么解决的?有明白的大侠告诉我一声,多谢
 回复 引用   

#92楼 2009-08-18 15:55 皮皮猫[未注册用户]

这个Classes怎么获取的长度为0呢?
Classes.length=============0
Classes.length=~~~~~~~~~~~~=0
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.RangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at com.vista.BayesClassifier.classify(BayesClassifier.java:108)
at com.vista.BayesClassifier.main(BayesClassifier.java:115)
 回复 引用   

#93楼 2009-09-15 20:29 qingjiao[未注册用户]

我想问一下kdd99数据集是怎么随机抽取的,谢谢你  回复 引用   

#94楼 2009-11-18 14:22 武汉[未注册用户]

网络上关于朴素贝叶斯的分类程序,就楼主这里有,好急求啊  回复 引用   

#95楼 2010-05-30 17:25 sun008      

能够拜读高人的文章十分荣幸,由于本人是菜鸟,所以调试了好几天还是出现了上面提到的问题,也不知道解决办法,还请高人能赐教,不胜感激!!!
错误如下:
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.lucene.analysis.StopFilter.<init>(Lorg/apache/lucene/analysis/TokenStream;Ljava/util/Set;Z)V
at jeasy.analysis.MMAnalyzer.tokenStream(Unknown Source:27)
at jeasy.analysis.lIlllIIIIIllIlII.segment(Unknown Source:234)
at com.vista.ChineseSpliter.split(ChineseSpliter.java:23)
at com.vista.BayesClassifier.classify(BayesClassifier.java:78)
at com.vista.BayesClassifier.main(BayesClassifier.java:122)
那个用来训练的数据文件应该如何存储,是在D盘见一个TrainningSet文件夹,然后把下载后的压缩文件直接放进去吗?
望楼住赐教啊,十分期待
急 急 急 求!!!
 回复 引用 查看   

#96楼 2010-05-31 10:24 wxpeihao      

@sun008
TrainningSet下有10个文件夹,IT,财经,体育。。。把数字都换成ClassList.txt里对应的名字就好了。源代码再导入2个包就可以运行了。这个程序很好,继续研究。
 回复 引用 查看   

#97楼 2010-05-31 14:50 sun008      

非常感谢您的及时回复
我按照您说的去做了,包我已经加过了,加的是luecne-core-3.0.1.jar和je-analysis-1.5.3.jar
还需要再倒入别的包吗
TrainningSet 也按照您说的方式去建了,可是运行后还是会出现同样的问题,还请指教
 回复 引用 查看   

#98楼 2010-06-13 17:37 sun008      

今天看到了您的回复,很感谢。问题已经解决了,是luecne包版本的问题,不能用最新版的,很个性,换了个2.2版的就好了,还是很感谢。  回复 引用 查看   

#99楼 2010-07-20 11:14 流浪剑客      

楼主居然犯了个低级错误哦,后面都忘了乘以先验概率了,直接比较了条件概率  回复 引用 查看   

#100楼 2010-07-20 11:25 流浪剑客      

看错了,不好意思,
probility = calcProd(terms, Ci);//计算给定的文本属性向量terms在给定的分类Ci中的分类条件概率
这句的注释让我误会了。我以为你说的probility=P(Ai|Ci)
 回复 引用 查看   

#101楼 2010-12-21 11:13 yupenghua520      

谢谢,调通了,lucene版本不能用最新的呢。  回复 引用 查看   

#102楼 2011-03-07 15:29 wllxzc      

楼主,帮我看看这个问题哦
Exception in thread "main" java.lang.NullPointerException
at vista.TrainingDataManager.getFilesPath(TrainingDataManager.java:49)
at vista.TrainingDataManager.getCountContainKeyOfClassification(TrainingDataManager.java:108)
at vista.ClassConditionalProbability.calculatePxc(ClassConditionalProbability.java:34)
at vista.BayesClassifier.calcProd(BayesClassifier.java:45)
at vista.BayesClassifier.classify(BayesClassifier.java:88)
at vista.BayesClassifier.main(BayesClassifier.java:123)
急。。。
 回复 引用 查看   

#103楼 2011-12-29 21:22 笑翱江湖      

看过你的这篇博文,去查看其它相关资料的时候,发现你的这篇文章被人原封不动的作为了一论文发表了。 真相见链接:[url=http://wenku.baidu.com/view/c9d6a6e9e009581b6bd9eb90.html]  回复 引用 查看   

#104楼[楼主] 2011-12-29 23:07 Phinecos(洞庭散人)      

@笑翱江湖
我靠,太无耻了!!!。。。
 回复 引用 查看   

评论共2页: 上一页 1 2 

导航

统计

公告




联系方式
新浪微博:http://weibo.com/phinecos
Email: phinecos@gmail.com
昵称:Phinecos(洞庭散人)
园龄:5年9个月
粉丝:219
关注:0

搜索

 

随笔分类(734)

随笔档案(596)

常去的站点

我的好友

我的站点

积分与排名

最新评论

阅读排行榜

评论排行榜

推荐排行榜