導讀:隨著自然語言處理(Natural Language Processing, NLP)技術日趨成熟,實現中文分詞的工具也越來越多。中文分詞技術作為中文自然語言處理的第一項核心技術,是眾多上層任務的首要基礎工作,同時在日常的工作中起著基礎性的作用。本文將講解如何在Python環境下調用HanLP包進行分詞,並結合Python語言簡約的特性,實現一行代碼完成中文分詞。
分詞規範可以理解為國人並沒有統一對漢語詞的認識,對漢語詞的認識的操作尺度很難把握,極易受到主觀因素的影響,從而無法提供一個公認的、具有權威性的詞表(例如普通說話人的語感與語言學家的標準就有較大的差異)。
歧義切分可以舉例如下:"南京市長江大橋"的分詞有兩種切分,"南京市\長江大橋" 和 "南京\市長\江大橋"。這種情況在漢語文本中非常普遍,並且處理這類問題往往也要複雜得多。
未登錄詞的識別(生詞)可以有兩種解釋:一是指已有詞典中沒有收錄的詞;二是指已有的訓練語料中未曾出現過的詞。所以從某種意義上來說,生詞對分詞的影響是最容易處理的。
HanLP的API總體來說並不多,且需要進行的配置並不複雜,適合新手上手。下載完成後,可以使用如下命令進行安裝。要求Python 3.6以上,支持Windows,可以在CPU上運行,推薦GPU/TPU。 註:若未安裝Java則會報如下錯誤。因為HanLP 主項目採用 Java 開發,所以需要 Java 運行環境,請安裝 JDK。jpype.jvmfinder.JVMNotFoundException: No JVM shared library file (jvm.dll) found. Try setting up the JAVAHOME environment variable properly. 項目Github地址:https://github.com/hankcs/pyhanlp 首先,我們通過一個官網的實例直觀認識下HanLP的分詞結果。import pyhanlptext = '鐵甲網是中國最大的工程機械交易平臺'words = []for term in pyhanlp.HanLP.segment(text): words.append(term.word)print(words) #輸出分詞結果['鐵甲', '網', '是', '中國', '最大', '的', '工程', '機械', '交易', '平臺']
接著,我們通過自定義增加不同領域內的專有名詞的詞典,從而進一步優化HanLP的分詞結果。CustomDictionary.add("鐵甲網") CustomDictionary.insert("工程機械", "nz 1024") CustomDictionary.add("交易平臺", "nz 1024 n 1") print(HanLP.segment(txt))['鐵甲網', '是', '中國', '最大', '的', '工程機械', '交易平臺']
最後,我們可以利用Python語言的簡約性將代碼優化成如下一行。 正則表達式 re.fullmatch(r'[\u4e00-\u9fa5]+',i) 的作用是僅保留漢字,過濾掉非漢字之外的字符。words = [i for i in [i.word for i in pyhanlp.HanLP.segment(text)] if re.fullmatch(r'[\u4e00-\u9fa5]+',i)]當然了,HanLP作為開源框架,並不是只有分詞這一個功能,還提供了很多在分詞之上的算法,如關鍵詞提取、自動摘要、依存句法分析、情感分析等,這裡不再贅述。
哎呀媽呀!