java 去停用词_Lucene学习之——停用词
做中文文本聚類,研究中科院的imdict-chinese-analyzer分詞器時(shí),我自己加載的停用詞表一直都跑不出正確的結(jié)果,于是,就追蹤lucene是怎么加載自己的停用詞表的。在源代碼的WordListLoader.java類中,發(fā)現(xiàn)了這樣的代碼:
publicstaticHashSet?getWordSet(Reader?reader)throwsIOException?{
HashSet?result?=newHashSet();
BufferedReader?br?=null;
try{
if(readerinstanceofBufferedReader)?{
br?=?(BufferedReader)?reader;
}else{
br?=newBufferedReader(reader);
}
String?word?=null;
while((word?=?br.readLine())?!=null)?{
result.add(word.trim());
}
}
finally{
if(br?!=null)
br.close();
}
returnresult;
}
問(wèn)題就變得清晰了,于是我在這行代碼中加入了輸出語(yǔ)句,把從文件中加載進(jìn)去的停用詞打印出來(lái)。這樣,就找到了問(wèn)題的根源了:停用詞表的編碼格式問(wèn)題(我設(shè)置的編碼格式為:Unicode)
把研究的結(jié)果總結(jié)如下:
1、Lucene支持的停用詞表文件有utf-8.
2、停用詞表的格式很簡(jiǎn)單:每詞一行.
3、Luence中支持停用詞的方式有5種(見(jiàn)org.apache.lucene.analysis.StopAnalyzer.java類的5種構(gòu)造方法):StopAnalyzer.java類默認(rèn)停用詞,以String[]傳入,以Set傳入,以File傳入,以Reader傳入
4、? 關(guān)于停用詞處理的參考代碼如下:
packagecom.xh.TextClustering;
importjava.io.File;
importjava.io.IOException;
importjava.io.StringReader;
importorg.apache.lucene.analysis.Analyzer;
importorg.apache.lucene.analysis.Token;
importorg.apache.lucene.analysis.TokenStream;
importorg.apache.lucene.index.CorruptIndexException;
importorg.apache.lucene.store.LockObtainFailedException;
publicclassStopAnalyzerTestChinese
{
staticString??source="我?是?中國(guó)人。";
publicstaticvoidmain(String?args[])
{
Indexer();
}
privatestaticvoidIndexer()
{
//Analyzer?analyzer=new?StopAnalyzer();
try{
Analyzer?analyzer=newStopAnalyzer(newFile("chinese_stopword.dic"));
//??????????IndexWriter?writer=new?IndexWriter(IndexPath,analyzer,true,MaxFieldLength.UNLIMITED);
//??????????Document?document=new?Document();
//??????????Field?field_content=new?Field("content",source,Field.Store.YES,Field.Index.ANALYZED);
//??????????document.add(field_content);
//??????????ArrayList?ItemList=new?ArrayList();
TokenStream?stream=analyzer.tokenStream("content",newStringReader(source));
while(true)
{
Token?item=stream.next();
if(null==item)break;
System.out.println("{"+item.termText()+"}");
}
//??????????writer.optimize();
//??????????writer.close();
}catch(CorruptIndexException?e)?{
e.printStackTrace();
}catch(LockObtainFailedException?e)?{
e.printStackTrace();
}catch(IOException?e)?{
e.printStackTrace();
}
}
}
注:參考中文停用詞表在附件中。
總結(jié)
以上是生活随笔為你收集整理的java 去停用词_Lucene学习之——停用词的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【算法设计与分析】13 分治策略的设计思
- 下一篇: phoenix Explain Plan