溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Python3爬蟲(chóng)中如何實(shí)現(xiàn)中文分詞

發(fā)布時(shí)間:2020-07-30 09:02:21 來(lái)源:億速云 閱讀:510 作者:小豬 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要為大家展示了Python3爬蟲(chóng)中如何實(shí)現(xiàn)中文分詞,內(nèi)容簡(jiǎn)而易懂,希望大家可以學(xué)習(xí)一下,學(xué)習(xí)完之后肯定會(huì)有收獲的,下面讓小編帶大家一起來(lái)看看吧。

原理

中文分詞,即 Chinese Word Segmentation,即將一個(gè)漢字序列進(jìn)行切分,得到一個(gè)個(gè)單獨(dú)的詞。表面上看,分詞其實(shí)就是那么回事,但分詞效果好不好對(duì)信息檢索、實(shí)驗(yàn)結(jié)果還是有很大影響的,同時(shí)分詞的背后其實(shí)是涉及各種各樣的算法的。

中文分詞與英文分詞有很大的不同,對(duì)英文而言,一個(gè)單詞就是一個(gè)詞,而漢語(yǔ)是以字為基本的書(shū)寫(xiě)單位,詞語(yǔ)之間沒(méi)有明顯的區(qū)分標(biāo)記,需要人為切分。根據(jù)其特點(diǎn),可以把分詞算法分為四大類(lèi):

·基于規(guī)則的分詞方法

·基于統(tǒng)計(jì)的分詞方法

·基于語(yǔ)義的分詞方法

·基于理解的分詞方法

下面我們對(duì)這幾種方法分別進(jìn)行總結(jié)。

基于規(guī)則的分詞方法

這種方法又叫作機(jī)械分詞方法、基于字典的分詞方法,它是按照一定的策略將待分析的漢字串與一個(gè)“充分大的”機(jī)器詞典中的詞條進(jìn)行匹配。若在詞典中找到某個(gè)字符串,則匹配成功。該方法有三個(gè)要素,即分詞詞典、文本掃描順序和匹配原則。文本的掃描順序有正向掃描、逆向掃描和雙向掃描。匹配原則主要有最大匹配、最小匹配、逐詞匹配和最佳匹配。

·最大匹配法(MM)?;舅枷胧牵杭僭O(shè)自動(dòng)分詞詞典中的最長(zhǎng)詞條所含漢字的個(gè)數(shù)為 i,則取被處理材料當(dāng)前字符串序列中的前 i 個(gè)字符作為匹配字段,查找分詞詞典,若詞典中有這樣一個(gè) i 字詞,則匹配成功,匹配字段作為一個(gè)詞被切分出來(lái);若詞典中找不到這樣的一個(gè) i 字詞,則匹配失敗,匹配字段去掉最后一個(gè)漢字,剩下的字符作為新的匹配字段,再進(jìn)行匹配,如此進(jìn)行下去,直到匹配成功為止。統(tǒng)計(jì)結(jié)果表明,該方法的錯(cuò)誤率 為 1/169。

·逆向最大匹配法(RMM)。該方法的分詞過(guò)程與 MM 法相同,不同的是從句子(或文章)末尾開(kāi)始處理,每次匹配不成功時(shí)去掉的是前面的一個(gè)漢字。統(tǒng)計(jì)結(jié)果表明,該方法的錯(cuò)誤率為 1/245。

·逐詞遍歷法。把詞典中的詞按照由長(zhǎng)到短遞減的順序逐字搜索整個(gè)待處理的材料,一直到把全部的詞切分出來(lái)為止。不論分詞詞典多大,被處理的材料多么小,都得把這個(gè)分詞詞典匹配一遍。

·設(shè)立切分標(biāo)志法。切分標(biāo)志有自然和非自然之分。自然切分標(biāo)志是指文章中出現(xiàn)的非文字符號(hào),如標(biāo)點(diǎn)符號(hào)等;非自然標(biāo)志是利用詞綴和不構(gòu)成詞的詞(包 括單音詞、復(fù)音節(jié)詞以及象聲詞等)。設(shè)立切分標(biāo)志法首先收集眾多的切分標(biāo)志,分詞時(shí)先找出切分標(biāo)志,把句子切分為一些較短的字段,再用 MM、RMM 或其它的方法進(jìn)行細(xì)加工。這種方法并非真正意義上的分詞方法,只是自動(dòng)分詞的一種前處理方式而已,它要額外消耗時(shí)間掃描切分標(biāo)志,增加存儲(chǔ)空間存放那些非 自然切分標(biāo)志。

