使用WVTool进行文本分类
2009-12-25 11:32
661 查看
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.util.Calendar; import java.util.List; import edu.udo.cs.wvtool.config.WVTConfiguration; import edu.udo.cs.wvtool.config.WVTConfigurationFact; import edu.udo.cs.wvtool.generic.output.WordVectorWriter; import edu.udo.cs.wvtool.generic.stemmer.DummyStemmer; import edu.udo.cs.wvtool.generic.stemmer.WVTStemmer; import edu.udo.cs.wvtool.generic.tokenizer.WVTTokenizer; import edu.udo.cs.wvtool.generic.vectorcreation.TFIDF; import edu.udo.cs.wvtool.generic.wordfilter.DummyWordFilter; import edu.udo.cs.wvtool.generic.wordfilter.WVTWordFilter; import edu.udo.cs.wvtool.main.WVTDocumentInfo; import edu.udo.cs.wvtool.main.WVTFileInputList; import edu.udo.cs.wvtool.main.WVTWordVector; import edu.udo.cs.wvtool.main.WVTool; import edu.udo.cs.wvtool.wordlist.WVTWordList; public class MyTest{ public static void main(String[] args) throws Exception { //初始化一个WVTool对象 WVTool wvt = new WVTool(false); //初始化一个configuration对象 WVTConfiguration config = new WVTConfiguration(); WVTStemmer stemmer = new DummyStemmer(); WVTTokenizer tk = new ChineseTokenizer(); //DummyStopWordFilter filter = new DummyStopWordFilter(); WVTWordFilter filter = new DummyWordFilter(); config.setConfigurationRule(WVTConfiguration.STEP_TOKENIZER, new WVTConfigurationFact(tk)); config.setConfigurationRule(WVTConfiguration.STEP_STEMMER, new WVTConfigurationFact(stemmer)); config.setConfigurationRule(WVTConfiguration.STEP_WORDFILTER, new WVTConfigurationFact(filter)); WVTFileInputList list = new WVTFileInputList(2); // Add entries //为输入添加一个文档信息对象 (WVTDocumentInfo),其中sourceName对象可以是一个文件夹的名称,也可以是一个文件名称, 最后一个0这个文档信息对象的类别 //样本数据 //list.addEntry(new WVTDocumentInfo("a.txt", "txt", "", "", 0)); //list.addEntry(new WVTDocumentInfo("b.txt", "txt", "", "", 1)); list.addEntry(new WVTDocumentInfo("D:/temp/1", "txt", "", "chinese", 0)); list.addEntry(new WVTDocumentInfo("D:/temp/2", "txt", "", "chinese", 1)); //生成wordList WVTWordList wordList = wvt.createWordList(list, config); //对wordList中词频做出一个限制,即词频在1<n<5之间 wordList.pruneByFrequency(1, 5); //生成词组文件 wordList.storePlain(new FileWriter("wordlist.txt")); // 生成词频文件 wordList.store(new FileWriter("wordVector.txt")); //将生成的文本向量空间写入一个特定的文件 FileWriter outFile = new FileWriter("wv.txt"); //DummyWordVectorWriter wvw = new DummyWordVectorWriter(outFile, true); WordVectorWriter wvw = new WordVectorWriter(outFile,true); config.setConfigurationRule(WVTConfiguration.STEP_OUTPUT, new WVTConfigurationFact(wvw)); config.setConfigurationRule(WVTConfiguration.STEP_VECTOR_CREATION, new WVTConfigurationFact(new TFIDF())); //Create the vectors WVTWordVector[] vectors = wvt.createVectors(list, config, wordList,null); //Close the output file wvw.close(); outFile.close(); // 一个使用wordList构建文本空间向量的实例 //WVTWordVector q = wvt.createVector("cmu harvard net", wordList); //测试的文本 WVTDocumentInfo d = new WVTDocumentInfo("", "txt", "", "chinese"); //测试文本的内容 String txt = getContent("test.txt"); //根据wordlist和config 生成向量 WVTWordVector q = wvt.createVector(txt, d, config, wordList); FileWriter outFile1 = new FileWriter("test_wv1.txt"); WordVectorWriter wvw1 = new WordVectorWriter(outFile1, true); wvw1.write(q); wvw1.close(); outFile1.close(); //knn算法分类 KNN knn = new KNN(); //分类结果 List result = knn.LazyLearning(q, vectors, list.getNumClasses()); for(int i=0;i<result.size();i++){ CategoryResult cr = (CategoryResult) result.get(i); System.out.println("rs:"+cr.getCategoryName()+" "+cr.getSimilarity()); } } public static String getContent(String file) throws IOException{ File myfile = new File(file); if (!myfile.exists()) { return ""; } File f=new File(file); InputStreamReader read = new InputStreamReader (new FileInputStream(f)); BufferedReader reader = new BufferedReader(read); String line; String strContent = ""; while((line=reader.readLine())!=null){ strContent+=line; } return strContent; } }
相关文章推荐
- 使用scikit-learn进行文本分类
- Python使用jieba分词并用weka进行文本分类
- 使用fastText进行文本分类及源码分析时的一点感受
- 情感分析的新方法,使用word2vec对微博文本进行情感分析和分类
- 【机器学习实验】使用朴素贝叶斯进行文本的分类
- 使用朴素贝叶斯进行文本的分类
- Scikit-learn中使用SVM对文本进行分类
- Python3:《机器学习实战》之朴素贝叶斯(2)使用Python进行文本分类
- 使用tensorflow实现的感知机进行文本分类
- 文本分类(六):使用fastText对文本进行分类--小插曲
- Python 文本分类:使用scikit-learn 机器学习包进行文本分类
- 【NLP】使用朴素贝叶斯进行文本的分类
- 【机器学习实验】使用朴素贝叶斯进行文本的分类
- 使用 全连接神经网络 和 词袋模型 进行文本分类的example
- 使用CNN进行文本分类代码实现
- 使用CountVectorizer并且不去掉停用词的条件下,对文本特征进行量化的朴素贝叶斯分类性能测试
- 使用libsvm进行文本分类
- 使用lingpipe自然语言处理包进行文本分类
- 【机器学习笔记之八】使用朴素贝叶斯进行文本的分类
- 文本分类(六):使用fastText对文本进行分类--小插曲