Python 中的那些中文分詞器

0 寫在最前面

分詞器根據其實現方法、訓練語料庫以及可能存在的字典表現出不同特性,包括但不限於對文本來源領域 / 場景具備不同的準確率(或者 F1 值)、新詞發現能力、多義詞區別能力以及人名地名識別能力等。一般而言,很難在未明確場景的情況下,找到一個通用指標來評價某分詞器的好壞,同時還能說服彼此。本文無論是技術上,還是情感上,既不公正也不客觀,僅從幾個 case 出發,介紹一些在 Python 下可以直接使用,且不要錢的分詞庫

1 測試用例

  • 在意義之塔上,生存高於一切,面對生存,任何低熵體都只能兩害相權取其輕
  • 歐福城主塞德洛斯,教皇馬格奴斯全部死於他們的陰謀,然後在光輝城堡之中,他們用笛雅谷的黑暗漆黑之星的劍柄召喚出了傳說中的死靈之王
  • 柳奶奶和牛奶奶潑牛奶嚇壞了劉奶奶,大罵再也不買柳奶奶和牛奶奶的牛奶
  • 科技處女科長每月經過下屬科室都要親口交代32口交換機等技術性器件的安裝工作

第 1 句源自 『三體 3』中的歌者。其中一個 『低熵體』是個不常見詞,一個『兩害相權取其輕』俗語

第 2 句出自『歷史的塵埃』,裡面有生造的外文名和地名

第 3 句是一個繞口令,一般而言,『牛奶』兩字會對分詞器造成干擾

第 4 句是來源不可考,據說是最先出自這裡 Fooying:有哪些比較好的中文分詞方案?,污力十足,比 『我們中出了一個叛徒』更勝一籌。這裡稍微改下,因為年代久遠,有些分詞器針對原文加了字典

2 目標分詞器

重複說下,以下無任何對比意義,也無任何技術指標。分詞介面使用最簡單介面,參數默認。鏈接中都有安裝說明,很簡單,就是有的可能比較大

2.1 LTP - 哈爾濱工業大學

以前做過一個人名抽取項目最後選用的是哈工大的 LTP,分詞和詞性標註的可用性非常高(純主觀意向)

  • 在/意義/之/塔/上/,/生存/高於/一切/,/面對/生存/,/任何/低/熵體/都/只能/兩/害/相權/取/其/輕
  • 歐福城/主塞德洛斯/,/教皇/馬格奴斯/全部/死/於/他們/的/陰謀/,/然後/在/光輝/城堡/之中/,/他們/用/笛雅谷/的/黑暗/漆黑/之/星/的/劍柄/召喚/出/了/傳說/中/的/死靈/之/王
  • 柳/奶奶/和/牛奶奶/潑/牛奶/嚇/壞/了/劉奶奶/,/大/罵/再/也/不/買/柳/奶奶/和/牛奶奶/的/牛奶
  • 科技/處女/科長/每月/經過/下屬/科室/都/要/親口/交代/32/口/交換機/等/技術性/器件/的/安裝/工作

2.2 結巴 / jieba

結巴大概是知名度最廣的一個分詞庫,介面簡單且輕量

  • 在/意義/之塔上/,/生存/高於一切/,/面對/生存/,/任何/低/熵/體/都/只能/兩害相權/取其輕
  • 歐福城/主塞/德洛斯/,/教皇/馬格/奴斯/全部/死/於/他們/的/陰謀/,/然後/在/光輝/城堡/之中/,/他們/用笛雅谷/的/黑暗/漆黑/之星/的/劍柄/召喚/出/了/傳說/中/的/死靈/之王
  • 柳/奶奶/和/牛/奶奶/潑/牛奶/嚇壞/了/劉/奶奶/,/大罵/再也/不買/柳/奶奶/和/牛/奶奶/的/牛奶
  • 科技/處女/科長/每月/經過/下屬/科室/都/要/親口/交代/32/口/交換機/等/技術性/器件/的/安裝/工作

2.3 THULAC - 清華大學

