日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中文词云生成_Python 词云生成

發布時間:2024/9/19 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中文词云生成_Python 词云生成 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

圖片來自網絡所謂“詞云”就是對網絡文本中出現頻率較高的“關鍵詞”予以視覺上的突出,形成“關鍵詞云層”或“關鍵詞渲染”,從而過濾掉大量的文本信息,使瀏覽網頁者只要一眼掃過文本就可以領略文本的主旨。

環境準備python -m pip install wordclud

python -m pip install matplotlib

python -m pip install jieba

在Windows上,如無法成功安裝,可使用已經編譯好的二進制包,下載安裝

wordcludPython用于生成詞云的庫。

wordclud 官方文檔

屬性簡述font_path字體路徑,做中文詞云必須設置字體,否則無法顯示

width輸出的畫布寬度,默認為400像素

height輸出的畫布高度,默認為200像素

mask如果參數為空,則使用二維遮罩繪制詞云。如果 mask 非空,設置的寬高值將被忽略,遮罩形狀被 mask 取

min_font_size顯示的最小的字體大小

max_font_size顯示的最大的字體大小

max_words要顯示的詞的最大個數,默認200

scale按照比例進行放大畫布,如設置為1.5,則長和寬都是原來畫布的1.5

color_func生成新顏色的函數,如果為空,則使用 self.color_fun

prefer_horizontal詞語水平方向排版出現的頻率,默認 0.9 (所以詞語垂直方向排版出現頻率為 0.1 )

stopwords設置需要屏蔽的詞,如果為空,則使用內置的STOPWORDS

font_step字體步長,如果步長大于1,會加快運算但是可能導致結果出現較大的誤,默認1

background_color背景顏色

relative_scaling詞頻和字體大小的關聯性,默認0.5

mode當參數為“RGBA”并且background_color不為空時,背景為透,默認“RGB”

regexp使用正則表達式分隔輸入的文本

collocations是否包括兩個詞的搭配,默認True

colormap給每個單詞隨機分配顏色,若指定color_func,則忽略該方法

matplotlib一個Python 2D繪圖庫。Matplotlib試圖讓簡單易事的事情成為可能。只需幾行代碼即可生成繪圖,直方圖,功率譜,條形圖,錯誤圖,散點圖等,該庫最常用于Python數據分析的可視化。

官方文檔

最小示例from wordcloud import WordCloud

import matplotlib.pyplot as plt

with open("野性的呼喚.txt", encoding="utf-8") as file:

word_cloud = WordCloud().generate(file.read())

plt.figure() # 創建一個圖形實例

plt.imshow(word_cloud, interpolation='bilinear')

plt.axis("off") # 不顯示坐標軸

plt.show()

interpolation 參數的用法

中文詞云wordcloud 對中文分詞支持不足,因此需要配合jieba分詞庫使用from wordcloud import WordCloud

import matplotlib.pyplot as plt

with open("fanrenxiuxian.txt", encoding="gbk") as file:

word_cloud = WordCloud(font_path="c:\windows\Fonts\simhei.ttf",

background_color="white",

max_words=200,

max_font_size=100,

width=1000,

height=860).generate(file.read())

plt.figure() # 創建一個圖形實例

plt.imshow(word_cloud, interpolation='bilinear')

plt.axis("off") # 不顯示坐標尺寸

plt.show()

添加圖片背景效果from wordcloud import WordCloud

from wordcloud import ImageColorGenerator

from matplotlib.image import imread

import matplotlib.pyplot as plt

back_img = imread("timg.jpg")

img_colors = ImageColorGenerator(back_img)

with open("fanrenxiuxian.txt", encoding="gbk") as file:

word_cloud = WordCloud(font_path="c:\windows\Fonts\simhei.ttf",

background_color="white",

max_words=200,

max_font_size=100,

width=1920,

mask=back_img,

height=1080).generate(file.read())

word_cloud.recolor(color_func=img_colors) # 替換默認的字體顏色

plt.figure() # 創建一個圖形實例

plt.imshow(word_cloud, interpolation='bilinear')

plt.axis("off") # 不顯示坐標尺寸

plt.show()

擴展:將圖片加載的幾種方法PIL.Image.open

scipy.misc.imread

skimage.io.imread

cv2.imread

matplotlib.image.imread

jieba

特點支持三種分詞模式:精確模式,試圖將句子最精確地切開,適合文本分析;

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

搜索引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用于搜索引擎分詞

支持繁體分詞

支持自定義詞典

MIT 授權協議

簡單示例import jieba

with open("fanrenxiuxian.txt", 'r', encoding="gbk") as file:

# jieba.enable_parallel(4) 并行運算,類unix系統,Windows不支持

seg_list = jieba.cut(file.read(), cut_all=False)

print("/".join(seg_list))

提取關鍵詞import jieba.analyse

# TF-IDF算法關鍵詞抽取

with open("fanrenxiuxian.txt", 'r', encoding="gbk") as file:

jieba.analyse.set_stop_words('stopwords.txt')

tags = jieba.analyse.extract_tags(file.read(), 100)

print(tags)

中文詞云實例

網絡上關于中文詞云的博客資料99.9%是對wordcloud官網示例的翻譯,我要說的是官方示例基本就是個大坑,不知道是不太放心上還是本身就是臨時工lowB程序員寫的。而國內的博主習慣了粘貼復制,已經喪失了獨立思考的能力,不假思索的就照搬,反正我是被坑了,用官方示例將一部《凡人修仙傳》在Windows上單線程生成詞云花了300多秒,而我經過仔細閱讀jieba庫和wordcloud庫的API后,發現根本就不是官網示例那么個寫法,經過我重新改造后,只需要大概60秒就能生成《凡人修仙傳》的詞云。

