1. 程式人生 > >python 結巴分詞學習

python 結巴分詞學習

結巴分詞(自然語言處理之中文分詞器)

  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演算法的關鍵詞抽取

  詳解自然語言處理之TF-IDF模型和python實現

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()

複製程式碼

 

圖片一(未分詞):

 

 

 圖片二(分詞效果)

鄭州正規不孕不育醫院

鄭州專業婦科醫院

鄭州專業婦科醫院

鄭州人流醫院