1. 程式人生 > >Lucene筆記14-Lucene的分詞-分詞器的原理講解

Lucene筆記14-Lucene的分詞-分詞器的原理講解

一、分詞器原理

最主要的分詞器有SimpleAnalyzer、StopAnalyzer、WhitespaceAnalyzer、StandardAnalyzer。

先來研究一下SimpleAnalyzer。當一串資料傳進來之後,會被轉化成TokenStream這樣一個東西,這個TokenStream中就儲存著所有的分詞資訊。TokenStream是一個抽象類,它有兩個實現類,分別是Tokenizer和TokenFilter。其中Tokenizer將一組資料劃分成一個一個的語彙單元,TokenFilter將這些語彙單元進行過濾並處理,將通常是一組TokenFilter來完成這個操作,因為有的Filter是過濾停用詞的,有的是需要將首字母轉換成小寫的,有的是將詞語轉換成原型的,等等。最後將資料傳遞給TokenStream。

二、示例詳解

假設我們需要分詞的是“how are you, thank you”這麼一個字串。首先這個字串會被拆成“how”、“are”、“you”、“thank”、“you”這5個語彙單元,這5個語彙單元需要儲存資訊和位置,於是CharAttributeTerm儲存了相應的語彙單元,OffsetTerm儲存了各個詞彙之間的偏移量,PositionIncrTerm儲存了詞於詞之間的位置增量,預設為1,如果3個詞中,第2個詞是停用詞,那麼第1個和第3個詞之間的位置增量就不是1了。其實Lucene查詢這次詞語是根據位置來查詢的,如果同一個位置有兩個詞語,那麼查詢的時候都會查找出來,這是同義詞的概念,現在描述不清楚,後面再詳細介紹。