首先我們進入wordcloud文檔,找到 create wordcloud with chinese 這個示例,查看一下官方示例,代碼我這里就不貼了,點擊鏈接可直接跳轉第一種寫法

我們結合jieba庫,修改詞云代碼。這里使用WordCloud的stopwords參數加入停止詞,而不是像官方示例那樣去做遍歷篩選停止詞,特別是寫出if not (myword.strip() in f_stop_seg_list) and len(myword.strip()) > 1:這種低性能的代碼,就算是遍歷, len(myword.strip()) > 1也應放在最前面去判斷,而不是把停止詞放在最前面去判斷,這樣大大的增加了時間復雜度。from wordcloud import WordCloud

from wordcloud import ImageColorGenerator

from matplotlib.image import imread

import matplotlib.pyplot as plt

import jieba, time

def get_stopwords():

with open("stopwords.txt", encoding='utf-8') as f_stop:

return f_stop.read().splitlines()

back_img = imread("timg.jpg")

img_colors = ImageColorGenerator(back_img)

with open("fanrenxiuxian.txt", encoding="gbk") as file:

stop_words = get_stopwords() # 獲取停止詞列表

seg_list = jieba.cut(file.read(), cut_all=False) # 返回一個生成器

cut_list = " ".join(seg_list)

word_cloud = WordCloud(font_path="c:\windows\Fonts\simhei.ttf",

background_color="white",

max_words=1000,

max_font_size=100,

width=1920,

stopwords=stop_words,

mask=back_img,

height=1080).generate(cut_list)

word_cloud.recolor(color_func=img_colors) # 替換默認的字體顏色

plt.figure() # 創建一個圖形實例

plt.imshow(word_cloud, interpolation='bilinear')

plt.axis("off") # 不顯示坐標尺寸

plt.show()第二種寫法

這里的第二種寫法基本就官方示例的寫法,只是略微調整了篩選停止詞時的判斷條件的順序from wordcloud import WordCloud

from wordcloud import ImageColorGenerator

from matplotlib.image import imread

import matplotlib.pyplot as plt

import jieba, time

def get_stopwords():

with open("stopwords.txt", encoding='utf-8') as f_stop:

return f_stop.read().splitlines()

back_img = imread("timg.jpg")

img_colors = ImageColorGenerator(back_img)

with open("fanrenxiuxian.txt", encoding="gbk") as file:

stop_words = get_stopwords() # 獲取停止詞列表

seg_list = jieba.cut(file.read(), cut_all=False) # 返回一個生成器

cut_list = "/".join(seg_list).split("/")

content_list = []

for word in cut_list:

if len(word.strip()) > 1 and not (word.strip() in stop_words):

content_list.append(word)

word_cloud = WordCloud(font_path="c:\windows\Fonts\simhei.ttf",

background_color="white",

max_words=200,

max_font_size=100,

width=1920,

mask=back_img,

height=1080).generate(' '.join(content_list))

word_cloud.recolor(color_func=img_colors) # 替換默認的字體顏色

plt.figure() # 創建一個圖形實例

plt.imshow(word_cloud, interpolation='bilinear')

plt.axis("off") # 不顯示坐標尺寸

plt.show()第三種寫法,最終版

這種是我推薦的做法。整個文本的分詞包括關鍵詞提取,我們都直接交給jieba庫去做就行了,WordCloud庫僅僅根據jieba庫返回的關鍵詞以及權重去生成詞云圖片就行。這里主要用到WordCloud庫的generate_from_frequencies這個函數,API文檔給出的說明是Create a word_cloud from words and frequencies.,有了這個API,不知道官方中文詞云示例為什么還寫成那樣,難道是自己的API都不清楚嗎?令人費解from wordcloud import WordCloud

from wordcloud import ImageColorGenerator

from matplotlib.image import imread

import matplotlib.pyplot as plt

import jieba.analyse

back_img = imread("timg.jpg")

img_colors = ImageColorGenerator(back_img)

with open("fanrenxiuxian.txt", encoding="gbk") as file:

jieba.analyse.set_stop_words('stopwords.txt') # 設置止詞列表

tags = jieba.analyse.extract_tags(file.read(), 1000, withWeight=True)

data = {item[0]: item[1] for item in tags}

word_cloud = WordCloud(font_path="c:\windows\Fonts\simhei.ttf",

background_color="white",

max_words=1000,

max_font_size=100,

width=1920,

mask=back_img,

height=1080).generate_from_frequencies(data)

word_cloud.recolor(color_func=img_colors) # 替換默認的字體顏色

plt.figure() # 創建一個圖形實例

plt.imshow(word_cloud, interpolation='bilinear')

plt.axis("off") # 不顯示坐標尺寸

plt.show()

簡單說一下這里的stop_words停止詞其實就是需要被過濾掉的詞,比如一篇文章中肯定有無數個“的”、“了”之類的對于詞頻而言無意義詞,根據具體需求,一些副詞、邏輯連接詞之類的也都要過濾掉,否則就會影響準確性。

由于我這里停止詞沒有單獨去添加,而是用了一個通用的停止詞表,導致最終生成的詞云不是特別準確,這個就要大家自己去小心調試了

關注個人公眾號:編程之路從0到1編程之路從0到1

總結

以上是生活随笔為你收集整理的python中文词云生成_Python 词云生成的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。