結巴分詞(自然語言處理之中文分詞器)
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 數據准備
文檔:
死了都要愛
不淋漓盡致不痛快
感情多深只有這樣
才足夠表白
死了都要愛
不哭到微笑不痛快
宇宙毀滅心還在
把每天當成是末日來相愛
一分一秒都美到淚水掉下來
不理會別人是看好或看壞
只要你勇敢跟我來
愛不用刻意安排
憑感覺去親吻相擁就會很愉快
享受現在別一開懷就怕受傷害
許多奇跡我們相信才會存在
死了都要愛
不淋漓盡致不痛快
感情多深只有這樣才足夠表白
死了都要愛
不哭到微笑不痛快
宇宙毀滅心還在
窮途末路都要愛
不極度浪漫不痛快
發會雪白土會掩埋
思念不腐壞
到絕路都要愛
不天荒地老不痛快
不怕熱愛變火海
愛到沸騰才精采
Dream it possible I will run, I will climb, I will soar. I'm undefeated Jumping out of my skin, pull the chord Yeah I believe it The past, is everything we were don't make us who we are so I'll dream, until I make it real, and all I see is stars It's not until you fall that you fly When you dreams come alive you're unstoppable take a shot, chase the sun, find the beautiful We will glow in the dark turning dust to gold And we'll dream it possible I will chase, I will reach, I will fly Until I'm breaking, until I'm breaking Out of my cage, like a bird in the night I know I'm changing, I know I'm changing In,into something big, better than before And if it takes, takes a thousand lives Then it's worth fighting for
圖片:(紅心.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()
圖片一(未分詞):

圖片二(分詞效果)


推薦文章
https://blog.csdn.net/gzmfxy/article/details/78994396
