參考:
analyzer,或者說文字分析的過程,實質上是將輸入文字轉化為文字特徵向量的過程。這裡所說的文字特徵,可以是詞或者是短語。它主要包括以下四個步驟:
1、分詞,將文字解析為單詞或短語
2、歸一化,將文字轉化為小寫
3、停用詞處理,去除一些常用的、無意義的詞
4、提取詞幹,解決單複數、時態語態等問題
lucene analyzer包含兩個核心元件,tokenizer以及tokenfilter。兩者的區別在於,前者在字元級別處理流,而後者則在詞語級別處理流。tokenizer是analyzer的第一步,其建構函式接收乙個reader作為引數,而tokenfilter則是乙個類似***的東東,其引數可以使tokenstream、tokenizer,甚至是另乙個tokenfilter。整個lucene analyzer的過程如下圖所示:
上圖中的一些名詞的解釋如下表所示: 類說明
token
表示文中出現的乙個詞,它包含了詞在文字中的位置資訊
analyzer
將文字轉化為tokenstream的工具
tokenstream
文字符號的流
tokenizer
在字元級別處理輸入符號流
tokenfilter
在字元級別處理輸入符號流,其輸入可以是tokenstream、tokenizer或者tokenfilter
lucene分詞自定義
tokenstream繼承關係圖如下:
stopanalyzer,standardanalyze,whitespaceanalyzer,******analyzer,keywordanalyzer都繼承自父類analyzer。
因此只要實現父類的虛方法tokenstream 就可以實現分析。
分詞的切分演算法由繼承自父類tokenizer的方法
public final boolean incrementtoken() throws ioexception 來實現。
因此自定義繼承類tokenizer並實現其incrementtoken演算法就可以實現自定義的分詞。
//自定義禁用分詞器
public class userdefinedanalyzer extends analyzer
/*** 傳乙個禁用詞陣列
* @param sws
*/public userdefinedanalyzer (string sws)
/*** 自定義分詞器
*/@override
public tokenstream tokenstream(string str, reader reader)
public static void displaytoken(string str,analyzer a)
system.out.println();
} catch (ioexception e) }
}
測試類
public class test );
//analyzer a1=new userdefinedanalyzer();
string str="my name is paul";
userdefinedanalyzer.displaytoken(str, a1);
}}
大小: 17.2 kb
大小: 9.2 kb
IKAnalyzer 自定義分詞器
lucene 全文搜尋框架,具體的定義在這裡就不過多的介紹。那麼主要講一下,利用第三方分詞器自定義我們的分成規則,ikanalyzer 庖丁分詞器就是乙個很好的中文分詞器。首先匯入對應的jar包,我們都很清楚,配置檔案是一種有效擴充套件的一種方式,那麼ikanalyzer也不例外。1.首先建立乙個專...
Lucene採用自定義分詞器
專案中用到了lucene構建索引,但是公司有自己的分詞器,為了保持跟其它模組的一致性,必須將分詞器整合進lucene中,其實網上這樣的例子會比較多,不過很多都是不完整的,自己在這裡貼出來個完整的,思想比較簡單,基本就是按照自己的分詞器分完詞之後按照空格分隔,然後利用lucene的whitespace...
自定義中文分詞
基於統計的分詞 序列模型分詞 常用的分詞方法有 基於規則的分詞是通過維護字典的方法,在切分語句時將語句中的字元與詞典進行逐一匹配去劃分詞語,是一種比較機械的分詞方式 my dict 江大橋 研究 生命科學 南京市 研究生 大橋 科學 課題 南京市長 生命 長江大橋 南京 市長 max length ...