·最佳匹配法(OM)。此法分為正向的最佳匹配法和逆向的最佳匹配法,其出發(fā)點(diǎn)是:在詞典中按詞頻的大小順序排列詞條,以求縮短對(duì)分詞詞典的檢索時(shí) 間,達(dá)到最佳效果,從而降低分詞的時(shí)間復(fù)雜度,加快分詞速度。實(shí)質(zhì)上,這種方法也不是一種純粹意義上的分詞方法,它只是一種對(duì)分詞詞典的組織方式。OM 法的分詞詞典每條詞的前面必須有指明長(zhǎng)度的數(shù)據(jù)項(xiàng),所以其空間復(fù)雜度有所增加,對(duì)提高分詞精度沒(méi)有影響,分詞處理的時(shí)間復(fù)雜度有所降低。

此種方法優(yōu)點(diǎn)是簡(jiǎn)單,易于實(shí)現(xiàn)。但缺點(diǎn)有很多:匹配速度慢;存在交集型和組合型歧義切分問(wèn)題;詞本身沒(méi)有一個(gè)標(biāo)準(zhǔn)的定義,沒(méi)有統(tǒng)一標(biāo)準(zhǔn)的詞集;不同詞典產(chǎn)生的歧義也不同;缺乏自學(xué)習(xí)的智能性。

基于統(tǒng)計(jì)的分詞方法

該方法的主要思想:詞是穩(wěn)定的組合,因此在上下文中,相鄰的字同時(shí)出現(xiàn)的次數(shù)越多,就越有可能構(gòu)成一個(gè)詞。因此字與字相鄰出現(xiàn)的概率或頻率能較好地反映成詞的可信度。可以對(duì)訓(xùn)練文本中相鄰出現(xiàn)的各個(gè)字的組合的頻度進(jìn)行統(tǒng)計(jì),計(jì)算它們之間的互現(xiàn)信息。互現(xiàn)信息體現(xiàn)了漢字之間結(jié)合關(guān)系的緊密程度。當(dāng)緊密程 度高于某一個(gè)閾值時(shí),便可以認(rèn)為此字組可能構(gòu)成了一個(gè)詞。該方法又稱(chēng)為無(wú)字典分詞。

該方法所應(yīng)用的主要的統(tǒng)計(jì)模型有:N 元文法模型(N-gram)、隱馬爾可夫模型(Hiden Markov Model,HMM)、最大熵模型(ME)、條件隨機(jī)場(chǎng)模型(Conditional Random Fields,CRF)等。

在實(shí)際應(yīng)用中此類(lèi)分詞算法一般是將其與基于詞典的分詞方法結(jié)合起來(lái),既發(fā)揮匹配分詞切分速度快、效率高的特點(diǎn),又利用了無(wú)詞典分詞結(jié)合上下文識(shí)別生詞、自動(dòng)消除歧義的優(yōu)點(diǎn)。

基于語(yǔ)義的分詞方法

語(yǔ)義分詞法引入了語(yǔ)義分析,對(duì)自然語(yǔ)言自身的語(yǔ)言信息進(jìn)行更多的處理,如擴(kuò)充轉(zhuǎn)移網(wǎng)絡(luò)法、知識(shí)分詞語(yǔ)義分析法、鄰接約束法、綜合匹配法、后綴分詞法、特征詞庫(kù)法、矩陣約束法、語(yǔ)法分析法等。

·擴(kuò)充轉(zhuǎn)移網(wǎng)絡(luò)法。該方法以有限狀態(tài)機(jī)概念為基礎(chǔ)。有限狀態(tài)機(jī)只能識(shí)別正則語(yǔ)言,對(duì)有限狀態(tài)機(jī)作的第一次擴(kuò)充使其具有遞歸能力,形成遞歸轉(zhuǎn)移網(wǎng)絡(luò) (RTN)。在RTN 中,弧線上的標(biāo)志不僅可以是終極符(語(yǔ)言中的單詞)或非終極符(詞類(lèi)),還可以調(diào)用另外的子網(wǎng)絡(luò)名字分非終極符(如字或字串的成詞條件)。這樣,計(jì)算機(jī)在 運(yùn)行某個(gè)子網(wǎng)絡(luò)時(shí),就可以調(diào)用另外的子網(wǎng)絡(luò),還可以遞歸調(diào)用。詞法擴(kuò)充轉(zhuǎn)移網(wǎng)絡(luò)的使用, 使分詞處理和語(yǔ)言理解的句法處理階段交互成為可能,并且有效地解決了漢語(yǔ)分詞的歧義。

