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))
'''
['趙', '麗', '穎', '主演', '的', '正午', '陽光', '劇', '', '', '知', '否', '知', '否', '應', '是', '綠肥', '綠肥紅瘦']
'''

 

 精確模式 (默認模式) 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 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
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()
完整代碼

 

圖片一(未分詞):

 

 

 圖片二(分詞效果)

 推薦文章

https://blog.csdn.net/gzmfxy/article/details/78994396

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM