贝叶斯文本分类器JAVA

  • h3_643712
    了解作者
  • 1.8MB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-03-31 05:54
    上传日期
贝叶斯文本分类器JAVA,有lucene-core-2.9.4,je-analysis-1.5.1包
Bayesian.zip
内容介绍
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.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; 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) throws IOException { //String text = " 随着近代科学的发展,邮政投递、电话传真、卫星电视越来越变成人类社会进步的通讯方式,而从70年代以来随着计算机的迅速发展,电脑信息网络作为一种全新的通讯传播手段正日益兴起,成为一种快捷安全、沟通人与外部世界联系的工具。"; String text = BayesClassifier.readFile("D:/0 (2).txt"); //System.out.println(text); BayesClassifier classifier = new BayesClassifier();//构造Bayes分类器 String result = classifier.classify(text);//进行分类 System.out.println("此项属于["+result+"]"); } public static void readToBuffer(StringBuffer buffer, String filePath) throws IOException { InputStream is = new FileInputStream(filePath); String line; // 用来保存每行读取的内容 BufferedReader reader = new BufferedReader(new InputStreamReader(is)); line = reader.readLine(); // 读取第一行 while (line != null) { // 如果 line 为空说明读完了 buffer.append(line); // 将读到的内容添加到 buffer 中 buffer.append("\n"); // 添加换行符 line = reader.readLine(); // 读取下一行 } reader.close(); is.close(); } public static String readFile(String filePath) throws IOException { StringBuffer sb = new StringBuffer(); BayesClassifier.readToBuffer(sb, filePath); return sb.toString(); } }
评论
    相关推荐
    • lucene开发实例
      lucene相关开发实例 包含了lucene基本应用。。相关资料等。。
    • lucene实例lucene实例
      lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例
    • 行业分类-设备装置-一种修改Lucene索引文件中词的方法及装置.zip
      行业分类-设备装置-一种修改Lucene索引文件中词的方法及装置
    • lucene facet bobo-browse实现
      lucene的facet用bobo-browse实现的办法,可以实现淘宝分类样式
    • 基于Lucene4.8的空间检索
      针对已知坐标search一定范围内的其他point,根据分类或名称进行search,源文件为类似"PVID","ELPVID","POINAME" 的UTF-8的csv文件
    • lucene3.0 例子
      lucene3.0 例子lucene3.0 例子 lucene3.0 例子 ,很好的学习,只有原代原,jar 包自己加上去就OK了
    • lucene学习文档
      从网上找的资料,然后生成的pdf文档,后来发现网上已经有了,不过还是和大家分享一下,里面含一个sql+lucene实例
    • Lucene搜索例子
      Lucene搜索的一个例子,web工程,有分页。使用Lucene建立索引,实现文档的检索,并把检索结果显示在页面上,对显示结果做分页
    • lucene学习笔记
      有很简单的实例 内容详实 适合初学者主要是lucene的基本操作
    • Lucene 3.0 原理
      Lucene 3.0 原理 Lucene 3.0 原理 Lucene 3.0 原理 Lucene 3.0 原理