·矩陣約束法。其基本思想是:先建立一個(gè)語(yǔ)法約束矩陣和一個(gè)語(yǔ)義約束矩陣, 其中元素分別表明具有某詞性的詞和具有另一詞性的詞相鄰是否符合語(yǔ)法規(guī)則, 屬于某語(yǔ)義類(lèi)的詞和屬于另一詞義類(lèi)的詞相鄰是否符合邏輯,機(jī)器在切分時(shí)以之約束分詞結(jié)果。

基于理解的分詞方法

基于理解的分詞方法是通過(guò)讓計(jì)算機(jī)模擬人對(duì)句子的理解,達(dá)到識(shí)別詞的效果。其基本思想就是在分詞的同時(shí)進(jìn)行句法、語(yǔ)義分析,利用句法信息和語(yǔ)義信息來(lái)處理歧義現(xiàn)象。它通常包括三個(gè)部分:分詞子系統(tǒng)、句法語(yǔ)義子系統(tǒng)、總控部分。在總控部分的協(xié)調(diào)下,分詞子系統(tǒng)可以獲得有關(guān)詞、句子等的句法和語(yǔ)義信息來(lái)對(duì)分詞歧義進(jìn)行判斷,即它模擬了人對(duì)句子的理解過(guò)程。這種分詞方法需要使用大量的語(yǔ)言知識(shí)和信息。目前基于理解的分詞方法主要有專(zhuān)家系統(tǒng)分詞法和神經(jīng)網(wǎng)絡(luò)分詞法等。

·專(zhuān)家系統(tǒng)分詞法。從專(zhuān)家系統(tǒng)角度把分詞的知識(shí)(包括常識(shí)性分詞知識(shí)與消除歧義切分的啟發(fā)性知識(shí)即歧義切分規(guī)則)從實(shí)現(xiàn)分詞過(guò)程的推理機(jī)中獨(dú)立出來(lái),使知識(shí)庫(kù)的維護(hù)與推理機(jī)的實(shí)現(xiàn)互不干擾,從而使知識(shí)庫(kù)易于維護(hù)和管理。它還具有發(fā)現(xiàn)交集歧義字段和多義組合歧義字段的能力和一定的自學(xué)習(xí)功能。

·神經(jīng)網(wǎng)絡(luò)分詞法。該方法是模擬人腦并行,分布處理和建立數(shù)值計(jì)算模型工作的。它將分詞知識(shí)所分散隱式的方法存入神經(jīng)網(wǎng)絡(luò)內(nèi)部,通過(guò)自學(xué)習(xí)和訓(xùn)練修改內(nèi)部權(quán)值,以達(dá)到正確的分詞結(jié)果,最后給出神經(jīng)網(wǎng)絡(luò)自動(dòng)分詞結(jié)果,如使用 LSTM、GRU 等神經(jīng)網(wǎng)絡(luò)模型等。

·神經(jīng)網(wǎng)絡(luò)專(zhuān)家系統(tǒng)集成式分詞法。該方法首先啟動(dòng)神經(jīng)網(wǎng)絡(luò)進(jìn)行分詞,當(dāng)神經(jīng)網(wǎng)絡(luò)對(duì)新出現(xiàn)的詞不能給出準(zhǔn)確切分時(shí),激活專(zhuān)家系統(tǒng)進(jìn)行分析判斷,依據(jù)知識(shí)庫(kù)進(jìn)行推理,得出初步分析,并啟動(dòng)學(xué)習(xí)機(jī)制對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練。該方法可以較充分發(fā)揮神經(jīng)網(wǎng)絡(luò)與專(zhuān)家系統(tǒng)二者優(yōu)勢(shì),進(jìn)一步提高分詞效率。

