一、jieba 庫簡介
(1) jieba 庫的分詞原理是利用一個中文詞庫,將待分詞的內容與分詞詞庫進行比對,通過圖結構和動態規划方法找到最大概率的詞組;除此之外,jieba 庫還提供了增加自定義中文單詞的功能。
(2) jieba 庫支持3種分詞模式:
精確模式:將句子最精確地切開,適合文本分析。
全模式:將句子中所以可以成詞的詞語都掃描出來,速度非常快,但是不能消除歧義。
搜索引擎模式:在精確模式的基礎上,對長分詞再次切分,提高召回率,適合搜索引擎分詞。
二、安裝庫函數
(1) 在命令行下輸入指令:
現在我們來用jieba庫統計一篇文章的詞頻,課本是統計三國演義,我們來統計一下名偵探柯南里面的主要人物
廢話不多說,直接上代碼
# -*- coding:utf-8 -*- from jieba import * def Replace(text,old,new): #替換列表的字符串 for char in old: text = text.replace(char,new) return text def getText(filename): #讀取文件內容(utf-8 編碼格式) #特殊符號和部分無意義的詞 sign = '''!~·@¥……*“”‘’\n(){}【】;:"'「,」。-、?''' txt = open('{}.txt'.format(filename),encoding='utf-8').read() return Replace(txt,sign," ") def word_count(passage,N): #計算passage文件中的詞頻數,並將前N個輸出 words = lcut(passage) #精確模式分詞形式 counts = {} #創建計數器 --- 字典類型 for word in words: #消除同意義的詞和遍歷計數 if word == '小五' or word == '小五郎' or word == '五郎': rword = '毛利' elif word == '柯' or word == '南': rword = '柯南' elif word == '小' or word == '蘭': rword = '小蘭' elif word == '目' or word == '暮' or word == '警官': rword = '暮目' else: rword = word counts[rword] = counts.get(rword,0) + 1 excludes = lcut_for_search("你我事他和她在這也有什么的是就吧啊嗎哦呢都了一個") for word in excludes: #除去意義不大的詞語 del(counts[word]) items = list(counts.items()) #轉換成列表形式 items.sort(key = lambda x : x[1], reverse = True ) #按次數排序 for i in range(N): #依次輸出 word,count = items[i] print("{:<7}{:>6}".format(word,count)) if __name__ == '__main__': passage = getText('Detective_Novel') #輸入文件名稱讀入文件內容 word_count(passage,20) #調用函數得到詞頻數
注:代碼使用的文檔 >>> Detective_Novel(utf-8).zip [點擊下載],也可自行找 utf-8 編碼格式的txt文件。
結果如下:
高逼格一點的雲圖,我們用jieba和wordcloud 庫一起,代碼如下:
# -*- coding:utf-8 -*- from wordcloud import WordCloud import matplotlib.pyplot as plt import numpy as np from PIL import Image from jieba import * def Replace(text,old,new): #替換列表的字符串 for char in old: text = text.replace(char,new) return text def getText(filename): #讀取文件內容(utf-8 編碼格式) #特殊符號和部分無意義的詞 sign = '''!~·@¥……*“”‘’\n(){}【】;:"'「,」。-、?''' txt = open('{}.txt'.format(filename),encoding='utf-8').read() return Replace(txt,sign," ") def creat_word_cloud(filename): #將filename 文件的詞語按出現次數輸出為詞雲圖 text = getText(filename) #讀取文件 wordlist = lcut(text) #jieba庫精確模式分詞 wl = ' '.join(wordlist) #生成新的字符串 #設置詞雲圖 font = r'C:\Windows\Fonts\simfang.ttf' #設置字體路徑 wc = WordCloud( background_color = 'black', #背景顏色 max_words = 2000, #設置最大顯示的詞雲數 font_path = font, #設置字體形式(在本機系統中) height = 1200, #圖片高度 width = 1600, #圖片寬度 max_font_size = 100, #字體最大值 random_state = 100, #配色方案的種類 ) myword = wc.generate(wl) #生成詞雲 #展示詞雲圖 plt.imshow(myword) plt.axis('off') plt.show() #以原本的filename命名保存詞雲圖 wc.to_file('{}.png'.format(filename)) if __name__ == '__main__': creat_word_cloud('Detective_Novel') #輸入文件名生成詞雲圖
結果如下:
這樣就搞定了~~~~