Lucene系列 分析器

2021-06-26 12:37:19 字數 1780 閱讀 5778

搜尋的基礎是對文字資訊進行分析,lucene的分析工具在org.apache.lucene.analysis包中。分析器負責對文字進行分詞、語言處理得到詞條,建索引和搜尋的時候都需要用到分析器,兩者應當是同乙個,否則沒法很好的匹配。

lucene的分析器往往包括乙個分詞器(tokenizer)和多個過濾器(tokenfilter),過濾器負責對切出來的詞進行處理,如去掉敏感詞、轉換大小寫、轉換單複數等。tokenstream方法中往往是先使用乙個tokenizer,接著使用多個tokenfilter,lucene自帶的standardanalyzer就使用了standardtokenizer with standardfilter, lowercasefilter and stopfilter。抽象基類結構圖如下。

注:停詞-頻繁使用但沒有意義的詞,在建索引或搜尋時忽略掉。英語中的冠詞、介詞、連詞(an/this/and),中文中的"的/也/為"。

以"hello, this is a test case. 你好,這是乙個測試的例項。created on 20140707"為例。

如何獲取切詞後的token

之前

analyzer analyzer = new maxwordanalyzer();

tokenstream stream = analyzer.tokenstream("", new stringreader("hello, this is a test case. " +

"你好,這是乙個測試的例項。" + "created on 20140707"));

string out = "";

while (stream.incrementtoken())

system.out.println(out);

之後

analyzer analyzer = new standardanalyzer();

tokenstream stream = analyzer.tokenstream("", new stringreader("hello, this is a test case. " +

"你好,這是乙個測試的例項。" + "created on 20140707"));

string out = "";

while(stream.incrementtoken())

system.out.println(out);

mmseg4j詞典詞典要求utf-8編碼,可以在例項化analyzer時指定詞典路徑,也可以設定mmseg.dic.path來指定詞典路徑,作者說自己會預設從當前目錄下的data目錄讀取詞典檔案,但是我測試好像不行。如果不指定路徑,倒是會從mmseg4j的jar包中的data目錄載入詞典。

chars.dic每行是乙個單個字和對應頻率,中間用空格分開,一般不用關心。猜測是不是低頻率的字可以認為是亂碼,丟棄不建索引呢。

units.dic每行是乙個單位的字,如分、畝,用以單獨切分。

words***.dic是自定義詞庫檔案。

使用mmseg4j時需要3個包:mmseg4j-core.jar包含詞庫檔案,mmseg4j-analysis.jar是一些analysis(如maxwordanalyzer),mmseg4j-solr.jar是一些solr使用的功能。

Lucene分析器的實現

public abstract class analyzer public int getpositionincrementgap string fieldname string content stringreader reader new stringreader content analyze...

lucene 同義詞分析器

這個分析器用synonymfilter過濾器對standardanalyzer類進行封裝,當向這個過濾器輸入各個項時,會對這些項進行緩衝,並使用棧儲存這些項的同義詞 public class synonymfilter extends tokenfilter publicstatic final s...

分析與分析器

分析 包含下面的過程 分析器執行上面的工作。分析器 實際上是將三個功能封裝到了乙個包裡 字元過濾器 首先,字串按順序通過每個 字元過濾器 他們的任務是在分詞前整理字串。乙個字元過濾器可以用來去掉html,或者將 轉化成 and 分詞器其次,字串被 分詞器分為單個的詞條。乙個簡單的分詞器遇到空格和標點...