以上便是對(duì)分詞算法的基本介紹,接下來(lái)我們?cè)俳榻B幾個(gè)比較實(shí)用的分詞 Python 庫(kù)及它們的使用方法。

分詞工具

在這里介紹幾個(gè)比較有代表性的支持分詞的 Python 庫(kù),主要有:

1. jieba

專(zhuān)用于分詞的 Python 庫(kù),GitHub:https://github.com/fxsjy/jieba,分詞效果較好。

支持三種分詞模式:

·精確模式,試圖將句子最精確地切開(kāi),適合文本分析。

·全模式,將句子中所有的可能成詞的詞語(yǔ)都掃描出來(lái),速度非??欤遣荒芙鉀Q歧義。

·搜索引擎模式:在精確模式的基礎(chǔ)上,對(duì)長(zhǎng)詞再次切分,提高召回率,適用于搜索引擎分詞。

另外 jieba 支持繁體分詞,支持自定義詞典。

其使用的算法是基于統(tǒng)計(jì)的分詞方法,主要有如下幾種:

·基于前綴詞典實(shí)現(xiàn)高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構(gòu)成的有向無(wú)環(huán)圖 (DAG);

·采用了動(dòng)態(tài)規(guī)劃查找最大概率路徑, 找出基于詞頻的最大切分組合;

·對(duì)于未登錄詞,采用了基于漢字成詞能力的 HMM 模型,使用了 Viterbi 算法。

精確模式分詞

首先我們來(lái)看下精確模式分詞,使用 lcut() 方法,類(lèi)似 cut() 方法,其參數(shù)和 cut() 是一致的,只不過(guò)返回結(jié)果是列表而不是生成器,默認(rèn)使用精確模式,代碼如下:

import jieba
string = '這個(gè)把手該換了,我不喜歡日本和服,別把手放在我的肩膀上,工信處女干事每月經(jīng)過(guò)下屬科室都要親口交代24口
交換機(jī)等技術(shù)性器件的安裝工作'
result = jieba.lcut(string)
print(len(result), '/'.join(result))

結(jié)果:

38 這個(gè)/把手/該換/了/,/我/不/喜歡/日本/和服/,/別/把手/放在/我/的/肩膀/上/,/工信處/女干事/每月/經(jīng)過(guò)/下屬/科室
/都/要/親口/交代/24/口/交換機(jī)/等/技術(shù)性/器件/的/安裝/工作

可見(jiàn)分詞效果還是不錯(cuò)的。

全模式分詞

使用全模式分詞需要添加 cut_all 參數(shù),將其設(shè)置為 True,代碼如下:

result = jieba.lcut(string, cut_all=True)
print(len(result), '/'.join(result))

結(jié)果如下:

51 這個(gè)/把手/該換/了///我/不/喜歡/日本/和服///別/把手/放在/我/的/肩膀/上///工信處/處女/女干事/干事/每月/月經(jīng)
/經(jīng)過(guò)/下屬/科室/都/要/親口/口交/交代/24/口交/交換/交換機(jī)/換機(jī)/等/技術(shù)/技術(shù)性/性器/器件/的/安裝/安裝工/裝工/工作

搜索引擎模式分詞

使用搜索引擎模式分詞需要調(diào)用 cut_for_search() 方法,代碼如下:

result = jieba.lcut_for_search(string)
print(len(result), '/'.join(result))

結(jié)果如下:

42 這個(gè)/把手/該換/了/,/我/不/喜歡/日本/和服/,/別/把手/放在/我/的/肩膀/上/,/工信處/干事/女干事/每月/經(jīng)過(guò)/下屬
/科室/都/要/親口/交代/24/口/交換/換機(jī)/交換機(jī)/等/技術(shù)/技術(shù)性/器件/的/安裝/工作

另外可以加入自定義詞典,如我們想把 日本和服 作為一個(gè)整體,可以把它添加到詞典中,代碼如下:

jieba.add_word('日本和服')
result = jieba.lcut(string)
print(len(result), '/'.join(result))

結(jié)果如下:

37 這個(gè)/把手/該換/了/,/我/不/喜歡/日本和服/,/別/把手/放在/我/的/肩膀/上/,/工信處/女干事/每月/經(jīng)過(guò)/下屬/科室
/都/要/親口/交代/24/口/交換機(jī)/等/技術(shù)性/器件/的/安裝/工作

