[點晴永久免費OA]KTDictSeg一個C#.net做的簡單快速準確的開源中文分詞組件
當前位置:點晴教程→點晴OA辦公管理信息系統
→『 經驗分享&問題答疑 』
作者:肖波 個人博客:http://blog.csdn.net/eaglet 2007/5 南京
這段時間通過研究目前在互聯網上可以搜索到的中文分詞算法,感覺很難找到既快又準的分詞方法,通過幾天時間的研究,我終于找到了一種快速且較準確的中文分詞方法。現在回過頭來想想,覺得其實問題并不很復雜,對于一般應用,我覺得這個算法應該基本夠用了,當然目前沒有一種方法可以達到100%的分詞準確度,這個算法也是一樣。對于實際應用往往需要在效率和準確度上做個折中,當然對技術的追求是無止境的,我也將繼續努力,爭取在后續版本中進一步提高準確度,并維持現有效率。
基本技術指標分詞準確度:90%以上(只是自己統計了一下,有待專家的權威評測) 處理速度: 600KBytes/s (P4
和互聯網上幾個比較流行的中文分詞方法的比較和SharpICTCLAS的比較提到中文分詞,就不能不提到計算所開發的ICTCLAS 中文分詞系統,這個系統采用一些語義分析的方法以提高分詞的準確度。看了它的算法,感覺確實有很多值得學習的地方,只是算法相對復雜,維護時除了要維護詞表還要維護詞的關系,當然復雜也有復雜的好處,對于如下句子:“請把手抬高一點兒”,比較互聯網上我所找到的幾個算法(包括我的算法),只有ICTCLAS可以正確分詞。 分詞速度: ICTCLAS 的分詞速度為31.5Kbytes/s 由于沒有實際去測,只能引用其代碼中寫的數據。這個速度比我的算法慢將近20倍。 我用了河北理工大學經管學院 準確度: 用SharpICTCLAS V1.0 版本對一些有歧異的句子進行分詞,發現有的句子我的算法可以較好的處理,但SharpICTCLAS不能得到正確的結果。如“長春市長春節致詞”我的算法分析為:長春/市長/春節/致詞, SharpICTCLAS分析為:長春市/長/春節/致詞/,這個錯誤可能并不是SharpICTCLAS的算法缺陷,可能只是V1.0版本提供的訓練集不充分造成的,是不是算法目前我還沒有仔細研究。 SharpICTCLAS 對于一些需要根據語義來分析的語句如上面提到的“請把手抬高一點兒”分析效果很好,可以把“把手”分解為把/手 而我的算法則分解為 把手。 未登錄詞識別能力: 感覺SharpICTCLAS對于未登錄詞的識別能力并不象代碼注釋中寫的那么高,比如下面句子: “新浪體育訊 英超賽季結束后,曼城隊一直處在各種動蕩之中”,SharpICTCLAS分詞的結果是 “新/浪/體育/訊/英/超/賽季/結束/后/,/曼/城/隊/一直/處在/各種/動蕩/之中/ ” 我的算法分詞結果是 “新浪/體育/訊/英超/賽季/結束/后/,/曼城隊/一直/處在/各種/動蕩/之中/”
總結: SharpICTCLAS V1.0 和我的算法比較,效率明顯偏低,每秒6000字節的效率是很難滿足搜索引擎等大數量應用要求的,但對于有些短文本的分詞,效率并不是一個重點需要考慮的問題。 分詞準確度方面:基于目前SharpICTCLAS提供的訓練集比較,我認為各有千秋,在網上找了幾篇文章,整篇文章分詞進行比較,感覺我的算法總體上比SharpICTCLAS好像還要準確一些。
和雨痕中英文分詞組件的比較雨痕中英文分詞組件 (http://www.rainsts.net) 的專業版不是免費的,所以只使用了其免費的演示版本進行了比較。
分詞速度: 雨痕的分詞速度大概在每秒4000字節左右,這個和SharpICTCLAS差不多,比我的算法慢100倍左右。
準確度: 雨痕的分詞準確度還是比較高的,但和我的算法一樣存在算法的先天缺陷,對于必須通過語義才能判斷的句子,無法準確分詞。對于其他類型的有歧異的句子,分詞能力還是不錯的,我只發現類似下面的句子“于北京時間 分詞結果是“于北京/ 時間/
未登錄詞識別能力: 還是對比如下面句子分詞: “新浪體育訊 英超賽季結束后,曼城隊一直處在各種動蕩之中”,雨痕分詞的結果是 “新浪/ 體育/ 訊/ / 英超/ 賽季/ 結束/ 后/ ,/ 曼/ 城/ 隊/ 一直/ 處在/ 各種/ 動蕩/ 之中”,這個結果比SharpICTCLAS還是要準確一些,但“曼城隊”被分成了三個詞,這方面我的算法要稍微好一些。
總結: 雨痕中英文分詞組件的效率較低,很難滿足搜索引擎等大數量應用要求的。準確度方面還是比較高的,和我的算法的準確度相比基本差不多。
和 ShootSearch 分詞組件的比較ShootSearch (http://www.shootsoft.net)分詞組件是一個開源的分詞組件,其分詞效率很高,和我的算法速度不相上下,但ShootSearch只采用了簡單的最大匹配算法,分詞準確度很低,前面舉的幾個例子都不能很好的分詞,由于準確度太低,這里就不重點分析了。
KTDictSeg 分詞算法介紹
我把組件名名為KTDictSeg,它是由KaiToo搜索開發的一款基于字典的簡單中英文分詞組件。 分詞算法 談到分詞算法,目前有很多。比較常用的是正向最大匹配和反向最大匹配算法。但這兩種算法對于一些存在多元歧異的句子缺乏較好的支持。以“長春市長春節致詞”和“長春市長春藥店”這個兩個句子為例: “長春市長春節致詞”可以依次拆分為 長春、長春市、市長、長春、春節、致詞 這幾個詞,按照正向最大匹配算法,分詞結果是長春市/長/春節/致詞,按照反向最大匹配算法,分詞結果是長春/市長/春節/致詞。 “長春市長春藥店”可以依次拆分為長春、長春市、市長、長春、春藥、春藥店、藥店 這幾個詞,按照正向最大匹配算法,分詞結果是 長春市/長春/藥店,按照反向最大匹配算法,分詞結果是“長春/市長/春藥店”。 可見無論是正向還是反向最大匹配,都存在產生歧異的情況。 KTDictSeg 的算法在正向匹配算法的基礎上做了一些改進,用一句話描述就是找到句子中第一個未被匹配的字數最少的單詞組合,如果多個組合未被匹配的字數都是最少則找到其中匹配的單詞個數最少的組合。匹配順序是從左至右。還是以上面兩個句子為例: “長春市長春節致詞” 按正向最大匹配掃描順序可以出現如下匹配的單詞組合: 1) 長春/市長/春節/致詞 匹配單詞數4,未匹配字數0 2) 長春市/長春/致詞 匹配單詞數3,未匹配字數0 不難看出,第一中組合未匹配的字數最少,所以取組合1。
“長春市長春藥店”按正向最大匹配掃描順序可以出現如下匹配的單詞組合:
1) 長春市/長春/藥店 匹配單詞數3,未匹配字數0 2) 長春市/春藥店 匹配單詞數2,未匹配字數1 3) 長春市/春藥 匹配單詞數2,未匹配字數2 4) 長春市/藥店 匹配單詞數2,未匹配字數2 5) 長春/市長/春藥店 匹配單詞數3,未匹配字數0 6) 長春/市長/春藥 匹配單詞數3,未匹配字數1 7) 長春/市長/藥店 匹配單詞數3,未匹配字數1 8) 長春/市長/藥店 匹配單詞數3,未匹配字數1 9) 長春/長春/藥店 匹配單詞數3,未匹配字數1
可見組合1和組合5 未匹配數最小,匹配單詞數相等,但組合1匹配順序靠前,所以取組合1。 未登錄詞識別 KTDictSeg 對未登錄詞的識別采用一個簡單判定,即把未在字典中找到的連續的字組成一個詞,這種判斷是基于分詞算法比較準確且詞庫中的詞足夠多的假設下做出的,由于KTDictSeg的分詞算法相對比較準確且附帶的詞庫收錄了20多萬條詞,所以KTDictSeg對未登錄詞的識別也相對比較準確。
優點 KTDictSeg 的 優點是分詞速度非常快,且分詞準確度相對簡單的最大匹配算法有很大提高,所以可以應用于一些對分詞準確度要求不是非常苛刻,但對分詞效率要求較高的應用環境中,比如大多數的中小型中文搜索引擎都可以使用這個分詞組件。 KTDictSeg 還有一個優點就是簡單,用戶只需維護一個漢語詞庫就可以達到比較準確的分詞效果,減少了用戶維護的工作量和對系統的開銷。
缺點 KTDictSeg 的致命缺點是無法對語義進行判斷,對于一些語義相關的句子不能夠做到100%識別出來,而且無論怎樣調整詞庫,理論上都無法達到100%匹配。 開源代碼KTDictSeg 下載位置 最新動態KTDictSeg 分詞組件1.3版本 新增功能列表及下載位置 該文章在 2020/3/7 15:28:35 編輯過 |
關鍵字查詢
相關文章
正在查詢... |