轉載地址:https://zhuanlan.zhihu.com/p/20436581
上文末尾提到 Python 下還有一款詞雲生成器。amueller/word_cloud · GitHub
可以直接使用命令 pip install wordcloud 安裝,自行補充完整依賴。
網上搜不到有關的中文文章,自己探索了一下,也算做出了結果。由於沒有中文支持的說明和中文文檔,在此簡單補充並翻譯部分文檔。翻譯可能有出入僅供參考,只是為了加深自己理解所用。
#后面有示例和展示。想了想放到一篇里面太臃腫,所以另起一篇展示。
API 分為三部分
生成詞雲的部分、生成圖像顏色的部分和隨機顏色函數。
wordcloud.WordCloud
class wordcloud.WordCloud(font_path=None, width=400, height=200, margin=5, ranks_only=False, prefer_horizontal=0.9,mask=None, scale=1, color_func=<function random_color_func at 0x2b8b422a31b8>, max_words=200, stopwords=None,random_state=None, background_color='black', max_font_size=None)
主要部分,用來生成詞雲並生成圖像。
參數:
font_path : string
用到的字體文件的路徑(支持OTF 或 TTF格式)。默認字體是
DroidSansMono 。非 Linux 系統需自行調整路徑參數。
說明:Windows 下中文支持的方法。
1、准備好一個中文字體,如 simhei.ttf
2、將其復制到 C:\Python27\Lib\site-packages\wordcloud\
3、在 wordcloud.py 中修改 FONT_PATH 為相應字體。(注意是大寫,大寫的字體路徑是默認路徑,小寫的字體是后面使用時可以再次指定的,會覆蓋默認字體)
FONT_PATH = os.environ.get("FONT_PATH", os.path.join(os.path.dirname(__file__),
"simhei.ttf"))
4、注意中文的編碼應為 utf-8 ,否則會導致亂碼無法顯示
#可以參見不知道什么語言的用戶提出的 issue Word cloud unicode (multilanguage) problem · Issue #70 · amueller/word_cloud · GitHub
width : int (default=400)
畫布寬度
height : int (default=200)
畫布高度
ranks_only : boolean (default=False)
是否只用詞頻排序而不是實際詞頻統計值,默認 False
prefer_horizontal : float (default=0.90)
詞語水平出現的頻率,默認 0.9 (即垂直出現頻率為 0.1 )
mask : nd-array or None (default=None)
如果參數為空,則使用二維遮罩繪制詞雲。
如果 mask 非空,設置的寬高值將被忽略,遮罩形狀被 mask 取代。
除全白(#FFFFFF)的部分將不會繪制,其余部分會用於繪制詞雲。
scale : float (default=1)
計算與繪制圖像間的比例。對於較大的詞雲圖像,使用比例而非較大的畫布會顯著提升繪圖速度,但是可能會造成詞語間的粗糙擬合。
max_words : number (default=200)
詞語的最大數量
stopwords : set of strings
屏蔽詞
max_font_size : int or None (default=None)
最大詞的最大字號。如果不指定,則為圖像高度。
說明:
畫布越大,運行耗時會顯著提升。如果你需要輸出一幅較大的詞雲圖像,嘗試設置較小的畫布並使用比例參數來調節。
基於最大字號和比例參數,算法可能會更傾向於使用詞語的排名順序而非它們的實際頻率。
屬性:
words_: list of tuples (string, float)
帶有頻率的詞語
layout_:list of tuples (string, int, (int, int), int, color))
編碼擬合好的詞雲。每個詞語的字符串、字號、位置、方向和顏色的編碼。
方法:
static __init__(font_path=None, width=400, height=200, margin=5, ranks_only=False, prefer_horizontal=0.9, mask=None,scale=1, color_func=<function random_color_func at 0x2b8b422a31b8>, max_words=200, stopwords=None,random_state=None, background_color='black', max_font_size=None)
static fit_words(frequencies) / generate_from_frequencies(這兩個一個意思)
依據詞語和頻率生成詞雲
參數:frequencies : array of tuples
包含了詞語和頻率的數組
static generate(text) / generate_from_text
從文本中生成詞雲,調用 _text 和 fit_words
static process_text(text)
將長文本分詞並去除屏蔽詞(此處指英語,中文分詞還是需要自己用別的庫先行實現,使用上面的 fit_words(frequencies) )
參數:text : string
需要處理的文本
返回:words : list of tuples (string, float)
帶有相應頻率的詞語
說明:有標記詞頻的更好方法,但是作者沒有把那些全部包括進來。
static recolor(random_state=None, color_func=None)
對現有輸出重新着色。重新上色會比重新生成整個詞雲快很多。
參數:
random_state : RandomState, int, or None, default=None
如果非空,會使用固定的隨機狀態。
如果給出一個整數,它會被用作 random.Random 狀態的一個種子(根源)
color_func : function or None, default=None
生成新顏色的函數,如果為空,則使用 self.color_func
static to_array()
轉化為 numpy array
返回:image : nd-array size (width, height, 3)
numpy 矩陣的詞雲圖像
static to_file(filename)
輸出到文件
參數:filename : string
輸出的文件路徑
wordcloud.ImageColorGenerator
class wordcloud.ImageColorGenerator(image)
基於 RGB 圖像生成顏色。詞語將會使用一定矩形區域內的平均顏色上色。這個對象可以被調用作為詞雲或者重新上色方法的顏色函數。
參數:image : nd-array, shape (height, width, 3)
用來生成詞語顏色的圖像。 Alpha 通道會被忽略。大小應與畫布大小相同。
static __init__(image)
wordcloud.random_color_func
wordcloud.random_color_func(word=None, font_size=None, position=None, orientation=None, font_path=None, random_state=None)
隨機生成色調
默認的上色方法。僅僅會生成一個隨機的色調( 80% 顏色值 50% 亮度)
參數:
word, font_size, position, orientation : ignored.
random_state : random.Random object or None, (default=None)
如果一個隨機的對象已經給出,這會用作生成隨機數字(沒看懂)