可以看到切分結(jié)果中,日本和服 四個(gè)字就作為一個(gè)整體出現(xiàn)在結(jié)果中了,分詞數(shù)量比精確模式少了一個(gè)。

詞性標(biāo)注

另外 jieba 還支持詞性標(biāo)注,可以輸出分詞后每個(gè)詞的詞性,實(shí)例如下:

words = pseg.lcut(string)
print(list(map(lambda x: list(x), words)))

運(yùn)行結(jié)果:

[['這個(gè)', 'r'], ['把手', 'v'], ['該', 'r'], ['換', 'v'], ['了', 'ul'], [',', 'x'], ['我', 'r'], ['不', 'd'], 
['喜歡', 'v'], ['日本和服', 'x'], [',', 'x'], ['別', 'r'], ['把手', 'v'], ['放在', 'v'], ['我', 'r'], ['的', 'uj'], 
['肩膀', 'n'], ['上', 'f'], [',', 'x'], ['工信處', 'n'], ['女干事', 'n'], ['每月', 'r'], ['經(jīng)過(guò)', 'p'], 
['下屬', 'v'], ['科室', 'n'], ['都', 'd'], ['要', 'v'], ['親口', 'n'], ['交代', 'n'], ['24', 'm'], ['口', 'n'], 
['交換機(jī)', 'n'], ['等', 'u'], ['技術(shù)性', 'n'], ['器件', 'n'], ['的', 'uj'], ['安裝', 'v'], ['工作', 'vn']]

關(guān)于詞性的說(shuō)明可以參考:https://gist.github.com/luw2007/6016931。

2. SnowNLP

SnowNLP: Simplified Chinese Text Processing,可以方便的處理中文文本內(nèi)容,是受到了 TextBlob 的啟發(fā)而寫(xiě)的,由于現(xiàn)在大部分的自然語(yǔ)言處理庫(kù)基本都是針對(duì)英文的,于是寫(xiě)了一個(gè)方便處理中文的類(lèi)庫(kù),并且和 TextBlob 不同的是,這里沒(méi)有用 NLTK,所有的算法都是自己實(shí)現(xiàn)的,并且自帶了一些訓(xùn)練好的字典。GitHub地址:https://github.com/isnowfy/snownlp。

分詞

這里的分詞是基于 Character-Based Generative Model 來(lái)實(shí)現(xiàn)的,論文地址:http://aclweb.org/anthology//Y/Y09/Y09-2047.pdf,我們還是以上面的例子說(shuō)明,相關(guān)使用說(shuō)明如下:

from snownlp import SnowNLP
string = '這個(gè)把手該換了,我不喜歡日本和服,別把手放在我的肩膀上,工信處女干事每月經(jīng)過(guò)下屬科室都要親口交代24口
交換機(jī)等技術(shù)性器件的安裝工作'
s = SnowNLP(string)
result = s.words
print(len(result), '/'.join(result))

運(yùn)行結(jié)果:

40 這個(gè)/把手/該/換/了/,/我/不/喜歡/日本/和/服/,/別把手/放在/我/的/肩膀/上/,/工/信處女/干事/每月/經(jīng)過(guò)/下屬/科室
/都/要/親口/交代/24/口/交換機(jī)/等/技術(shù)性/器件/的/安裝/工作

經(jīng)過(guò)觀察,可以發(fā)現(xiàn)分詞效果其實(shí)不怎么理想,和服 被分開(kāi)了,工信處 也被分開(kāi)了,女干事 也被分開(kāi)了。

另外 SnowNLP 還支持很多功能,例如詞性標(biāo)注(HMM)、情感分析、拼音轉(zhuǎn)換(Trie樹(shù))、關(guān)鍵詞和摘要生成(TextRank)。

我們簡(jiǎn)單看一個(gè)實(shí)例:

print('Tags:', list(s.tags))
print('Sentiments:', s.sentiments)
print('Pinyin:', s.pinyin)

運(yùn)行結(jié)果:

