1、引言
小魚:小屌絲,你在干啥呢?
小屌絲:魚哥,你看, 我的PPT寫的 高大尚不。
小魚:這有啥高大尚的啊,
小屌絲:你仔細看, 往下翻一頁
小魚:額。你這那是PPT,就是浴皇大帝、昂科旗等車系的測評嗎。
小屌絲:別管內(nèi)容了, 魚哥,你就說,這個樣式怎么樣, 帥不帥氣吧。
小魚:嗯,樣式嘛, 還可以的。
小屌絲:魚哥,你這么淡定, 你的意思, 你也會?
小魚:額… 我可沒說, 休想套路我。
小屌絲:魚哥,我這就要說到公道話了, 獨樂樂不如眾樂樂。
小魚:有的時候,需要獨樂樂。
小屌絲:魚哥,別整沒用的, 你就說分不分享吧?
小魚:額… 這個… 你說啥?
小屌絲:我說,你把這個代碼分享出來唄。
小魚:你說分享什么???
小屌絲:分享詞云生成器的代碼
小魚:分享什么代碼???
小屌絲:去泡溫泉…
小魚:好嘞,早說不就完事了嘛。
2、代碼實戰(zhàn)
2.1 庫介紹
說到詞云的制作, 不得不提的第三方庫, stylecloud:簡潔易用的詞云庫
當然僅僅有stylecloud 還是不夠的, 還需要一個庫,即 jieba:中文分詞庫
所以, 今天我們就用stylecloud 和jieba來完成本次的代碼實戰(zhàn)。
接下來, 我們先了解 這兩個庫。
2.1.1 jieba
jieba: 中文分詞庫
1、運行原理
- 初始化:加載詞典文件,獲取每個詞語和它出現(xiàn)的詞數(shù)
- 切分短語:利用正則,將文本切分為一個個語句,之后對語句進行分詞
- 構(gòu)建DAG:通過字符串匹配,構(gòu)建所有可能的分詞情況的有向無環(huán)圖,也就是DAG
- 構(gòu)建節(jié)點最大路徑概率,以及結(jié)束位置:計算每個漢字節(jié)點到語句結(jié)尾的所有路徑中的最大概率,并記下最大概率時在DAG中對應的該漢字成詞的結(jié)束位置。
- 構(gòu)建切分組合:根據(jù)節(jié)點路徑,得到詞語切分的結(jié)果,也就是分詞結(jié)果。
- HMM新詞處理:對于新詞,也就是jieba詞典中沒有的詞語,我們通過統(tǒng)計方法來處理,jieba中采用了HMM(隱馬爾科夫模型)來處理。
- 返回分詞結(jié)果:通過yield將上面步驟中切分好的詞語逐個返回。yield相對于list,可以節(jié)約存儲空間。
2、主要模式
- 精確模式:把文本精確的切分開,不存在冗余單詞
- 全模式:把文本中所有可能的詞語都掃描出來,有冗余
- 搜索引擎模式:在精確模式基礎上,對長詞再次切分
3、主要功能
-
jieba.cut 方法接受四個輸入?yún)?shù):
- 需要分詞的字符串;
- cut_all 參數(shù)用來控制是否采用全模式;
- HMM 參數(shù)用來控制是否使用 HMM 模型;
- use_paddle 參數(shù)用來控制是否使用paddle模式下的分詞模式,
- paddle模式采用延遲加載方式,通過enable_paddle接口安裝paddlepaddle-tiny,并且import相關代碼;
-
jieba.cut_for_search 方法接受兩個參數(shù):
- 需要分詞的字符串;
- 是否使用 HMM 模型。
- 該方法適合用于搜索引擎構(gòu)建倒排索引的分詞,粒度比較細
-
jieba.cut 以及 jieba.cut_for_search 返回的結(jié)構(gòu)都是一個可迭代的 generator,可以使用 for 循環(huán)來獲得分詞后得到的每一個詞語(unicode),或者用 jieba.lcut 以及 jieba.lcut_for_search 直接返回 list
-
jieba.Tokenizer(dictionary=DEFAULT_DICT) 新建自定義分詞器,可用于同時使用不同詞典。
-
jieba.dt 為默認分詞器,所有全局分詞相關函數(shù)都是該分詞器的映射。
2.1.2 stylecloud
關于詞云生成工具, 常用的無非這3種:
-
pyecharts
- 簡單易用;
- 上手快;
- 不夠美觀;
-
wordcloud
- 使用頻次最高;
- 使用最廣泛;
-
stylecloud
- 簡單易用
- 最接近完美
接下來,我們就使用 sytlecloud第三方庫,看看它完美到什么程度。
2.2 庫安裝
涉及到第三方庫,肯定就需要安裝
老規(guī)矩,pip 安裝
pip install jieba
pip install stylecloud
然后就是等待著安裝。
其它安裝方式,直接看這兩篇:
- 《Python3,選擇Python自動安裝第三方庫,從此跟pip說拜拜!!》
- 《Python3:我低調(diào)的只用一行代碼,就導入Python所有庫!》
2.2 代碼實戰(zhàn)
代碼示例
# -*- coding:utf-8 -*-
# @Time : 2023-01-10
# @Author : Carl_DJ
'''
實現(xiàn)功能:
詞云生成器
'''
import json
import stylecloud
import codecs
import jieba
from collections import Counter
#過濾掉高頻出現(xiàn)的詞匯
passwords = set()
#讀取詞匯文檔
content = [line.strip() for line in open('./data/passwords.txt', 'r',encoding='utf8').readlines()]
passwords.update(content)
#獲取文檔詞匯, 并截取長度為3個
def make_words(txt):
make_list = jieba.cut(txt)
c = Counter()
words_list = []
#獲取詞匯文本
for x in make_list:
#長度為3,超過截取
if len(x) == 3 and x !='\r\n':
c[x] += 1
words_list.append(x)
for k,v in c.most_common(50):
if k not in passwords:
# print(f'{k,v}')
#組合詞云內(nèi)容
return " ".join(words_list)
#讀取中大型suv測評.txt內(nèi)容
with codecs.open('./data/中大型suv測評.txt','r','utf8') as f: #格式需要utf8 否則會報錯
txt = f.read()
#
words_txt = make_words(txt)
#設置詞云展示的樣式,字體,生成文件名稱等,
stylecloud.gen_stylecloud(text=words_txt,custom_stopwords=content,
background_color='#1A1A1A',
colors=['#dd4444', '#fec42c', '#fac858'],
max_font_size=100,
output_name='xt6測評.jpg',
font_path="C:/Windows/Fonts/FZSTK.TTF"
)
結(jié)果展示
注:
這里需要準備兩個文件
- password.txt : 過濾文本中出現(xiàn)太多次數(shù)的詞匯;
- suv測評.txt:詞云的主要顯示的文本內(nèi)容;
文本內(nèi)容示例:
這里強調(diào)一點:
- 文本的內(nèi)容,你可以一行寫很多字,
- 但是,為了詞云展示的內(nèi)容更豐富, 列數(shù),一定要多。
當然,文檔內(nèi)容, 也可以是下載的小說,或者你自己寫的任何內(nèi)容。
3、總結(jié)
看到這里, 今天的分享就要結(jié)束了。
回頭看一下,
其實詞云生成器,并不難。
主要就是對 jieba、stylecloud 這兩個庫的使用。
這里我僅僅列舉了 stylecloud 第三方庫,
當然,如果你有興趣,也可以使用 pyecharts、 wordcloud ,看看生成的詞云如何。
也就當是你自己的練手了。
好了,就嘮叨這里了。
我是小魚:
- CSDN 博客專家;
- 阿里云 專家博主;
- 51CTO博客專家;
- 51認證講師;
- 金牌面試官;
關注小魚,帶你學習更多更有趣的python知識。
當然,
- 如果你想晉升自己的技能,;
- 如果你想提升自己的面試成功率;
- 如果你現(xiàn)在處在職業(yè)迷茫期,想重新規(guī)劃職業(yè)生涯;
都可以找小魚聊聊的。文章來源:http://www.zghlxwxcb.cn/news/detail-456680.html
CSDN 私信留言, 或者掃描小魚主頁的二維碼,都可以找到的。文章來源地址http://www.zghlxwxcb.cn/news/detail-456680.html
到了這里,關于Python3,我只用一段代碼,就寫了個詞云生成器,功能強大到懷疑人生。的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!