NLP快速入门:手把手教你用HanLP做中文分词
導(dǎo)讀:隨著自然語言處理(Natural Language Processing, NLP)技術(shù)日趨成熟,實現(xiàn)中文分詞的工具也越來越多。中文分詞技術(shù)作為中文自然語言處理的第一項核心技術(shù),是眾多上層任務(wù)的首要基礎(chǔ)工作,同時在日常的工作中起著基礎(chǔ)性的作用。本文將講解如何在Python環(huán)境下調(diào)用HanLP包進(jìn)行分詞,并結(jié)合Python語言簡約的特性,實現(xiàn)一行代碼完成中文分詞。
常用中文分詞工具
| 工具名稱 | 是否開源 | 工具描述 |
| Jieba (結(jié)巴分詞) | 免費使用 | jieba庫是一款優(yōu)秀的支持 Python 第三方中文分詞庫,jieba支持三種分詞模式:精確模式、全模式和搜索引擎模式。 |
| SnowNLP (中文的類庫) | 免費使用 | SnowNLP是一個python寫的類庫,可以方便的處理中文文本內(nèi)容,是受到了TextBlob的啟發(fā)而寫的,誕生了一個方便處理中文的類庫。 |
| FoolNLTK (中文處理工具包) | 免費使用 | FoolNLTK是基于Bi-LSTM模型訓(xùn)練成的中文分詞工具,僅適用于Linux系統(tǒng)。 |
| Jiagu (甲骨工具包) | 免費使用 | Jiagu以BiLSTM等模型為基礎(chǔ),使用大規(guī)模語料訓(xùn)練而成。集成多種NLP基礎(chǔ)處理功能并支持知識圖譜開放信息抽取。 |
| HanLP (漢語言處理包) | 免費使用 | HanLP是一系列模型與算法組成的NLP工具包,由大快搜索主導(dǎo)并完全開源,目標(biāo)是普及自然語言處理在生產(chǎn)環(huán)境中的應(yīng)用。HanLP具備功能完善、性能高效、架構(gòu)清晰、語料時新、可自定義的特點。 |
| pyltp (哈工大語言云) | 付費使用 | pyltp 是哈工大自然語言工作組推出的一款基于Python 封裝的自然語言處理工具,提供了分詞,詞性標(biāo)注,命名實體識別,依存句法分析,語義角色標(biāo)注的功能。 |
THULAC(清華中文詞法分析) | 付費使用 | THULAC(THU Lexical Analyzer for Chinese)是由清華大學(xué)自然語言處理與社會人文計算實驗室研制推出的一套中文詞法分析工具包,具有中文分詞和詞性標(biāo)注功能。 |
NLPIR(漢語分詞系統(tǒng)) | 付費使用 | NLPIR大數(shù)據(jù)語義智能分析平臺由北京理工大學(xué)大數(shù)據(jù)搜索與挖掘?qū)嶒炇已邪l(fā)的“自然語言處理與信息檢索共享平臺。 |
01 什么是中文分詞?
? ? ? 眾所周知,英文是以詞為單位的,詞和詞之間是靠空格隔開。而在漢語中,詞以字為基本單位,但是一篇文章的語義表達(dá)卻仍然是以詞來劃分。例如,英文句子"I am a student",用中文則為:"我是一個學(xué)生"。計算機(jī)可以很簡單通過空格知道"student"是一個單詞,但是不能很容易明白"學(xué)"、"生"兩個字合起來才表示一個詞。把中文的漢字序列切分成有意義的詞,就是中文分詞,有些人也稱為切詞。"我是一個學(xué)生",分詞的結(jié)果是:"我 是 一個 學(xué)生"。因此,需要針對中文漢字,將其按照一定的方式進(jìn)行組織,分成不同的詞。
? ? ? ?
? ? ? ?中文分詞是讓計算機(jī)自動識別出句子中的詞,然后在詞間加入邊界標(biāo)記符。這個過程的主要困難在于分詞規(guī)范、歧義切分和未登陸詞的識別。
? ? ? ?
? ? ??分詞規(guī)范可以理解為國人并沒有統(tǒng)一對漢語詞的認(rèn)識,對漢語詞的認(rèn)識的操作尺度很難把握,極易受到主觀因素的影響,從而無法提供一個公認(rèn)的、具有權(quán)威性的詞表(例如普通說話人的語感與語言學(xué)家的標(biāo)準(zhǔn)就有較大的差異)。
? ? ? ?歧義切分可以舉例如下:"南京市長江大橋"的分詞有兩種切分,"南京市\(zhòng)長江大橋" 和?"南京\市長\江大橋"。這種情況在漢語文本中非常普遍,并且處理這類問題往往也要復(fù)雜得多。
? ? ???未登錄詞的識別(生詞)可以有兩種解釋:一是指已有詞典中沒有收錄的詞;二是指已有的訓(xùn)練語料中未曾出現(xiàn)過的詞。所以從某種意義上來說,生詞對分詞的影響是最容易處理的。
02 HanLP分詞
1.?安裝HanLP
? ? ? ?HanLP的API總體來說并不多,且需要進(jìn)行的配置并不復(fù)雜,適合新手上手。下載完成后,可以使用如下命令進(jìn)行安裝。要求Python 3.6以上,支持Windows,可以在CPU上運行,推薦GPU/TPU。
pip?install?pyhanlp???????注:若未安裝Java則會報如下錯誤。因為HanLP 主項目采用 Java 開發(fā),所以需要 Java 運行環(huán)境,請安裝 JDK。
???????項目Github地址:https://github.com/hankcs/pyhanlp
2. 分詞實戰(zhàn)
2.1 簡單實例?
???????首先,我們通過一個官網(wǎng)的實例直觀認(rèn)識下HanLP的分詞結(jié)果。
import pyhanlp text = '鐵甲網(wǎng)是中國最大的工程機(jī)械交易平臺' words = [] for?term?in?pyhanlp.HanLP.segment(text):words.append(term.word) print(words)??#輸出分詞結(jié)果???????分詞結(jié)果如下所示。
['鐵甲', '網(wǎng)', '是', '中國', '最大', '的', '工程', '機(jī)械', '交易', '平臺']2.2 自定義詞典分詞
???????接著,我們通過自定義增加不同領(lǐng)域內(nèi)的專有名詞的詞典,從而進(jìn)一步優(yōu)化HanLP的分詞結(jié)果。
???????分詞結(jié)果如下所示。
['鐵甲網(wǎng)', '是', '中國', '最大', '的', '工程機(jī)械', '交易平臺']2.3 優(yōu)化分詞代碼
? ?? ? 最后,我們可以利用Python語言的簡約性將代碼優(yōu)化成如下一行。
? ? ? ?其中,text?存放的是待分詞的文本;
? ? ? ? ?正則表達(dá)式 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)]???????當(dāng)然了,HanLP作為開源框架,并不是只有分詞這一個功能,還提供了很多在分詞之上的算法,如關(guān)鍵詞提取、自動摘要、依存句法分析、情感分析等,這里不再贅述。
總結(jié)
以上是生活随笔為你收集整理的NLP快速入门:手把手教你用HanLP做中文分词的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在 ASP.Net Core 中使用
- 下一篇: 我为什么对TypeScript由黑转粉?