結(jié)巴分詞
就是前面說的中文分詞,這里需要介紹的是一個(gè)分詞效果較好,使用起來像但方便的Python模塊:結(jié)巴。
結(jié)巴中文分詞采用的算法
-
基于Trie樹結(jié)構(gòu)實(shí)現(xiàn)高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構(gòu)成的有向無環(huán)圖(DAG)
-
采用了動態(tài)規(guī)劃查找最大概率路徑, 找出基于詞頻的最大切分組合
-
對于未登錄詞,采用了基于漢字成詞能力的HMM模型,使用了Viterbi算法
結(jié)巴中文分詞支持的分詞模式
目前結(jié)巴分詞支持三種分詞模式:
使用方法如下:
# -*- coding:utf-8 -*-import jiebatext = '我來到北京清華大學(xué)'
default_mode = jieba.cut(text)full_mode = jieba.cut(text,cut_all=True)search_mode = jieba.cut_for_search(text)print("精確模式:","/".join(default_mode))print("全模式:","/".join(full_mode))print("搜索引擎模式:","/".join(search_mode))
返回的數(shù)據(jù)如下:
上述代碼解釋:
-
cut方法接受兩個(gè)輸入?yún)?shù): 1) 第一個(gè)參數(shù)為需要分詞的字符串 2)cut_all參數(shù)用來控制是否采用全模式,默認(rèn)不采用。
-
cut_for_search方法接受一個(gè)參數(shù):需要分詞的字符串,該方法適合用于搜索引擎構(gòu)建倒排索引的分詞,粒度比較細(xì)
-
注意:待分詞的字符串可以是gbk字符串、utf-8字符串或者unicode
-
cut以及jieba.cut_for_search返回的結(jié)構(gòu)都是一個(gè)可迭代的generator,可以使用for循環(huán)來獲得分詞后得到的每一個(gè)詞語(unicode),也可以用list(jieba.cut(…))轉(zhuǎn)化為list
結(jié)巴中文分詞的其他功能
1、添加或管理自定義詞典
結(jié)巴的所有字典內(nèi)容存放在dict.txt,你可以不斷的完善dict.txt中的內(nèi)容。
2、關(guān)鍵詞抽取
通過計(jì)算分詞后的關(guān)鍵詞的TF/IDF權(quán)重,來抽取重點(diǎn)關(guān)鍵詞。
具體示例:
# -*- coding:utf-8 -*-import jieba.analyse
text = "結(jié)巴中文分詞模塊是一個(gè)非常好的Python分詞組件"tags = jieba.analyse.extract_tags(text,2)print("關(guān)鍵詞抽取:","/".join(tags))
更多信息請查看:https://github.com/fxsjy/jieba/
北大pkuseg
pkuseg簡介
pkuseg是由北京大學(xué)語言計(jì)算與機(jī)器學(xué)習(xí)研究組研制推出的一套全新的中文分詞工具包。pkuseg具有如下幾個(gè)特點(diǎn):
-
多領(lǐng)域分詞。不同于以往的通用中文分詞工具,此工具包同時(shí)致力于為不同領(lǐng)域的數(shù)據(jù)提供個(gè)性化的預(yù)訓(xùn)練模型。根據(jù)待分詞文本的領(lǐng)域特點(diǎn),用戶可以自由地選擇不同的模型。我們目前支持了新聞領(lǐng)域,網(wǎng)絡(luò)領(lǐng)域,醫(yī)藥領(lǐng)域,旅游領(lǐng)域,以及混合領(lǐng)域的分詞預(yù)訓(xùn)練模型。在使用中,如果用戶明確待分詞的領(lǐng)域,可加載對應(yīng)的模型進(jìn)行分詞。如果用戶無法確定具體領(lǐng)域,推薦使用在混合領(lǐng)域上訓(xùn)練的通用模型。各領(lǐng)域分詞樣例可參考txt。
-
更高的分詞準(zhǔn)確率。相比于其他的分詞工具包,當(dāng)使用相同的訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù),pkuseg可以取得更高的分詞準(zhǔn)確率。
-
支持用戶自訓(xùn)練模型。支持用戶使用全新的標(biāo)注數(shù)據(jù)進(jìn)行訓(xùn)練。
-
支持詞性標(biāo)注。
相關(guān)測試結(jié)果:
| MSRA | Precision | Recall | F-score |
| jieba | 87.01 | 89.88 | 88.42 |
| THULAC | 95.60 | 95.91 | 95.71 |
| pkuseg | 96.94 | 96.81 | 96.88 |
| WEIBO | Precision | Recall | F-score |
| jieba | 87.79 | 87.54 | 87.66 |
| THULAC | 93.40 | 92.40 | 92.87 |
| pkuseg | 93.78 | 94.65 | 94.21 |
| Default | MSRA | CTB8 | PKU | WEIBO | All Average |
| jieba | 81.45 | 79.58 | 81.83 | 83.56 | 81.61 |
| THULAC | 85.55 | 87.84 | 92.29 | 86.65 | 88.08 |
| pkuseg | 87.29 | 91.77 | 92.68 | 93.43 | 91.29 |
pkuseg的使用
1、使用默認(rèn)配置進(jìn)行配置
import pkuseg
seg = pkuseg.pkuseg() # 以默認(rèn)配置加載模型text = seg.cut('我愛北京天安門') # 進(jìn)行分詞print(text)
2、使用細(xì)分領(lǐng)域分詞(如果用戶明確分詞領(lǐng)域,推薦使用細(xì)領(lǐng)域模型分詞)
import pkuseg
seg = pkuseg.pkuseg(model_name='medicine') # 程序會自動下載所對應(yīng)的細(xì)領(lǐng)域模型text = seg.cut('我愛北京天安門') # 進(jìn)行分詞print(text)
3、分詞同時(shí)進(jìn)行詞性標(biāo)注,各詞性標(biāo)簽的詳細(xì)含義可參考 tags.txt
import pkuseg
seg = pkuseg.pkuseg(postag=True) # 開啟詞性標(biāo)注功能text = seg.cut('我愛北京天安門') # 進(jìn)行分詞和詞性標(biāo)注print(text)
4、對文件分詞
import pkuseg
# 對input.txt的文件分詞輸出到output.txt中# 開8個(gè)進(jìn)程pkuseg.test('input.txt', 'output.txt', nthread=8)
5、額外使用用戶自定義詞典
import pkuseg
seg = pkuseg.pkuseg(user_dict='my_dict.txt') # 給定用戶詞典為當(dāng)前目錄下的"my_dict.txt"text = seg.cut('我愛北京天安門') print(text)
模型配置:
pkuseg.pkuseg(model_name = "default", user_dict = "default", postag = False) model_name 模型路徑。 "default",默認(rèn)參數(shù),表示使用我們預(yù)訓(xùn)練好的混合領(lǐng)域模型(僅對pip下載的用戶)。 "news", 使用新聞領(lǐng)域模型。 "web", 使用網(wǎng)絡(luò)領(lǐng)域模型。 "medicine", 使用醫(yī)藥領(lǐng)域模型。 "tourism", 使用旅游領(lǐng)域模型。 model_path, 從用戶指定路徑加載模型。 user_dict 設(shè)置用戶詞典。 "default", 默認(rèn)參數(shù),使用我們提供的詞典。 None, 不使用詞典。 dict_path, 在使用默認(rèn)詞典的同時(shí)會額外使用用戶自定義詞典,可以填自己的用戶詞典的路徑,詞典格式為一行一個(gè)詞。 postag 是否進(jìn)行詞性分析。 False, 默認(rèn)參數(shù),只進(jìn)行分詞,不進(jìn)行詞性標(biāo)注。 True, 會在分詞的同時(shí)進(jìn)行詞性標(biāo)注。
對文件進(jìn)行分詞:
pkuseg.test(readFile, outputFile, model_name = "default", user_dict = "default", postag = False, nthread = 10) readFile 輸入文件路徑。 outputFile 輸出文件路徑。 model_name 模型路徑。同pkuseg.pkuseg user_dict 設(shè)置用戶詞典。同pkuseg.pkuseg postag 設(shè)置是否開啟詞性分析功能。同pkuseg.pkuseg nthread 測試時(shí)開的進(jìn)程數(shù)。
模型訓(xùn)練:
pkuseg.train(trainFile, testFile, savedir, train_iter = 20, init_model = None) trainFile 訓(xùn)練文件路徑。 testFile 測試文件路徑。 savedir 訓(xùn)練模型的保存路徑。 train_iter 訓(xùn)練輪數(shù)。 init_model 初始化模型,默認(rèn)為None表示使用默認(rèn)初始化,用戶可以填自己想要初始化的模型的路徑如init_model='./models/'。
pkuseg實(shí)戰(zhàn)
使用pkuseg 分詞+使用wordcloud顯示詞云:
import pkusegfrom collections import Counterimport pprintfrom wordcloud import WordCloudimport matplotlib.pyplot as plt
with open("data/santisanbuqu_liucixin.txt", encoding="utf-8") as f: content = f.read()
with open("data/CNENstopwords.txt", encoding="utf-8") as f: stopwords = f.read()
lexicon = ['章北海', '汪淼', '葉文潔']seg = pkuseg.pkuseg(user_dict=lexicon)text = seg.cut(content)
new_text = []for w in text: if w not in stopwords: new_text.append(w)counter = Counter(new_text)pprint.pprint(counter.most_common(50))
cut_text = " ".join(new_text)
wordcloud = WordCloud(font_path="font/FZYingXueJW.TTF", background_color="white", width=800, height=600).generate( cut_text)
plt.imshow(wordcloud, interpolation="bilinear")plt.axis("off")plt.show()
參考鏈接:https://github.com/lancopku/pkuseg-python
?
總結(jié)
以上是生活随笔為你收集整理的Python自然语言处理工具包推荐的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。