Tags: [('這個(gè)', 'r'), ('把手', 'Ng'), ('該', 'r'), ('換', 'v'), ('了', 'y'), (',', 'w'), ('我', 'r'), ('不', 'd'), 
('喜歡', 'v'), ('日本', 'ns'), ('和', 'c'), ('服', 'v'), (',', 'w'), ('別把手', 'ad'), ('放在', 'v'), ('我', 'r'), 
('的', 'u'), ('肩膀', 'n'), ('上', 'f'), (',', 'w'), ('工', 'j'), ('信處女', 'j'), ('干事', 'n'), ('每月', 'r'), 
('經(jīng)過(guò)', 'p'), ('下屬', 'v'), ('科室', 'n'), ('都', 'd'), ('要', 'v'), ('親口', 'd'), ('交代', 'v'), ('24', 'm'), 
('口', 'q'), ('交換機(jī)', 'n'), ('等', 'u'), ('技術(shù)性', 'n'), ('器件', 'n'), ('的', 'u'), ('安裝', 'vn'), ('工作', 'vn')]
Sentiments: 0.015678817603646866
Pinyin: ['zhe', 'ge', 'ba', 'shou', 'gai', 'huan', 'liao', ',', 'wo', 'bu', 'xi', 'huan', 'ri', 'ben', 'he', 'fu', 
',', 'bie', 'ba', 'shou', 'fang', 'zai', 'wo', 'de', 'jian', 'bang', 'shang', ',', 'gong', 'xin', 'chu', 'nv', 
'gan', 'shi', 'mei', 'yue', 'jing', 'guo', 'xia', 'shu', 'ke', 'shi', 'dou', 'yao', 'qin', 'kou', 'jiao', 'dai', 
'24', 'kou', 'jiao', 'huan', 'ji', 'deng', 'ji', 'shu', 'xing', 'qi', 'jian', 'de', 'an', 'zhuang', 'gong', 'zuo']

3. THULAC

THULAC(THU Lexical Analyzer for Chinese)由清華大學(xué)自然語(yǔ)言處理與社會(huì)人文計(jì)算實(shí)驗(yàn)室研制推出的一套中文詞法分析工具包,GitHub 鏈接:https://github.com/thunlp/THULAC-Python,具有中文分詞和詞性標(biāo)注功能。THULAC具有如下幾個(gè)特點(diǎn):

能力強(qiáng)。利用集成的目前世界上規(guī)模最大的人工分詞和詞性標(biāo)注中文語(yǔ)料庫(kù)(約含5800萬(wàn)字)訓(xùn)練而成,模型標(biāo)注能力強(qiáng)大。

準(zhǔn)確率高。該工具包在標(biāo)準(zhǔn)數(shù)據(jù)集Chinese Treebank(CTB5)上分詞的F1值可達(dá)97.3%,詞性標(biāo)注的F1值可達(dá)到92.9%,與該數(shù)據(jù)集上最好方法效果相當(dāng)。

速度較快。同時(shí)進(jìn)行分詞和詞性標(biāo)注速度為300KB/s,每秒可處理約15萬(wàn)字。只進(jìn)行分詞速度可達(dá)到1.3MB/s。

我們用一個(gè)實(shí)例看一下分詞效果:

import thulac
string = '這個(gè)把手該換了,我不喜歡日本和服,別把手放在我的肩膀上,工信處女干事每月經(jīng)過(guò)下屬科室都要親口交代24口
交換機(jī)等技術(shù)性器件的安裝工作'
t = thulac.thulac()
result = t.cut(string)
print(result)

運(yùn)行結(jié)果:

[['這個(gè)', 'r'], ['把手', 'n'], ['該', 'v'], ['換', 'v'], ['了', 'u'], [',', 'w'], ['我', 'r'], ['不', 'd'], 
['喜歡', 'v'], ['日本', 'ns'], ['和服', 'n'], [',', 'w'], ['別把手', 'n'], ['放', 'v'], ['在', 'p'], ['我', 'r'], 
['的', 'u'], ['肩膀', 'n'], ['上', 'f'], [',', 'w'], ['工信處', 'n'], ['女', 'a'], ['干事', 'n'], ['每月', 'r'], 
['經(jīng)過(guò)', 'p'], ['下屬', 'v'], ['科室', 'n'], ['都', 'd'], ['要', 'v'], ['親口', 'd'], ['交代', 'v'], ['24', 'm'], 
['口', 'q'], ['交換機(jī)', 'n'], ['等', 'u'], ['技術(shù)性', 'n'], ['器件', 'n'], ['的', 'u'], ['安裝', 'v'], ['工作', 'v']]

4. NLPIR

NLPIR 分詞系統(tǒng),前身為2000年發(fā)布的 ICTCLAS 詞法分析系統(tǒng),GitHub 鏈接:https://github.com/NLPIR-team/NLPIR,是由北京理工大學(xué)張華平博士研發(fā)的中文分詞系統(tǒng),經(jīng)過(guò)十余年的不斷完善,擁有豐富的功能和強(qiáng)大的性能。NLPIR是一整套對(duì)原始文本集進(jìn)行處理和加工的軟件,提供了中間件處理效果的可視化展示,也可以作為小規(guī)模數(shù)據(jù)的處理加工工具。主要功能包括:中文分詞,詞性標(biāo)注,命名實(shí)體識(shí)別,用戶(hù)詞典、新詞發(fā)現(xiàn)與關(guān)鍵詞提取等功能。另外對(duì)于分詞功能,它有 Python 實(shí)現(xiàn)的版本,GitHub 鏈接:https://github.com/tsroten/pynlpir。

使用方法如下:

import pynlpir
pynlpir.open()
string = '這個(gè)把手該換了,我不喜歡日本和服,別把手放在我的肩膀上,工信處女干事每月經(jīng)過(guò)下屬科室都要親口交代24口
交換機(jī)等技術(shù)性器件的安裝工作'
result = pynlpir.segment(string)
print(result)

運(yùn)行結(jié)果如下:

[('這個(gè)', 'pronoun'), ('把', 'preposition'), ('手', 'noun'), ('該', 'pronoun'), ('換', 'verb'), 
('了', 'modal particle'), (',', 'punctuation mark'), ('我', 'pronoun'), ('不', 'adverb'), ('喜歡', 'verb'), 
('日本', 'noun'), ('和', 'conjunction'), ('服', 'verb'), (',', 'punctuation mark'), ('別', 'adverb'), 
('把', 'preposition'), ('手', 'noun'), ('放', 'verb'), ('在', 'preposition'), ('我', 'pronoun'), ('的', 'particle'), 
('肩膀', 'noun'), ('上', 'noun of locality'), (',', 'punctuation mark'), ('工', 'noun'), ('信', 'noun'), 
('處女', 'noun'), ('干事', 'noun'), ('每月', 'pronoun'), ('經(jīng)過(guò)', 'preposition'), ('下屬', 'verb'), ('科室', 'noun'), 
('都', 'adverb'), ('要', 'verb'), ('親口', 'adverb'), ('交代', 'verb'), ('24', 'numeral'), ('口', 'classifier'), 
('交換機(jī)', 'noun'), ('等', 'particle'), ('技術(shù)性', 'noun'), ('器件', 'noun'), ('的', 'particle'), ('安裝', 'verb'), 
('工作', 'verb')]

這里 把手 和 和服 也被分開(kāi)了。

5. NLTK

NLTK,Natural Language Toolkit,是一個(gè)自然語(yǔ)言處理的包工具,各種多種 NLP 處理相關(guān)功能,GitHub 鏈接:https://github.com/nltk/nltk。

但是 NLTK 對(duì)于中文分詞是不支持的,示例如下:

from nltk import word_tokenize
string = '這個(gè)把手該換了,我不喜歡日本和服,別把手放在我的肩膀上,工信處女干事每月經(jīng)過(guò)下屬科室都要親口交代24口
交換機(jī)等技術(shù)性器件的安裝工作'
result = word_tokenize(string)
print(result)

結(jié)果:

