Lucene的CJKAnalyzer分析器
Lucene的CJKAnalyzer分析器。
CJKAnalyzer分析器的思想:
對中文漢字,每兩個字作為一個詞條,例如A,B,C,D是四個中文漢字,使用CJKAnalyzer分析器分詞后一共得到三個詞條如下:
AB,BC,CD。
其實,CJKAnalyzer分析器在對中文分詞方面比StandardAnalyzer分析器要好一點。因為根據(jù)中文的習(xí)慣,包括搜索的時候鍵入關(guān)鍵字的習(xí)慣,中文的詞(大于一個漢字)比單個漢字的頻率應(yīng)該高一些。
但是,在設(shè)置相同的過濾詞條文本以后,CJKAnalyzer分析器的缺點就是產(chǎn)生了冗余會比較大,相對于StandardAnalyzer分析器來說。使用StandardAnalyzer分析器可以考慮在以字作為詞條時,通過過濾詞條文本來優(yōu)化分詞。而CJKAnalyzer分析器在給定的過濾詞條文本的基礎(chǔ)之上,獲取有用的詞條實際是一個在具有一定中文語言習(xí)慣的基礎(chǔ)上能夠獲得最高的期望。
如果使用默認的過濾詞條文本:
package org.shirdrn.lucene;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.Token;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.cjk.CJKAnalyzer;
public class MyAnalyzer {
public static void main(String[] args) {
try {
File file = new File("E:\\shirdrn.txt");
FileReader stopWords = new FileReader("E:\\stopWords.txt");
Reader reader = new FileReader(file);
Analyzer a = new CJKAnalyzer();
TokenStream ts = a.tokenStream("", reader);
Token t = null;
int n = 0;
while((t = ts.next()) != null ){
n ++ ;
System.out.println("詞條"+n+"的內(nèi)容為 :"+t.termText());
}
System.out.println("== 共有詞條 "+n+" 條 ==");
} catch (Exception e) {
e.printStackTrace();
}
}
}
即:沒有對中文詞條限制,結(jié)果可以看到:
詞條1的內(nèi)容為 :中秋
詞條2的內(nèi)容為 :秋之
詞條3的內(nèi)容為 :之夜
詞條4的內(nèi)容為 :享受
詞條5的內(nèi)容為 :受著
詞條6的內(nèi)容為 :著月
詞條7的內(nèi)容為 :月華
詞條8的內(nèi)容為 :華的
詞條9的內(nèi)容為 :的孤
詞條10的內(nèi)容為 :孤獨
詞條11的內(nèi)容為 :享受
詞條12的內(nèi)容為 :受著
詞條13的內(nèi)容為 :著爆
詞條14的內(nèi)容為 :爆炸
詞條15的內(nèi)容為 :炸式
詞條16的內(nèi)容為 :式的
詞條17的內(nèi)容為 :的思
詞條18的內(nèi)容為 :思維
詞條19的內(nèi)容為 :維躍
詞條20的內(nèi)容為 :躍遷
== 共有詞條 20 條 ==
產(chǎn)生的無用的詞條大概占50%左右,而且,如果被分詞的文件很大,存儲也有一定的開銷,相對于使用StandardAnalyzer分析器。相對于使用StandardAnalyzer分析器,使用CJKAnalyzer分析器的存儲開銷是StandardAnalyzer分析器的兩倍。
這里,無論是那種分詞方式(對于StandardAnalyzer分析器和CJKAnalyzer分析器來說),都要考慮對重復(fù)的詞條進行處理。
CJKAnalyzer分析器的分詞工具是CJKTokenizer核心類。至于如果過濾,這和StandardAnalyzer分析器很相似,但是它只是設(shè)置了在程序中指定了一個stopTable。可以參考StandardAnalyzer分析器實現(xiàn)讀取文件系統(tǒng)中的文本的實現(xiàn)。
Lucene的ChineseAnalyzer分析器。
ChineseAnalyzer分析器其實就是StandardAnalyzer分析器,對單個的中文漢字作為一個詞條。
也可以指定一個stopTable。

浙公網(wǎng)安備 33010602011771號