中文分詞器:jcseg
jcseg是使用Java開發的一個中文分詞器,使用流行的mmseg算法實現。
1。目前最高版本:jcseg 1.6.9。
2。mmseg四種過濾算法,分詞準確率達到了97%以上。
3。支持自定義詞庫。在lexicon文件夾下,可以隨便添加/刪除/更改詞庫和詞庫內容,并且對詞庫進行了分類。如何給jcseg添加詞庫/新詞
4。中文數字識別,例如:"四五十個人都來了,管他叁柒貳拾壹。"中的"四五十"和"叁柒貳拾壹"。(1.6.7版開始支持)
5。支持中英混合詞的識別。例如:B超。
6。支持基本單字單位的識別,例如2012年。
7。智能圓角半角處理。
8。特殊字母識別:例如:Ⅰ,Ⅱ
9。特殊數字識別:例如:①,⑩
10。配對標點內容提取:例如:最好的Java書《java編程思想》,‘暢想杯黑客技術大賽’,被《,‘,“,『標點標記的內容。(1.6.8版開始支持)
11。智能中文人名識別。中文人名識別正確率達90%以上。(可以維護lex-lname.lex,lex-dname-1.lex,lex-dname-2.lex來去除歧義,提高準確率)。
jcseg目錄結構:
src ----- jcseg源代碼
classes ----- jcseg class文件
doc ----- jcseg開發文檔
lib ------ lucene核心jar文件
build.xml ----- jcseg ant編譯腳本文件
lexicon ----- jcseg詞庫文件 (可以在jcesg.properties中更改)
jcseg.design ----- jcseg設計文件
jcseg-core-{version} ----- jcseg jar文件
jcseg-kernel.jar ----- jcseg內核-jcseg是基于這個內核實現了,你可以基于這個內核寫自己的實現。
jcseg-{version}-javadoc.jar ------ jcseg文檔jar文件
jcseg.properties ----- jcseg配置文件
配置文件::參數說明
jcseg.icnname=1 #-開啟中文人名識別 lexicon.prefix=lex #-詞庫文件前綴 jcseg.cnmaxlnadron=1 #-姓氏修飾詞長度,例如:老陳 中的“陳” lexicon.suffix=lex #-詞庫文件后綴 jcseg.mixcnlen=2 #-中英混合詞最大中文詞數,例如:A計劃 A后面有兩個字“計劃” jcseg.nsthreshold=1000000 #-姓名成詞歧義闋值 lexicon.dir=lexicon #-詞庫目錄,和以下的path加起來為jcseg詞庫絕對路徑 lexicon.path=jar.dir #-詞庫存放路徑(jar.dir為默認路徑) jcseg.maxlen=5 #-正向最大化匹配數目(建議位于4-7之間) jcseg.pptmaxlen=15 #最大的配對標點內容長度。
word.type ----- jcseg word類別,每一個辭典文件都必須指定類別。請查看具體的詞庫文件。
二。分詞速度:
測試環境:2.8GHZ/2G/Ubuntu
Simple 模式: 1366058字/秒 3774.5KB/秒
Complex 模式: 479338字/秒 1324.4KB/秒
分詞正確率97%以上,請參考本算法的原作:http://technology.chtsai.org/mmseg/
測試文章,“世界與和平” 簡易模式830msec,復雜模式2461msec。
三。分詞結果演示:
文本一:
普通:研究生命起源,混合詞: 做B超檢查身體,本質是X射線,單位和全角: 2009年8月6日開始大學之旅,中文數字: 張三和李四都同意每個人交四十七塊錢班費的建議,那是一九九八年前的事了,四川麻辣燙很好吃。人名識別: 我是陳鑫,也是jcesg的作者,三國時期的諸葛亮是個天才,我們一起給劉翔加油,羅志高興奮極了因為老吳送了他一臺筆記本。配對標點: 本次“暢想杯黑客技術大賽”的得主為‘電信09-2BF’的張三,獎勵《C程序設計語言》一書和『暢想網絡JAVA教程』一套。特殊字母: 【Ⅰ】(Ⅱ),英文: let's make miracle,特殊數字: ① ⑩ ⑽ ㈩.
jcseg分詞結果:(標點符號可以濾掉,我這里都顯示了)
普通|:|研究|生命|起源|混合|詞|:|做|B超|檢查|身體|本質|是|X射線|單位|和|全角|:|2009年|8月|6日|開始|大學|之旅|中文|數字|:|張三|和|李四|都|同意|每個人|交|四十七|塊錢|班費|的|建議|那是|一九九八|年前|的|事|了|四川|麻辣燙|很|好吃|人名|識別|:|我|是|陳鑫|也|是|jcesg|的|作者|三國|時期|的|諸葛亮|是|個|天才|我們|一起|給|劉翔|加油|羅志高|興奮|極了| 因為|老吳|送|了|他|一臺|筆記本|配對|標點|:|本次|暢想杯黑客技術大賽|的|得主|為|電信09-2BF|的|張三|獎勵|C程序設計語言| 一書|和|暢想網絡JAVA教程|一套|特殊|字母|:|Ⅰ|Ⅱ|英文|:|let's|make|miracle|特殊|數字|:|①⑩|⑽|㈩|.
文本二:
陳書高自從擔任班長以來,一直兢兢業業
jcseg切分結果:
陳書高|自從|擔任|班長|以來|,|一直|兢兢業業
jcseg分詞歧義:
例如: 一次性交一百元 結果: 一次|性交|一|百元 (該問題如果有必要,可以更改lex-chars.lex的單字語素自由度來達到正確的切分結果)
正確的結果應該為:一次性 交 一百元
例如: 長春市長春藥店 結果: 長春市|長春|藥店 (這個結果很準確)
淡疼的結果:長春|市長|春藥|店。
四。使用方法:
請參考jcseg源碼里面的Demo程序。 源碼在Downloads中下載。
demo測試程序運行:
運行java -jar jcseg-core-{version}.jar即可。
lucene分詞用法: //導入jcseg-core-{version}.jar
//import com.webssky.jcseg.core.Config類
/*
1.Config.COMPLEX_MODE為復雜模式:
特點:四種過濾算法,中英混合詞識別,中文姓名,姓氏昵稱識別,
數字單位識別,特殊數字和字母識別。
*/
/*
2.Config.SIMPLE_MODE為簡易模式
特點:只使用了最大化過濾算法,其他的同復雜模式。
*/
Analyzer analyzer = new JcsegAnalyzer(Config.COMPLEX_MODE);
詳細了解地址:jcseg google code
下載地址:下載jcseg