中文分詞器

1.1 什麼是中文分詞器

學過英文的都知道,英文是以單詞爲單位的,單詞與單詞之間以空格或者逗號句號隔開。而中文則以字爲單位,字又組成詞,字和詞再組成句子。所以對於英文,我們可以簡單以空格判斷某個字符串是否爲一個單詞,比如I love Chinalove China很容易被程序區分開來;但中文“我愛中國”就不一樣了,電腦不知道“中國”是一個詞語還是“愛中”是一個詞語。把中文的句子切分成有意義的詞,就是中文分詞,也稱切詞。我愛中國,分詞的結果是:我 中國。

1.2 Lucene自帶的中文分詞器

StandardAnalyzer

單字分詞:就是按照中文一個字一個字地進行分詞。如:“我愛中國”
效果:愛”

CJKAnalyzer

二分法分詞:按兩個字進行切分。如:中國人,效果:是”中國“國人”

 上邊兩個分詞器無法滿足需求。

1.3 第三方中文分詞器

paoding: 庖丁解牛最新版在 https://code.google.com/p/paoding/ 中最多支持Lucene 3.0,且最新提交的代碼在 2008-06-03,在svn中最新也是2010年提交,已經過時,不予考慮。

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已經推出了4個大版本。最初,它是以開源項目Luence爲應用主體的,結合詞典分詞和文法分析算法的中文分詞組件。從3.0版本開 始,IK發展爲面向Java的公用分詞組件,獨立於Lucene項目,同時提供了對Lucene的默認優化實現。在2012版本中,IK實現了簡單的分詞 歧義排除算法,標誌着IK分詞器從單純的詞典分詞向模擬語義分詞衍化。 但是也就是2012年12月後沒有在更新

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(條件隨機場)算法所做的分詞算法。

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算法。

1.4 使用中文分詞器IKAnalyzer

IKAnalyzer繼承LuceneAnalyzer抽象類,使用IKAnalyzerLucene自帶的分析器方法一樣,將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

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章