Lucene支持中文分词代码实现
- 支持中文分詞
- 分析器(Analyzer)的執(zhí)行過程
如下圖是語匯單元的生成過程:
從一個Reader字符流開始,創(chuàng)建一個基于Reader的Tokenizer分詞器,經(jīng)過三個TokenFilter生成語匯單元Token。
要看分析器的分析效果,只需要看Tokenstream中的內(nèi)容就可以了。每個分析器都有一個方法tokenStream,返回一個tokenStream對象。
- 分析器的分詞效果
- 中文分析器
- Lucene自帶中文分詞器
StandardAnalyzer
單字分詞:就是按照中文一個字一個字地進行分詞。如:“我愛中國”,
效果:“我”、“愛”、“中”、“國”。
CJKAnalyzer
二分法分詞:按兩個字進行切分。如:“我是中國人”,效果:“我是”、“是中”、“中國”“國人”。
上邊兩個分詞器無法滿足需求。
SmartChineseAnalyzer
對中文支持較好,但擴展性差,擴展詞庫,禁用詞庫和同義詞庫等不好處理
- 第三方中文分析器
paoding: 庖丁解牛最新版在 https://code.google.com/p/paoding/ 中最多支持Lucene 3.0,且最新提交的代碼在 2008-06-03,在svn中最新也是2010年提交,已經(jīng)過時,不予考慮。
mmseg4j:最新版已從 https://code.google.com/p/mmseg4j/ 移至 https://github.com/chenlb/mmseg4j-solr,支持Lucene 4.10,且在github中最新提交代碼是2014年6月,從09年~14年一共有:18個版本,也就是一年幾乎有3個大小版本,有較大的活躍度,用了mmseg算法。
IK-analyzer: 最新版在https://code.google.com/p/ik-analyzer/上,支持Lucene 4.10從2006年12月推出1.0版開始, IKAnalyzer已經(jīng)推出了4個大版本。最初,它是以開源項目Luence為應(yīng)用主體的,結(jié)合詞典分詞和文法分析算法的中文分詞組件。從3.0版本開 始,IK發(fā)展為面向Java的公用分詞組件,獨立于Lucene項目,同時提供了對Lucene的默認優(yōu)化實現(xiàn)。在2012版本中,IK實現(xiàn)了簡單的分詞 歧義排除算法,標(biāo)志著IK分詞器從單純的詞典分詞向模擬語義分詞衍化。 但是也就是2012年12月后沒有在更新。
ansj_seg:最新版本在 https://github.com/NLPchina/ansj_seg tags僅有1.1版本,從2012年到2014年更新了大小6次,但是作者本人在2014年10月10日說明:“可能我以后沒有精力來維護ansj_seg了”,現(xiàn)在由”nlp_china”管理。2014年11月有更新。并未說明是否支持Lucene,是一個由CRF(條件隨機場)算法所做的分詞算法。
imdict-chinese-analyzer:最新版在 https://code.google.com/p/imdict-chinese-analyzer/ , 最新更新也在2009年5月,下載源碼,不支持Lucene 4.10 。是利用HMM(隱馬爾科夫鏈)算法。
Jcseg:最新版本在git.oschina.net/lionsoul/jcseg,支持Lucene 4.10,作者有較高的活躍度。利用mmseg算法。
- IKAnalyzer
使用方法:
第一步:把jar包添加到工程中
第二步:把配置文件和擴展詞典和停用詞詞典添加到classpath下
注意:mydict.dic和ext_stopword.dic文件的格式為UTF-8,注意是無BOM 的UTF-8 編碼。
使用EditPlus.exe保存為無BOM 的UTF-8 編碼格式,如下圖:
-
Analyzer使用時機
-
索引時使用Analyzer
輸入關(guān)鍵字進行搜索,當(dāng)需要讓該關(guān)鍵字與文檔域內(nèi)容所包含的詞進行匹配時需要對文檔域內(nèi)容進行分析,需要經(jīng)過Analyzer分析器處理生成語匯單元(Token)。分析器分析的對象是文檔中的Field域。當(dāng)Field的屬性tokenized(是否分詞)為true時會對Field值進行分析,如下圖:
對于一些Field可以不用分析:
1、不作為查詢條件的內(nèi)容,比如文件路徑
2、不是匹配內(nèi)容中的詞而匹配Field的整體內(nèi)容,比如訂單號、身份證號等。
- 搜索時使用Analyzer
對搜索關(guān)鍵字進行分析和索引分析一樣,使用Analyzer對搜索關(guān)鍵字進行分析、分詞處理,使用分析后每個詞語進行搜索。比如:搜索關(guān)鍵字:spring web ,經(jīng)過分析器進行分詞,得出:spring web拿詞去索引詞典表查找 ,找到索引鏈接到Document,解析Document內(nèi)容。
對于匹配整體Field域的查詢可以在搜索時不分析,比如根據(jù)訂單號、身份證號查詢等。
總結(jié)
以上是生活随笔為你收集整理的Lucene支持中文分词代码实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 配置Lucene开发环境
- 下一篇: Lucene索引库的维护功能实现