這第 2 句分的有點好,其實 LTP 分的也好(那種分法,不聯繫上下文也說的過去)

  • 在/意義/之/塔/上/,/生存/高於/一切/,/面對/生存/,/任何/低熵體/都/只能/兩/害/相權/取/其/輕
  • 歐福/城主/塞德洛斯/,/教皇/馬格奴斯/全部/死/於/他們/的/陰謀/,/然後/在/光輝/城堡/之中/,/他們/用/笛雅/谷/的/黑暗/漆黑/之/星/的/劍柄/召喚/出/了/傳說/中/的/死靈/之/王
  • 柳/奶奶/和/牛奶/奶/潑/牛奶/嚇壞/了/劉/奶奶/,/大/罵/再/也/不/買/柳/奶奶/和/牛奶奶/的/牛奶
  • 科技/處女/科長/每月/經過/下屬/科室/都/要/親口/交代/32/口/交換機/等/技術性/器件/的/安裝/工作

2.4 HanLP

HanLP 原來只有 Java 版本,也是 Java 中為數不多的分詞器,以前用 solr 就是選用 HanLP 來做分詞

  • 在/意義/之/塔上/,/生存/高於一切/,/面對/生存/,/任何/低/熵/體/都/只能/兩害相權/取/其/輕
  • 歐福/城主/塞德洛斯/,/教皇/馬格/奴斯/全部/死於/他們/的/陰謀/,/然後/在/光輝/城堡/之中/,/他們/用/笛雅/谷/的/黑暗/漆黑/之/星/的/劍柄/召喚/出/了/傳說中/的/死靈/之/王
  • 柳/奶奶/和/牛奶/奶/潑/牛奶/嚇壞/了/劉/奶奶/,/大罵/再也/不/買/柳/奶奶/和/牛/奶奶/的/牛奶
  • 科技處/女/科長/每月/經過/下屬/科室/都/要/親口/交代/32/口/交換機/等/技術性/器件/的/安裝/工作

2.5 NLPIR - 中國科學院

貌似好久沒更新了

  • 在/意義/之/塔/上/,/生存/高於/一切/,/面對/生存/,/任何/低/熵/體/都/只能/兩/害/相/權/取/其/輕
  • 歐/福/城/主/塞德洛斯/,/教皇/馬格奴斯/全部/死/於/他們/的/陰謀/,/然後/在/光輝/城堡/之中/,/他們/用/笛/雅/谷/的/黑暗/漆黑/之/星/的/劍/柄/召喚/出/了/傳說/中/的/死/靈/之/王
  • 柳/奶奶/和/牛/奶奶/潑/牛奶/嚇壞/了/劉/奶奶/,/大/罵/再也/不/買/柳/奶奶/和/牛/奶奶/的/牛奶
  • 科技/處女/科長/每月/經過/下屬/科室/都/要/親口/交代/32/口/交換機/等/技術性/器件/的/安裝/工作

2.6 百度雲-自然語言處理服務

百度的自然語言處理是通過 HTTP 提供的,不過網路交互已經有一個包封裝好了,可以免費使用(參考鏈接)

  • 在/意義/之/塔/上/,/生存/高於/一切/,/面對/生存/,/任何/低熵體/都/只能/兩/害/相權/取/其/輕
  • 歐福/城主/塞德洛斯/,/教/皇馬/格奴斯/全部/死於/他們/的/陰謀/,/然後/在/光輝/城堡/之中/,/他們/用/笛雅谷/的/黑暗/漆黑/之/星/的/劍柄/召喚/出/了/傳說/中/的/死靈/之/王
  • 柳奶奶/和/牛奶/奶/潑/牛奶/嚇壞/了/劉奶奶/,/大罵/再/也/不買/柳奶奶/和/牛奶/奶/的/牛奶
  • 科技/處女/科長/每月/經過/下屬/科室/都/要/親口/交代/32口/交換機/等/技術性/器件/的/安裝/工作

3 結語

第 4 句貌似只有 HanLP 分的較好,不過還好都沒有分出最污的那種情況。為什麼會寫這篇文章,因為後續有文章可能會用到分詞,就不用再介紹了。這些庫的安裝和使用都非常簡單,調用也就幾行代碼,有興趣的可以考慮從先學習如何使用開始 *^*

歡迎關注我的專欄

面向工資編程 —— 收錄 Java 語言的面試向文章?

zhuanlan.zhihu.com圖標編程的基礎和一些理論?

zhuanlan.zhihu.com圖標編程的日常娛樂 —— 用 Python 幹些有趣的事?

zhuanlan.zhihu.com圖標
推薦閱讀:

百家爭鳴,誰是王者?
LCUI 1.0 Beta 發布
一起寫一個解釋器(1)---一些廢話
買西瓜的高級玩法,用好你的智能手機

TAG:分詞 | Python | 編程 |