1.1 什麼是中文分詞器
學過英文的都知道,英文是以單詞爲單位的,單詞與單詞之間以空格或者逗號句號隔開。而中文則以字爲單位,字又組成詞,字和詞再組成句子。所以對於英文,我們可以簡單以空格判斷某個字符串是否爲一個單詞,比如I love China,love 和 China很容易被程序區分開來;但中文“我愛中國”就不一樣了,電腦不知道“中國”是一個詞語還是“愛中”是一個詞語。把中文的句子切分成有意義的詞,就是中文分詞,也稱切詞。我愛中國,分詞的結果是:我 愛 中國。
1.2 Lucene自帶的中文分詞器
l StandardAnalyzer:
單字分詞:就是按照中文一個字一個字地進行分詞。如:“我愛中國”,
效果:“我”、“愛”、“中”、“國”。
l CJKAnalyzer
二分法分詞:按兩個字進行切分。如:“我是中國人”,效果:“我是”、“是中”、“中國”“國人”。
上邊兩個分詞器無法滿足需求。
1.3 第三方中文分詞器
l paoding: 庖丁解牛最新版在 https://code.google.com/p/paoding/ 中最多支持Lucene 3.0,且最新提交的代碼在 2008-06-03,在svn中最新也是2010年提交,已經過時,不予考慮。
l mmseg4j:最新版已從 https://code.google.com/p/mmseg4j/ 移至 https://github.com/chenlb/mmseg4j-solr,支持Lucene 4.10,且在github中最新提交代碼是2014年6月,從09年~14年一共有:18個版本,也就是一年幾乎有3個大小版本,有較大的活躍度,用了mmseg算法。
l IK-analyzer: 最新版在https://code.google.com/p/ik-analyzer/上,支持Lucene 4.10從2006年12月推出1.0版開始, IKAnalyzer已經推出了4個大版本。最初,它是以開源項目Luence爲應用主體的,結合詞典分詞和文法分析算法的中文分詞組件。從3.0版本開 始,IK發展爲面向Java的公用分詞組件,獨立於Lucene項目,同時提供了對Lucene的默認優化實現。在2012版本中,IK實現了簡單的分詞 歧義排除算法,標誌着IK分詞器從單純的詞典分詞向模擬語義分詞衍化。 但是也就是2012年12月後沒有在更新。
l ansj_seg:最新版本在 https://github.com/NLPchina/ansj_seg tags僅有1.1版本,從2012年到2014年更新了大小6次,但是作者本人在2014年10月10日說明:“可能我以後沒有精力來維護ansj_seg了”,現在由”nlp_china”管理。2014年11月有更新。並未說明是否支持Lucene,是一個由CRF(條件隨機場)算法所做的分詞算法。
l imdict-chinese-analyzer:最新版在 https://code.google.com/p/imdict-chinese-analyzer/ , 最新更新也在2009年5月,下載源碼,不支持Lucene 4.10 。是利用HMM(隱馬爾科夫鏈)算法。
l Jcseg:最新版本在git.oschina.net/lionsoul/jcseg,支持Lucene 4.10,作者有較高的活躍度。利用mmseg算法。
1.4 使用中文分詞器IKAnalyzer
IKAnalyzer繼承Lucene的Analyzer抽象類,使用IKAnalyzer和Lucene自帶的分析器方法一樣,將Analyzer測試代碼改爲IKAnalyzer測試中文分詞效果。
如果使用中文分詞器ik-analyzer,就在索引和搜索程序中使用一致的分詞器ik-analyzer。
1.4.1 添加jar包
1.4.2 修改分詞器代碼
// 創建中文分詞器 Analyzer analyzer = new IKAnalyzer(); |
1.5 擴展中文詞庫
從ikanalyzer包中拷貝配置文件到classpath下。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 擴展配置</comment>
<!-- 用戶可以在這裏配置自己的擴展字典 -->
<entry key="ext_dict">dicdata/mydict.dic</entry>
<!-- 用戶可以在這裏配置自己的擴展停用詞字典 -->
<entry key="ext_stopwords">dicdata/ext_stopword.dic</entry>
</properties>
如果想配置擴展詞和停用詞,就創建擴展詞的文件和停用詞的文件,文件的編碼要是utf-8。
注意:不要用記事本保存擴展詞文件和停用詞文件,那樣的話,格式中是含有bom的。
添加擴展詞文件:ext.dic,內容如下:
1.6 使用luke測試中文分詞
使用Luke測試第三方分詞器分詞效果,需通過java.ext.dirs加載jar包:
可簡單的將第三方分詞器和lukeall放在一塊兒,cmd下運行:
java -Djava.ext.dirs=. -jar lukeall-4.10.3.jar