需要使用到的兩個Python類庫
jieba:中文分詞分詞工具
wordcloud:Python下的詞雲生成工具
jieba 類庫使用介紹
支持三種分詞模式:
- 精確模式,試圖將句子最精確地切開,適合文本分析;
- 全模式,把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義;
- 搜索引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜索引擎分詞。
可以在pychar的 file 》 settings 》 project:work_python 》 project interpreter 中安裝jieba,如下圖:
也可以從網站下載半自動安裝,先下載 http://pypi.python.org/pypi/jieba/ ,解壓後運行 python setup.py install
功能介紹
1、分詞
- jieba.cut 方法接受三個輸入參數: 需要分詞的字符串;cut_all 參數用來控制是否採用全模式;HMM 參數用來控制是否使用 HMM 模型
- jieba.cut_for_search 方法接受兩個參數:需要分詞的字符串;是否使用 HMM 模型。該方法適合用於搜索引擎構建倒排索引的分詞,粒度比較細
# encoding=utf-8
import jieba
s_list = jieba.cut("我叫孫宇晨,來自廣東廣州!",cut_all=True)
print("內容(全模式):"+"/".join(s_list))
s_list = jieba.cut("我叫孫宇晨,來自廣東廣州!",cut_all=False)
print("內容(精準模式):"+"/".join(s_list))
s_list = jieba.cut("我叫孫宇晨,來自廣東廣州!")
print("內容(模式是精準模式):"+"/".join(s_list))
s_list=jieba.cut_for_search("我是孫宇晨,網傳百萬男孩,畢業於湖南科學院計算機")
print("內容(cut_for_search):"+"/".join(s_list))
輸出結果:
內容(全模式):我/叫/孫/宇/晨///來自/廣東/廣州//!
內容(精準模式):我/叫/孫宇晨/,/來自/廣東/廣州/!
內容(模式是精準模式):我/叫/孫宇晨/,/來自/廣東/廣州/!
內容(cut_for_search):我/是/孫宇晨/,/網傳/百萬/男孩/,/畢業/於/湖南/科學/學院/科學院/計算/算機/計算機
2、添加自定義詞典
開發者可以指定自己自定義的詞典,以便擴充 jieba 詞庫裏沒有的詞。自行添加新詞可以保證更加符合項目的業務需求。
用法:
jieba.load_userdict(file_name) # file_name 爲文件類對象或自定義詞典的路徑
詞典格式和 dict.txt 一樣,一個詞佔一行;每一行分三部分:詞語、詞頻(可省略)、詞性(可省略),用空格隔開,順序不可顛倒。file_name 若爲路徑或二進制方式打開的文件,則文件必須爲 UTF-8 編碼。
詞頻省略時使用自動計算的能保證分出該詞的詞頻。
例如:dict.txt文件內容
機器學習 3 i
雲計算 5 r
常山趙子龍 6
河北上將
我叫孫宇晨 5 v
來自廣東
運行代碼
#自定義字典文件
jieba.load_userdict("dict.txt")
s_list = jieba.cut("我叫孫宇晨,來自廣東廣州!")
print("內容(自定義詞典):"+"/".join(s_list))
運行結果:
內容(自定義詞典):我叫孫宇晨/,/來自廣東/廣州/!
修改默認詞典內容
-
jieba.
suggest_freq(segment, tune=True)
可調節單個詞語的詞頻,使其能(或不能)被分出來。 -
注意:自動計算的詞頻在使用 HMM 新詞發現功能時可能無效。
#將“廣州”分詞爲”廣“和”州“兩個詞
jieba.suggest_freq(('廣','州'),True)
s_list = jieba.cut("我叫孫宇晨,來自廣東廣州!",HMM=False)
print("內容(分離):"+"/".join(s_list))
#將“廣東”和 “廣” 合併成爲“廣東廣”這個詞
jieba.suggest_freq('廣東廣', True)
s_list = jieba.cut("我叫孫宇晨,來自廣東廣州!",HMM=False)
print("內容(合併):"+"/".join(s_list))
運行結果:
內容(分離):我叫孫宇晨/,/來自廣東/廣/州/!
內容(合併):我叫孫宇晨/,/來自/廣東廣/州/!
3、詞性標註
jieba.posseg
新建自定義分詞器,可以查詢每個詞對應的詞性
實例代碼:
#查看默認詞性,和自己設定詞典的詞性
import jieba.posseg as pseg
words = pseg.cut("我叫孫宇晨,來自廣東廣州!機器學習雲計算常山趙子龍河北上將",HMM=False)
for word,index in words:
print(' 詞性:',word," \t ",index)
運行結果:
詞性: 我叫孫宇晨 n
詞性: , x
詞性: 來自 v
詞性: 廣東廣 x
詞性: 州 n
詞性: ! x
詞性: 機器學習 i
詞性: 雲計算 d
詞性: 常山趙子龍 x
詞性: 河北上將 x
4、獲取詞的起始位置
jieba.Tokenize:返回詞語在原文的起止位置
示例代碼:
tk_list=jieba.tokenize(u'我叫孫宇晨,來自廣東廣州!機器學習雲計算常山趙子龍河北上將')
for tk in tk_list:
print("內容:",tk[0],"\tstart:",tk[1],"\tend:",tk[2])
運行結果:
內容: 我叫孫宇晨 start: 0 end: 5
內容: , start: 5 end: 6
內容: 來自 start: 6 end: 8
內容: 廣東廣 start: 8 end: 11
內容: 州 start: 11 end: 12
內容: ! start: 12 end: 13
內容: 機器學習 start: 13 end: 17
內容: 雲計算 start: 17 end: 20
內容: 常山趙子龍 start: 20 end: 25
內容: 河北上將 start: 25 end: 29
wordcloud類庫使用介紹
首先來一個最簡單的用法
wordcloud.WordCloud() #調出對象
w.generate() #向WordCloud對象中加載文本txt
w.to_file(filename) #將詞雲輸出爲圖像文件,.png或.jpg格式
示例代碼:
import wordcloud
w=wordcloud.WordCloud()
w.generate("hello world")
w.to_file("helloworld.png")
輸出結果:
wordcloud如何將文本轉化爲詞雲
- 1.分隔:以空格分隔單詞
- 2.統計:單詞出現次數並過濾
- 3.字體:根據統計配置字號
- 4.佈局:顏色環境尺寸
下面爲常用參數設置,可以多個參數設置在同一個WordCloud對象中,以“,”分隔
w=wordcloud.WordCloud(width=600) #指定詞雲對象生成圖片的寬度,默認400像素
w=wordcloud.WordCloud(height=400) #指定詞雲對象生成圖片的高度,默認200像素
w=wordcloud.WordCloud(min_font_size=10) #指定詞雲中字體的最小字號,默認4號
w=wordcloud.WordCloud(max_font_size=20) #指定詞雲中字體的最大字號,根據高度自動調節
w=wordcloud.WordCloud(font_step=2) #指定詞雲中字體字號的步進間隔,默認爲1
w=wordcloud.WordCloud(font_path="msyh.ttc") #指定文體文件的路徑,默認None
w=wordcloud.WordCloud(max_words=20) #指定詞雲顯示的最大單詞數量,默認200
w=wordcloud.WordCloud(stop_words="Python") #指定詞雲的排除詞列表,即不顯示的單詞列表
w=wordcloud.WordCloud(background_color="white") #指定詞雲圖片的背景顏色,默認爲黑色
新增參數的例子:
w=wordcloud.WordCloud(width=400,
height=300,
min_font_size=10,
max_font_size=200,
font_step=2,
background_color="yellow"
)
w.generate("hello world hello hello python")
w.to_file("helloworld.png")
運行結果:
wordcloud結合jieba類庫綜合使用
wordcloud負責數據展示,jieba負責數據處理,分工明確。
首先來一個簡單的綜合例子:
需求:實現將一段文字分詞後,繪製詞雲圖。內容爲:Python是一種跨平臺的計算機程序設計語言。是一種面向對象的動態類型語言,最初被設計用於編寫自動化腳本(shell),隨着版本的不斷更新和語言新功能的添加,越多被用於獨立的、大型項目的開發。
實現如下:
import jieba
import wordcloud
txt="Python是一種跨平臺的計算機程序設計語言。是一種面向對象的動態類型語言,
最初被設計用於編寫自動化腳本(shell),隨着版本的不斷更新和語言新功能的添加,
越多被用於獨立的、大型項目的開發。"
w=wordcloud.WordCloud(width=850,
height=600,
background_color="#33ffcc",
font_path="water.ttf"
)
w.generate(" ".join(jieba.cut(txt)))
print(" ".join(jieba.cut(txt)))
w.to_file("python.png")
運行結果:
設置圖片形狀顯示
ImageColorGenerator和recolor
案例代碼:
import jieba
import wordcloud
import numpy as np
from os import path
from PIL import Image
from wordcloud import WordCloud, ImageColorGenerator
txt="Python是一種跨平臺的計算機程序設計語言。是一種面向對象的動態類型語言," \
"最初被設計用於編寫自動化腳本(shell),隨着版本的不斷更新和語言新功能的添加," \
"越多被用於獨立的、大型項目的開發。"
d = path.dirname(__file__)
#拿我的頭像作爲背景圖片
back_coloring=np.array(Image.open(path.join(d,"黑白調小女孩.jpg")))
#設置中文字符集和圖片背景顏色,還有圖片顯示區域
w=wordcloud.WordCloud(width=850,
height=600,
background_color="#33ffcc",
font_path="water.ttf",
mask=back_coloring
)
w.generate(" ".join(jieba.cut(txt)))
image_colors = ImageColorGenerator(back_coloring)
#將字體顏色與圖片顏色一致
w.recolor(color_func=image_colors)
w.to_file("Python.png")
我頭像圖片:
執行結果:
ps:可以把圖片換成自己喜歡的某張照片,還有把文字讀取一篇字數比較多的文章,這樣顯示出來的效果更好看。
附上免費ttf字體下載地址:http://www.zhaozi.cn/s/all/ttf/