轉(zhuǎn)自 進擊的Coder 公眾號
原理
中文分詞斩松,即 Chinese Word Segmentation,即將一個漢字序列進行切分憨攒,得到一個個單獨的詞世杀。表面上看,分詞其實就是那么回事肝集,但分詞效果好不好對信息檢索瞻坝、實驗結(jié)果還是有很大影響的,同時分詞的背后其實是涉及各種各樣的算法的杏瞻。
中文分詞與英文分詞有很大的不同所刀,對英文而言,一個單詞就是一個詞捞挥,而漢語是以字為基本的書寫單位浮创,詞語之間沒有明顯的區(qū)分標(biāo)記,需要人為切分砌函。根據(jù)其特點斩披,可以把分詞算法分為四大類:
- 基于規(guī)則的分詞方法
- 基于統(tǒng)計的分詞方法
- 基于語義的分詞方法
- 基于理解的分詞方法
下面我們對這幾種方法分別進行總結(jié)。
基于規(guī)則的分詞方法
這種方法又叫作機械分詞方法胸嘴、基于字典的分詞方法雏掠,它是按照一定的策略將待分析的漢字串與一個“充分大的”機器詞典中的詞條進行匹配。若在詞典中找到某個字符串劣像,則匹配成功乡话。該方法有三個要素,即分詞詞典耳奕、文本掃描順序和匹配原則绑青。文本的掃描順序有正向掃描、逆向掃描和雙向掃描屋群。匹配原則主要有最大匹配闸婴、最小匹配、逐詞匹配和最佳匹配芍躏。
最大匹配法(MM)邪乍。基本思想是:假設(shè)自動分詞詞典中的最長詞條所含漢字的個數(shù)為 i对竣,則取被處理材料當(dāng)前字符串序列中的前i個字符作為匹配字段庇楞,查找分詞詞典,若詞典中有這樣一個i字詞否纬,則匹配成功吕晌,匹配字段作為一個詞被切分出來;若詞典中找不到這樣的一個i字詞临燃,則匹配失敗睛驳,匹配字段去掉最后一個漢字烙心,剩下的字符作為新的匹配字段,再進行匹配乏沸,如此進行下去淫茵,直到匹配成功為止。統(tǒng)計結(jié)果表明屎蜓,該方法的錯誤率為 1/169.
逆向最大匹配法(RMM)痘昌。該方法的分詞過程與 MM 法相同,不同的是從句子(或文章)末尾開始處理炬转,每次匹配不成功時去掉的是前面的一個漢字。統(tǒng)計結(jié)果表明算灸,該方法的錯誤率為 1/245扼劈。
逐詞遍歷法。把詞典中的詞按照由長到短遞減的順序逐字搜索整個待處理的材料菲驴,一直到把全部的詞切分出來為止荐吵。不論分詞詞典多大,被處理的材料多么小赊瞬,都得把這個分詞詞典匹配一遍先煎。
設(shè)立切分標(biāo)志法。切分標(biāo)志有自然和非自然之分巧涧。自然切分標(biāo)志是指文章中出現(xiàn)的非文字符號薯蝎,如標(biāo)點符號等;非自然標(biāo)志是利用詞綴和不構(gòu)成詞的詞(包 括單音詞谤绳、復(fù)音節(jié)詞以及象聲詞等)占锯。設(shè)立切分標(biāo)志法首先收集眾多的切分標(biāo)志,分詞時先找出切分標(biāo)志缩筛,把句子切分為一些較短的字段消略,再用 MM、RMM 或其它的方法進行細(xì)加工瞎抛。這種方法并非真正意義上的分詞方法艺演,只是自動分詞的一種前處理方式而已,它要額外消耗時間掃描切分標(biāo)志桐臊,增加存儲空間存放那些非 自然切分標(biāo)志胎撤。
最佳匹配法(OM)。此法分為正向的最佳匹配法和逆向的最佳匹配法豪硅,其出發(fā)點是:在詞典中按詞頻的大小順序排列詞條哩照,以求縮短對分詞詞典的檢索時 間,達(dá)到最佳效果懒浮,從而降低分詞的時間復(fù)雜度飘弧,加快分詞速度识藤。實質(zhì)上,這種方法也不是一種純粹意義上的分詞方法次伶,它只是一種對分詞詞典的組織方式痴昧。OM 法的分詞詞典每條詞的前面必須有指明長度的數(shù)據(jù)項,所以其空間復(fù)雜度有所增加冠王,對提高分詞精度沒有影響赶撰,分詞處理的時間復(fù)雜度有所降低。
此種方法優(yōu)點是簡單柱彻,易于實現(xiàn)豪娜。但缺點有很多:匹配速度慢;存在交集型和組合型歧義切分問題哟楷;詞本身沒有一個標(biāo)準(zhǔn)的定義瘤载,沒有統(tǒng)一標(biāo)準(zhǔn)的詞集;不同詞典產(chǎn)生的歧義也不同卖擅;缺乏自學(xué)習(xí)的智能性鸣奔。
基于統(tǒng)計的分詞方法
該方法的主要思想:詞是穩(wěn)定的組合,因此在上下文中惩阶,相鄰的字同時出現(xiàn)的次數(shù)越多挎狸,就越有可能構(gòu)成一個詞。因此字與字相鄰出現(xiàn)的概率或頻率能較好地反映成詞的可信度断楷∠谴遥可以對訓(xùn)練文本中相鄰出現(xiàn)的各個字的組合的頻度進行統(tǒng)計,計算它們之間的互現(xiàn)信息脐嫂⊥彻危互現(xiàn)信息體現(xiàn)了漢字之間結(jié)合關(guān)系的緊密程度。當(dāng)緊密程 度高于某一個閾值時账千,便可以認(rèn)為此字組可能構(gòu)成了一個詞侥蒙。該方法又稱為無字典分詞。
該方法所應(yīng)用的主要的統(tǒng)計模型有:N 元文法模型(N-gram)匀奏、隱馬爾可夫模型(Hiden Markov Model鞭衩,HMM)、最大熵模型(ME)娃善、條件隨機場模型(Conditional Random Fields论衍,CRF)等。
在實際應(yīng)用中此類分詞算法一般是將其與基于詞典的分詞方法結(jié)合起來聚磺,既發(fā)揮匹配分詞切分速度快坯台、效率高的特點,又利用了無詞典分詞結(jié)合上下文識別生詞瘫寝、自動消除歧義的優(yōu)點蜒蕾。
基于語義的分詞方法
語義分詞法引入了語義分析稠炬,對自然語言自身的語言信息進行更多的處理,如擴充轉(zhuǎn)移網(wǎng)絡(luò)法咪啡、知識分詞語義分析法首启、鄰接約束法、綜合匹配法撤摸、后綴分詞法毅桃、特征詞庫法、矩陣約束法准夷、語法分析法等钥飞。
擴充轉(zhuǎn)移網(wǎng)絡(luò)法。該方法以有限狀態(tài)機概念為基礎(chǔ)冕象。有限狀態(tài)機只能識別正則語言代承,對有限狀態(tài)機作的第一次擴充使其具有遞歸能力,形成遞歸轉(zhuǎn)移網(wǎng)絡(luò) (RTN)渐扮。在RTN 中,弧線上的標(biāo)志不僅可以是終極符(語言中的單詞)或非終極符(詞類)掖棉,還可以調(diào)用另外的子網(wǎng)絡(luò)名字分非終極符(如字或字串的成詞條件)墓律。這樣,計算機在 運行某個子網(wǎng)絡(luò)時幔亥,就可以調(diào)用另外的子網(wǎng)絡(luò)耻讽,還可以遞歸調(diào)用。詞法擴充轉(zhuǎn)移網(wǎng)絡(luò)的使用帕棉, 使分詞處理和語言理解的句法處理階段交互成為可能针肥,并且有效地解決了漢語分詞的歧義。
矩陣約束法香伴。其基本思想是:先建立一個語法約束矩陣和一個語義約束矩陣慰枕, 其中元素分別表明具有某詞性的詞和具有另一詞性的詞相鄰是否符合語法規(guī)則, 屬于某語義類的詞和屬于另一詞義類的詞相鄰是否符合邏輯即纲,機器在切分時以之約束分詞結(jié)果具帮。
基于理解的分詞方法
基于理解的分詞方法是通過讓計算機模擬人對句子的理解,達(dá)到識別詞的效果低斋。其基本思想就是在分詞的同時進行句法蜂厅、語義分析,利用句法信息和語義信息來處理歧義現(xiàn)象膊畴。它通常包括三個部分:分詞子系統(tǒng)掘猿、句法語義子系統(tǒng)、總控部分唇跨。在總控部分的協(xié)調(diào)下稠通,分詞子系統(tǒng)可以獲得有關(guān)詞衬衬、句子等的句法和語義信息來對分詞歧義進行判斷,即它模擬了人對句子的理解過程采记。這種分詞方法需要使用大量的語言知識和信息佣耐。目前基于理解的分詞方法主要有專家系統(tǒng)分詞法和神經(jīng)網(wǎng)絡(luò)分詞法等。
專家系統(tǒng)分詞法唧龄。從專家系統(tǒng)角度把分詞的知識(包括常識性分詞知識與消除歧義切分的啟發(fā)性知識即歧義切分規(guī)則)從實現(xiàn)分詞過程的推理機中獨立出來兼砖,使知識庫的維護與推理機的實現(xiàn)互不干擾,從而使知識庫易于維護和管理既棺。它還具有發(fā)現(xiàn)交集歧義字段和多義組合歧義字段的能力和一定的自學(xué)習(xí)功能讽挟。
神經(jīng)網(wǎng)絡(luò)分詞法。該方法是模擬人腦并行丸冕,分布處理和建立數(shù)值計算模型工作的耽梅。它將分詞知識所分散隱式的方法存入神經(jīng)網(wǎng)絡(luò)內(nèi)部,通過自學(xué)習(xí)和訓(xùn)練修改內(nèi)部權(quán)值胖烛,以達(dá)到正確的分詞結(jié)果眼姐,最后給出神經(jīng)網(wǎng)絡(luò)自動分詞結(jié)果,如使用 LSTM佩番、GRU 等神經(jīng)網(wǎng)絡(luò)模型等众旗。
神經(jīng)網(wǎng)絡(luò)專家系統(tǒng)集成式分詞法。該方法首先啟動神經(jīng)網(wǎng)絡(luò)進行分詞趟畏,當(dāng)神經(jīng)網(wǎng)絡(luò)對新出現(xiàn)的詞不能給出準(zhǔn)確切分時贡歧,激活專家系統(tǒng)進行分析判斷,依據(jù)知識庫進行推理赋秀,得出初步分析利朵,并啟動學(xué)習(xí)機制對神經(jīng)網(wǎng)絡(luò)進行訓(xùn)練。該方法可以較充分發(fā)揮神經(jīng)網(wǎng)絡(luò)與專家系統(tǒng)二者優(yōu)勢猎莲,進一步提高分詞效率绍弟。
以上便是對分詞算法的基本介紹,接下來我們再介紹幾個比較實用的分詞 Python 庫及它們的使用方法益眉。
分詞工具
在這里介紹幾個比較有代表性的支持分詞的 Python 庫晌柬,主要有:
1. jieba
專用于分詞的 Python 庫或油,GitHub:https://github.com/fxsjy/jieba浸剩,分詞效果較好。
支持三種分詞模式:
精確模式工腋,試圖將句子最精確地切開展鸡,適合文本分析屿衅。
全模式,將句子中所有的可能成詞的詞語都掃描出來莹弊,速度非车泳茫快涡尘,但是不能解決歧義。
搜索引擎模式:在精確模式的基礎(chǔ)上响迂,對長詞再次切分考抄,提高召回率,適用于搜索引擎分詞蔗彤。
另外 jieba 支持繁體分詞川梅,支持自定義詞典。
其使用的算法是基于統(tǒng)計的分詞方法然遏,主要有如下幾種:
基于前綴詞典實現(xiàn)高效的詞圖掃描贫途,生成句子中漢字所有可能成詞情況所構(gòu)成的有向無環(huán)圖 (DAG)
采用了動態(tài)規(guī)劃查找最大概率路徑, 找出基于詞頻的最大切分組合
對于未登錄詞,采用了基于漢字成詞能力的 HMM 模型待侵,使用了 Viterbi 算法
精確模式分詞
首先我們來看下精確模式分詞丢早,使用 lcut() 方法,類似 cut() 方法秧倾,其參數(shù)和 cut() 是一致的怨酝,只不過返回結(jié)果是列表而不是生成器,默認(rèn)使用精確模式那先,代碼如下:
import jieba
string = '這個把手該換了凫碌,我不喜歡日本和服,別把手放在我的肩膀上胃榕,工信處女干事每月經(jīng)過下屬科室都要親口交代24口交換機等技術(shù)性器件的安裝工作'
result = jieba.lcut(string)
print(len(result), '/'.join(result))
結(jié)果:
38 這個/把手/該換/了/,/我/不/喜歡/日本/和服/瞄摊,/別/把手/放在/我/的/肩膀/上/勋又,/工信處/女干事/每月/經(jīng)過/下屬/科室/都/要/親口/交代/24/口/交換機/等/技術(shù)性/器件/的/安裝/工作
可見分詞效果還是不錯的。
全模式分詞
使用全模式分詞需要添加 cut_all 參數(shù)换帜,將其設(shè)置為 True楔壤,代碼如下:
result = jieba.lcut(string, cut_all=True)
print(len(result), '/'.join(result))
結(jié)果如下:
51 這個/把手/該換/了///我/不/喜歡/日本/和服///別/把手/放在/我/的/肩膀/上///工信處/處女/女干事/干事/每月/月經(jīng)/經(jīng)過/下屬/科室/都/要/親口/口交/交代/24/口交/交換/交換機/換機/等/技術(shù)/技術(shù)性/性器/器件/的/安裝/安裝工/裝工/工作
搜索引擎模式分詞
使用搜索引擎模式分詞需要調(diào)用 cut_for_search() 方法,代碼如下:
result = jieba.lcut_for_search(string)
print(len(result), '/'.join(result))
結(jié)果如下:
42 這個/把手/該換/了/惯驼,/我/不/喜歡/日本/和服/蹲嚣,/別/把手/放在/我/的/肩膀/上/,/工信處/干事/女干事/每月/經(jīng)過/下屬/科室/都/要/親口/交代/24/口/交換/換機/交換機/等/技術(shù)/技術(shù)性/器件/的/安裝/工作
另外可以加入自定義詞典祟牲,如我們想把 日本和服 作為一個整體隙畜,可以把它添加到詞典中,代碼如下:
jieba.add_word('日本和服')
result = jieba.lcut(string)
print(len(result), '/'.join(result))
結(jié)果如下:
37 這個/把手/該換/了/说贝,/我/不/喜歡/日本和服/议惰,/別/把手/放在/我/的/肩膀/上/,/工信處/女干事/每月/經(jīng)過/下屬/科室/都/要/親口/交代/24/口/交換機/等/技術(shù)性/器件/的/安裝/工作
可以看到切分結(jié)果中乡恕,日本和服 四個字就作為一個整體出現(xiàn)在結(jié)果中了言询,分詞數(shù)量比精確模式少了一個俯萎。
詞性標(biāo)注
另外 jieba 還支持詞性標(biāo)注,可以輸出分詞后每個詞的詞性运杭,實例如下:
words = pseg.lcut(string)
print(list(map(lambda x: list(x), words)))
運行結(jié)果:
[['這個', 'r'], ['把手', 'v'], ['該', 'r'], ['換', 'v'], ['了', 'ul'], ['夫啊,', 'x'], ['我', 'r'], ['不', 'd'], ['喜歡', 'v'], ['日本和服', 'x'], [',', 'x'], ['別', 'r'], ['把手', 'v'], ['放在', 'v'], ['我', 'r'], ['的', 'uj'], ['肩膀', 'n'], ['上', 'f'], ['辆憔,', 'x'], ['工信處', 'n'], ['女干事', 'n'], ['每月', 'r'], ['經(jīng)過', 'p'], ['下屬', 'v'], ['科室', 'n'], ['都', 'd'], ['要', 'v'], ['親口', 'n'], ['交代', 'n'], ['24', 'm'], ['口', 'n'], ['交換機', 'n'], ['等', 'u'], ['技術(shù)性', 'n'], ['器件', 'n'], ['的', 'uj'], ['安裝', 'v'], ['工作', 'vn']]
關(guān)于詞性的說明可以參考:https://gist.github.com/luw2007/6016931撇眯。
2. SnowNLP
SnowNLP: Simplified Chinese Text Processing,可以方便的處理中文文本內(nèi)容躁愿,是受到了 TextBlob 的啟發(fā)而寫的叛本,由于現(xiàn)在大部分的自然語言處理庫基本都是針對英文的,于是寫了一個方便處理中文的類庫彤钟,并且和 TextBlob 不同的是来候,這里沒有用 NLTK,所有的算法都是自己實現(xiàn)的逸雹,并且自帶了一些訓(xùn)練好的字典营搅。GitHub地址:https://github.com/isnowfy/snownlp。
分詞
這里的分詞是基于 Character-Based Generative Model 來實現(xiàn)的梆砸,論文地址:http://aclweb.org/anthology//Y/Y09/Y09-2047.pdf转质,我們還是以上面的例子說明,相關(guān)使用說明如下:
from snownlp import SnowNLP
string = '這個把手該換了帖世,我不喜歡日本和服休蟹,別把手放在我的肩膀上,工信處女干事每月經(jīng)過下屬科室都要親口交代24口交換機等技術(shù)性器件的安裝工作'
s = SnowNLP(string)
result = s.words
print(len(result), '/'.join(result))
運行結(jié)果:
40 這個/把手/該/換/了/日矫,/我/不/喜歡/日本/和/服/赂弓,/別把手/放在/我/的/肩膀/上/,/工/信處女/干事/每月/經(jīng)過/下屬/科室/都/要/親口/交代/24/口/交換機/等/技術(shù)性/器件/的/安裝/工作
經(jīng)過觀察哪轿,可以發(fā)現(xiàn)分詞效果其實不怎么理想盈魁,和服 被分開了,工信處 也被分開了窃诉,女干事 也被分開了杨耙。
另外 SnowNLP 還支持很多功能,例如詞性標(biāo)注(HMM)飘痛、情感分析珊膜、拼音轉(zhuǎn)換(Trie樹)、關(guān)鍵詞和摘要生成(TextRank)敦冬。
我們簡單看一個實例:
print('Tags:', list(s.tags))
print('Sentiments:', s.sentiments)
print('Pinyin:', s.pinyin)
運行結(jié)果:
Tags: [('這個', '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)過', 'p'), ('下屬', 'v'), ('科室', 'n'), ('都', 'd'), ('要', 'v'), ('親口', 'd'), ('交代', 'v'), ('24', 'm'), ('口', 'q'), ('交換機', '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é)自然語言處理與社會人文計算實驗室研制推出的一套中文詞法分析工具包溶褪,GitHub 鏈接:https://github.com/thunlp/THULAC-Python币旧,具有中文分詞和詞性標(biāo)注功能。THULAC具有如下幾個特點:
能力強猿妈。利用集成的目前世界上規(guī)模最大的人工分詞和詞性標(biāo)注中文語料庫(約含5800萬字)訓(xùn)練而成吹菱,模型標(biāo)注能力強大。
準(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)俯抖。
速度較快输瓜。同時進行分詞和詞性標(biāo)注速度為300KB/s,每秒可處理約15萬字芬萍。只進行分詞速度可達(dá)到1.3MB/s尤揣。
我們用一個實例看一下分詞效果:
import thulac
string = '這個把手該換了,我不喜歡日本和服柬祠,別把手放在我的肩膀上北戏,工信處女干事每月經(jīng)過下屬科室都要親口交代24口交換機等技術(shù)性器件的安裝工作'
t = thulac.thulac()
result = t.cut(string)
print(result)
運行結(jié)果:
[['這個', '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)過', 'p'], ['下屬', 'v'], ['科室', 'n'], ['都', 'd'], ['要', 'v'], ['親口', 'd'], ['交代', 'v'], ['24', 'm'], ['口', 'q'], ['交換機', '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)過十余年的不斷完善轧房,擁有豐富的功能和強大的性能。NLPIR是一整套對原始文本集進行處理和加工的軟件绍绘,提供了中間件處理效果的可視化展示奶镶,也可以作為小規(guī)模數(shù)據(jù)的處理加工工具。主要功能包括:中文分詞陪拘,詞性標(biāo)注厂镇,命名實體識別,用戶詞典左刽、新詞發(fā)現(xiàn)與關(guān)鍵詞提取等功能捺信。另外對于分詞功能,它有 Python 實現(xiàn)的版本,GitHub 鏈接:https://github.com/tsroten/pynlpir迄靠。
使用方法如下:
import pynlpir
pynlpir.open()
string = '這個把手該換了秒咨,我不喜歡日本和服,別把手放在我的肩膀上掌挚,工信處女干事每月經(jīng)過下屬科室都要親口交代24口交換機等技術(shù)性器件的安裝工作'
result = pynlpir.segment(string)
print(result)
運行結(jié)果如下:
[('這個', '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)過', 'preposition'), ('下屬', 'verb'), ('科室', 'noun'), ('都', 'adverb'), ('要', 'verb'), ('親口', 'adverb'), ('交代', 'verb'), ('24', 'numeral'), ('口', 'classifier'), ('交換機', 'noun'), ('等', 'particle'), ('技術(shù)性', 'noun'), ('器件', 'noun'), ('的', 'particle'), ('安裝', 'verb'), ('工作', 'verb')]
這里 把手 和 和服 也被分開了陡厘。
5. NLTK
NLTK,Natural Language Toolkit特占,是一個自然語言處理的包工具糙置,各種多種 NLP 處理相關(guān)功能,GitHub 鏈接:https://github.com/nltk/nltk是目。
但是 NLTK 對于中文分詞是不支持的谤饭,示例如下:
from nltk import word_tokenize
string = '這個把手該換了,我不喜歡日本和服胖笛,別把手放在我的肩膀上网持,工信處女干事每月經(jīng)過下屬科室都要親口交代24口交換機等技術(shù)性器件的安裝工作'
result = word_tokenize(string)
print(result)
結(jié)果:
['這個把手該換了,我不喜歡日本和服长踊,別把手放在我的肩膀上功舀,工信處女干事每月經(jīng)過下屬科室都要親口交代24口交換機等技術(shù)性器件的安裝工作']
如果要用中文分詞的話,可以使用 FoolNLTK身弊,它使用 Bi-LSTM 訓(xùn)練而成辟汰,包含分詞、詞性標(biāo)注阱佛、實體識別等功能帖汞,同時支持自定義詞典,可以訓(xùn)練自己的模型凑术,可以進行批量處理翩蘸。
使用方法如下:
import fool
string = '這個把手該換了,我不喜歡日本和服淮逊,別把手放在我的肩膀上催首,工信處女干事每月經(jīng)過下屬科室都要親口交代24口交換機等技術(shù)性器件的安裝工作'
result = fool.cut(string)
print(result)
運行結(jié)果:
[['這個', '把手', '該', '換', '了', ',', '我', '不', '喜歡', '日本', '和服', '泄鹏,', '別', '把', '手', '放', '在', '我', '的', '肩膀', '上', '郎任,', '工信處', '女', '干事', '每月', '經(jīng)過', '下屬', '科室', '都', '要', '親', '口', '交代', '24', '口', '交換機', '等', '技術(shù)性', '器件', '的', '安裝', '工作']]
可以看到這個分詞效果還是不錯的。
另外還可以進行詞性標(biāo)注备籽,實體識別:
result = fool.pos_cut(string)
print(result)
_, ners = fool.analysis(string)
print(ners)
運行結(jié)果:
[[('這個', '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)過', 'p'), ('下屬', 'v'), ('科室', 'n'), ('都', 'd'), ('要', 'v'), ('親', 'a'), ('口', 'n'), ('交代', 'v'), ('24', 'm'), ('口', 'q'), ('交換機', 'n'), ('等', 'udeng'), ('技術(shù)性', 'n'), ('器件', 'n'), ('的', 'ude'), ('安裝', 'n'), ('工作', 'n')]]
[[(12, 15, 'location', '日本')]]
6. LTP
語言技術(shù)平臺(Language Technology Platform霉猛,LTP)是哈工大社會計算與信息檢索研究中心歷時十年開發(fā)的一整套中文語言處理系統(tǒng)尺锚。LTP制定了基于XML的語言處理結(jié)果表示,并在此基礎(chǔ)上提供了一整套自底向上的豐富而且高效的中文語言處理模塊(包括詞法韩脏、句法缩麸、語義等6項中文處理核心技術(shù)),以及基于動態(tài)鏈接庫(Dynamic Link Library, DLL)的應(yīng)用程序接口赡矢、可視化工具杭朱,并且能夠以網(wǎng)絡(luò)服務(wù)(Web Service)的形式進行使用。
LTP 有 Python 版本吹散,GitHub地址:https://github.com/HIT-SCIR/pyltp弧械,另外運行的時候需要下載模型,模型還比較大空民,下載地址:http://ltp.ai/download.html刃唐。
示例代碼如下:
from pyltp import Segmentor
string = '這個把手該換了,我不喜歡日本和服界轩,別把手放在我的肩膀上画饥,工信處女干事每月經(jīng)過下屬科室都要親口交代24口交換機等技術(shù)性器件的安裝工作'
segmentor = Segmentor()
segmentor.load('./cws.model')
result = list(segmentor.segment(string))
segmentor.release()
print(result)
運行結(jié)果:
41 這個/把手/該/換/了/,/我/不/喜歡/日本/和服/浊猾,/別/把/手/放在/我/的/肩膀/上/抖甘,/工信/處女/干事/每月/經(jīng)過/下屬/科室/都/要/親口/交代/24/口/交換機/等/技術(shù)性/器件/的/安裝/工作
可以發(fā)現(xiàn) 工信處、女干事 沒有正確分開葫慎。
以上便是一些分詞庫的基本使用衔彻,個人比較推薦的有 jieba、THULAC偷办、FoolNLTK艰额。
參考來源
http://m635674608.iteye.com/blog/2298833
http://blog.csdn.net/flysky1991/article/details/73948971
小結(jié)
我在博客中的每篇文章都是我一字一句敲出來的,轉(zhuǎn)載的文章我也注明了出處椒涯,表示對原作者的尊重柄沮。同時也希望大家都能尊重我的付出。
最后废岂,也希望大家關(guān)注我的個人博客HD Blog
謝謝~