天天看點

使用jieba子產品進行自然語言處理并制作詞雲

需要使用python的jieba子產品,安裝可以使用pip install jieba

關于jieba,支援三種分詞模式:

精确模式,試圖将句子最精确地切開,适合文本分析;

全模式,把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義;

搜尋引擎模式,在精确模式的基礎上,對長詞再次切分,提高召回率,适合用于搜尋引擎分詞。

支援繁體分詞

支援自定義詞典

1。三種模式

import jieba
sen = '今天來到了北京天安門看追風筝的人'
words1 = jieba.cut_for_search(sen)#搜尋引擎模式,false為精準模式,預設為全模式
words2 = jieba.cut(sen,cut_all=False)#精準模式
words3 = jieba.cut(sen,cut_all=True)#預設模式,全模式
words4 = jieba.cut(sen)#預設模式
for i in words1:
    print(i)
print('........')
for i in words2:
    print(i)
print('........')
for i in words3:
    print(i)
print('........')
for i in words4:
    print(i)
           

輸出結果如下,對比分析,預設模式是全模式,全模式将所有可能成為的詞均拆分,搜尋引擎模式在精準模式的基礎上再對詞進行細化。:

今天
來到
了
北京
天安
天安門
看
追
風筝
的
人
........
今天
來到
了
北京
天安門
看
追
風筝
的
人
........
今天
來到
了
北京
天安
天安門
看
追風
風筝
的
人
........
今天
來到
了
北京
天安門
看
追
風筝
的
人

           

2。詞性

import jieba.posseg
sen = '今天來到了北京天安門看追風筝的人'
words4 = jieba.posseg.cut(sen)#預設模式
for i in words4:
    print(i.word+' '+i.flag)#獲得詞+詞性
           

結果:

今天 t
來到 v
了 ul
北京 ns
天安門 ns
看 v
追 v
風筝 n
的 uj
人 n
           

各個詞性字母的含義可以參考:jieba詞性表

可以使用

jieba.load_userdict('[檔案詞目錄]')

加載字典

使用

jieba.analyse.extract_tags()

擷取詞頻,如:

爬取豐乳肥臀這本書,進行分析其詞頻

text_path = open('/Users/wangxingfan/Desktop/1.txt').read()
tag = jieba.analyse.extract_tags(text_path,)
print(tag)
           

結果:

['上官', '母親', '司馬', '金童', '來弟', '一樣', '啞巴', '地說', '一個', '女人', '乳房', '鳥兒', '我們', '呂氏', '大姐', '起來', '看到', '娜塔莎', '他們', '身體']
           

3。詞雲

使用urllib庫爬取莫言老師作品《豐乳肥臀》并制作詞雲。

#-*- coding:utf-8 -*-
#author:M10
import urllib.request
import re
import time
import random
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import jieba.analyse
header = {
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'
}
path = open('/Users/wangxingfan/Desktop/1.txt', 'wb')
for j in range(,):
    url = 'http://t.icesmall.cn/book/3/424/'+str(j)+'.html'
    request = urllib.request.Request(url,headers=header)
    data = urllib.request.urlopen(request).read().decode('utf-8','ignore')
    pat = '<p><p>(.*?)</p> </div>'
    text = re.findall(pat,data)
    try:
        zi = text[].split('</p><p></p><p>')
    except:
        pass
    for i in range(,len(zi)):
        path.write(zi[i].encode('utf-8'))
    time.sleep(random.randint(,))
path.close()

#詞雲
text_path = open('/Users/wangxingfan/Desktop/1.txt').read()
wordlist_after_jieba = jieba.cut(text_path)#使用預設的精準模式
wl_space_split = " ".join(wordlist_after_jieba)

cloud = WordCloud(
        #設定字型,不指定就會出現亂碼
        font_path=r'/Library/Fonts/Songti.ttf',
        #允許最大詞彙
        max_words=,
        #最大号字型
        max_font_size=
    )
my_wordcloud = WordCloud().generate(wl_space_split)
plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()
           

結果出現中文不能顯示,查找問題得知:使用中文詞庫作為參數添加到font_path即可。