python 結巴分詞學習
阿新 • • 發佈:2019-01-07
結巴分詞(自然語言處理之中文分詞器)
jieba分詞演算法使用了基於字首詞典實現高效的詞圖掃描,生成句子中漢字所有可能生成詞情況所構成的有向無環圖(DAG), 再採用了動態規劃查詢最大概率路徑,找出基於詞頻的最大切分組合,對於未登入詞,採用了基於漢字成詞能力的HMM模型,使用了Viterbi演算法。
jieba分詞支援三種分詞模式:
1. 精確模式, 試圖將句子最精確地切開,適合文字分析:
2. 全模式,把句子中所有的可以成詞的詞語都掃描出來,速度非常快,但是不能解決歧義;
3. 搜尋引擎模式,在精確模式的基礎上,對長詞再詞切分,提高召回率,適合用於搜尋引擎分詞。
一 結巴分詞的安裝
pip3 install jieba
二 結巴分詞的主要功能
1. jieba.cut:該方法接受三個輸入引數: 引數1:需要分詞的字串; 引數2:cut_all引數用來控制是否採用全模式,預設為精確模式; cut_all=True 全模式 cut_all=false 精確(預設)模式 引數3:HMM引數用來控制是否適用HMM模型
2. jieba.cut_for_search:該方法接受兩個引數: 引數1:需要分詞的字串; 引數2:是否使用HMM模型, 該方法適用於搜尋引擎構建倒排索引的分詞,粒度比較細。
3. jieba.cut 以及jieba.cut_for_search 返回的結構都是可以得到的generator(生成器)
4. jieb.lcut 以及 jieba.lcut_for_search 直接返回list
5.jieba.Tokenizer(dictionary=DEFUALT_DICT) 新建自定義分詞器, 可用於同時使用不同字典, jieba.dt為預設分詞器,所有全域性分詞相關函式都是該分詞器的對映。
三 結巴分詞的三種模式
import jieba text='趙麗穎主演的正午陽光劇,知否知否應是綠肥紅瘦'
1 全模式 cut_all=True
seq_list=jieba.cut(text,cut_all=True) print(seq_list) #<generator object Tokenizer.cut at 0x0000026EB6F0CD58> print(list(seq_list)) ''' ['趙', '麗', '穎', '主演', '的', '正午', '陽光', '劇', '', '', '知', '否', '知', '否', '應', '是', '綠肥', '綠肥紅瘦'] '''
2 精確模式 (預設模式) cut_all =False
# 02精確模式 seq_list=jieba.cut(text,cut_all=False) print(list(seq_list)) ''' ['趙麗穎', '主演', '的', '正午', '陽光', '劇', ',', '知否', '知否', '應', '是', '綠肥紅瘦'] '''
3 搜尋引擎模式 cut_for_search
seq_list=jieba.cut_for_search(text,) print(list(seq_list)) ''' ['趙麗穎', '主演', '的', '正午', '陽光', '劇', ',', '知否', '知否', '應', '是', '綠肥', '綠肥紅瘦'] '''
四 自定義分詞器(jieba.Tokenizer)
1 建立詞典內容的格式
一個詞語佔一行(分三部分) 格式: 詞語 詞頻 詞性 如:張三 5 李四 10 eng
2 自定義詞典的匯入(load_userdict)
text='趙麗穎主演的正午陽光劇,知否知否應是綠肥紅瘦'
# 自定義詞典 jieba.load_userdict('自定義詞典.txt') sep_list=jieba.lcut(text) print('userdict>>>',sep_list)
userdict>>> ['趙麗穎', '主演', '的', '正午', '陽光劇', ',', '知否', '知否', '應是', '綠肥紅瘦']
五 利用jieba 進行關鍵詞的抽取
1 基於TF-IDF演算法的關鍵詞抽取
2 python 實現關鍵提取
jieba.analyse.extract_tags(text,topK=20,withWeight=False,allowPOS=()) ''' text:為待提取的文字; topK:返回幾個TF/IDF權重最大的關鍵字,預設值為20; withWeight:是否一併返回關鍵詞權重值,預設False; ''' jieba.analyse.TFIDF(idf_path=None) #新建tf-idf例項,idf_path為IDF例項
五 使用結巴的詞雲實例
1 資料準備
文件:
死了都要愛.txt
dream ispossible.txt
圖片:(紅心.jpg)
# 資料獲取 with open('死了都要愛.txt','r',encoding='utf8')as f: text=f.read() # with open('dream is possible.txt','r',encoding='utf8')as f: # text=f.read() #圖片獲取 mask=np.array(Image.open('紅心.jpg'))
2 資料清洗
遮蔽不需要的資料和分詞
# 資料清洗 # 遮蔽死了都要愛 STOPWORDS.add('死了都要愛')
sep_list=jieba.lcut(text,cut_all=False) sep_list=" ".join(sep_list) #轉為字串
自定義畫布
wc=WordCloud( font_path=font,#使用的字型庫 margin=2, mask=mask,#背景圖片 background_color='white', #背景顏色 max_font_size=25, max_words=200, stopwords=STOPWORDS, #遮蔽的內容 )
生成詞語,儲存圖片
wc.generate(text) #製作詞雲 wc.to_file('新增圖片.jpg') #儲存到當地檔案
3 資料展示
plt.imshow(wc,interpolation='bilinear') plt.axis('off') plt.show()
完整程式碼和效果展示
from wordcloud import WordCloud import matplotlib.pyplot as plt import numpy as np from PIL import Image import jieba # 資料獲取 with open('死了都要愛.txt','r',encoding='utf8')as f: text=f.read() # with open('dream is possible.txt','r',encoding='utf8')as f: # text=f.read() #圖片獲取 mask=np.array(Image.open('關羽.jpg')) # 資料清洗 # 遮蔽死了都要愛 # STOPWORDS.add('死了都要愛') font=r'C:\Windows\Fonts\simhei.ttf' sep_list=jieba.lcut(text,cut_all=False) sep_list=" ".join(sep_list) wc=WordCloud( font_path=font,#使用的字型庫 margin=2, mask=mask,#背景圖片 background_color='white', #背景顏色 max_font_size=200, # min_font_size=1, max_words=200, # stopwords=STOPWORDS, #遮蔽的內容 ) wc.generate(sep_list) #製作詞雲 wc.to_file('關羽新增.jpg') #儲存到當地檔案 # 圖片展示 plt.imshow(wc,interpolation='bilinear') plt.axis('off') plt.show()
圖片一(未分詞):
圖片二(分詞效果)