['這個(gè)把手該換了,我不喜歡日本和服,別把手放在我的肩膀上,工信處女干事每月經(jīng)過(guò)下屬科室都要親口交代24口交換機(jī)等
技術(shù)性器件的安裝工作']

如果要用中文分詞的話(huà),可以使用 FoolNLTK,它使用 Bi-LSTM 訓(xùn)練而成,包含分詞、詞性標(biāo)注、實(shí)體識(shí)別等功能,同時(shí)支持自定義詞典,可以訓(xùn)練自己的模型,可以進(jìn)行批量處理。

使用方法如下:

import fool
string = '這個(gè)把手該換了,我不喜歡日本和服,別把手放在我的肩膀上,工信處女干事每月經(jīng)過(guò)下屬科室都要親口交代24口交換機(jī)
等技術(shù)性器件的安裝工作'
result = fool.cut(string)
print(result)

運(yùn)行結(jié)果:

[['這個(gè)', '把手', '該', '換', '了', ',', '我', '不', '喜歡', '日本', '和服', ',', '別', '把', '手', '放', '在', 
'我', '的', '肩膀', '上', ',', '工信處', '女', '干事', '每月', '經(jīng)過(guò)', '下屬', '科室', '都', '要', '親', '口', 
'交代', '24', '口', '交換機(jī)', '等', '技術(shù)性', '器件', '的', '安裝', '工作']]

可以看到這個(gè)分詞效果還是不錯(cuò)的。

另外還可以進(jìn)行詞性標(biāo)注,實(shí)體識(shí)別:

result = fool.pos_cut(string)
print(result)
_, ners = fool.analysis(string)
print(ners)

運(yùn)行結(jié)果:

[[('這個(gè)', 'r'), ('把手', 'n'), ('該', 'r'), ('換', 'v'), ('了', 'y'), (',', 'wd'), ('我', 'r'), ('不', 'd'), 
('喜歡', 'vi'), ('日本', 'ns'), ('和服', 'n'), (',', 'wd'), ('別', 'd'), ('把', 'pba'), ('手', 'n'), ('放', 'v'), 
('在', 'p'), ('我', 'r'), ('的', 'ude'), ('肩膀', 'n'), ('上', 'f'), (',', 'wd'), ('工信處', 'ns'), ('女', 'b'), 
('干事', 'n'), ('每月', 'r'), ('經(jīng)過(guò)', 'p'), ('下屬', 'v'), ('科室', 'n'), ('都', 'd'), ('要', 'v'), ('親', 'a'), 
('口', 'n'), ('交代', 'v'), ('24', 'm'), ('口', 'q'), ('交換機(jī)', 'n'), ('等', 'udeng'), ('技術(shù)性', 'n'), 
('器件', 'n'), ('的', 'ude'), ('安裝', 'n'), ('工作', 'n')]]
[[(12, 15, 'location', '日本')]]

6. LTP

語(yǔ)言技術(shù)平臺(tái)(Language Technology Platform,LTP)是哈工大社會(huì)計(jì)算與信息檢索研究中心歷時(shí)十年開(kāi)發(fā)的一整套中文語(yǔ)言處理系統(tǒng)。LTP制定了基于XML的語(yǔ)言處理結(jié)果表示,并在此基礎(chǔ)上提供了一整套自底向上的豐富而且高效的中文語(yǔ)言處理模塊(包括詞法、句法、語(yǔ)義等6項(xiàng)中文處理核心技術(shù)),以及基于動(dòng)態(tài)鏈接庫(kù)(Dynamic Link Library, DLL)的應(yīng)用程序接口、可視化工具,并且能夠以網(wǎng)絡(luò)服務(wù)(Web Service)的形式進(jìn)行使用。

LTP 有 Python 版本,GitHub地址:https://github.com/HIT-SCIR/pyltp,另外運(yùn)行的時(shí)候需要下載模型,模型還比較大,下載地址:http://ltp.ai/download.html。

示例代碼如下:

from pyltp import Segmentor
string = '這個(gè)把手該換了,我不喜歡日本和服,別把手放在我的肩膀上,工信處女干事每月經(jīng)過(guò)下屬科室都要親口交代24口交換機(jī)
等技術(shù)性器件的安裝工作'
segmentor = Segmentor()
segmentor.load('./cws.model')
result = list(segmentor.segment(string))
segmentor.release()
print(result)

運(yùn)行結(jié)果:

41 這個(gè)/把手/該/換/了/,/我/不/喜歡/日本/和服/,/別/把/手/放在/我/的/肩膀/上/,/工信/處女/干事/每月/經(jīng)過(guò)/下屬/科室
/都/要/親口/交代/24/口/交換機(jī)/等/技術(shù)性/器件/的/安裝/工作

可以發(fā)現(xiàn) 工信處、女干事 沒(méi)有正確分開(kāi)。

以上就是關(guān)于Python3爬蟲(chóng)中如何實(shí)現(xiàn)中文分詞的內(nèi)容,如果你們有學(xué)習(xí)到知識(shí)或者技能,可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI