自定義分詞器Analyzer

2021-07-23 05:44:41 字數 1848 閱讀 2869

參考:

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 ...