最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Python編寫一個(gè)詞云制作程序

 更新時(shí)間:2023年10月19日 09:11:46   作者:微小冷  
這篇文章主要為大家詳細(xì)介紹了如何基于Python編寫一個(gè)簡(jiǎn)單的詞云制作程序,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下

參數(shù)字典

自從做了熱榜的詞云之后,就越來越覺得詞云的表達(dá)力真的很強(qiáng),所以合計(jì)是不是可以為WordCloud做一個(gè)界面,來更加直觀地操作。

既然以WordCloud為核心,那么界面的組件自然要和WordCloud的參數(shù)意義綁定,每個(gè)參數(shù)在界面中都對(duì)應(yīng)一個(gè)提示組件,比如Lable,和一個(gè)輸入組件,比如Entry。此外,這些參數(shù)都是可設(shè)的,那么在對(duì)應(yīng)一個(gè)組件的同時(shí),也應(yīng)該對(duì)應(yīng)一個(gè)StringVar。

簡(jiǎn)單起見,現(xiàn)在只挑選幾個(gè)必備的參數(shù),來演示這個(gè)邏輯的實(shí)現(xiàn)方法

參數(shù)說明適用組件參數(shù)
width詞云寬度Spinbox100-2000, 10
height詞云高度Spinbox100-2000, 10
scale縮放Spinbox0.5-10, 0.1
輸入文本路徑對(duì)話框
輸出詞云路徑對(duì)話框
font_path字體文件路徑路徑對(duì)話框

將這些參數(shù)封裝成一個(gè)字典,內(nèi)容如下

wcDct = {
    "詞云寬度" : {
        "Ctrl": ttk.Spinbox, 
        "paras" : {"from_":100, "to":2000, "increment":10},
        "default":800,
        "call" : "width"},
    "詞云寬度" : {
        "Ctrl": ttk.Spinbox, 
        "paras" : {"from_":100, "to":2000, "increment":10},
        "default":450,
        "call" : "height"},
    "圖像縮放" : {
        "Ctrl": ttk.Spinbox, 
        "paras" : {"from_":0.5, "to":10, "increment":0.1},
        "default":1,
        "call" : "scale"},
    "輸入路徑" : {"Ctrl": DialogButton},
    "輸出路徑" : {"Ctrl": DialogButton},
    "字體路徑" : {"Ctrl": DialogButton, "call" : "font_path"},
}

其中,DialogButton是自定義的一個(gè)組件,主要包括一個(gè)按鈕和一個(gè)輸入框,點(diǎn)擊按鈕可以彈出文件對(duì)話框。

布局

有了這個(gè)字典,就可以據(jù)此來布局了

class DrawWords(ttk.Frame):
    def __init__(self, master, **options):
        super().__init__(master, **options)
        self.pack()
        self.words = None
        self.initWidgets()
    
    def initWidgets(self):
        frm = ttk.Frame(self)
        frm.pack(side=tk.LEFT, fill=tk.Y)
        self.initPara(frm)

    def setOneSpinBox(self, frm, key):
        ttk.Label(frm, width=8, text=key).pack(side=tk.LEFT)
        v = wcDct[key]      # 組件參數(shù)
        n = v["call"]       # 調(diào)用名
        self.spins[n] = v["ctrl"](frm, **v["paras"])
        self.spins[n].set(v["default"])
        self.spins[n].pack(side=tk.LEFT)
    
    def setOneDiaButton(self, frmPara, key):
        frm = ttk.Frame(frmPara)
        frm.pack(side=tk.TOP, fill=tk.X)
        ttk.Label(frm, width=8, text=key).pack(side=tk.LEFT)
        v = wcDct[key]
        n = v["call"] if 'call' in v else key
        self.paths[n] = v["ctrl"](frm, **v['paras'])
        self.paths[n].pack(side=tk.LEFT)
        if 'default' in v:
            self.paths[n].set(v['default'])

    def initPara(self, frmPara):
        self.spins = {}
        frm = ttk.Frame(frmPara)
        frm.pack(side=tk.TOP, fill=tk.X)
        for key in ["詞云寬度", "詞云高度"]:
            self.setOneSpinBox(frm, key)

        self.paths = {}
        for key in ["輸入路徑", "輸出路徑", "字體路徑"]:
            self.setOneDiaButton(frmPara, key)
                
        frm = ttk.Frame(frmPara)
        frm.pack(side=tk.TOP, fill=tk.X)
        ttk.Button(frm, text="輸出詞云", 
            command=self.genWordCloud).pack(side=tk.LEFT)

在布局過程中,對(duì)SpinBox類型的變量和DialogButton型的變量分別做了不同的處理,并且為它們分別設(shè)計(jì)了全局變量字典self.spins和self.paths,以便于調(diào)用。

布局結(jié)果如下

其中,genWordCloud用于詞云輸出,考慮到分詞的準(zhǔn)確性,這里仍然采用jieba進(jìn)行分詞,并為分詞專門設(shè)計(jì)一個(gè)函數(shù),其最終實(shí)現(xiàn)如下。

    def splitWords(self):
        p = self.paths["輸入路徑"].get()
        with open(p, encoding='utf8') as f:
            text = f.read()
        words = jieba.lcut(text)
        self.words = [w for w in words if len(w)>1] # 取出長(zhǎng)度大于1的詞

    def genWordCloud(self):
        dct = {}
        for key in ['width', 'height', 'font_path']:
            if key in self.spins:
                dct[key] = int(self.spins[key].get())
            if key in self.paths:
                dct[key] = self.paths[key].get()        
        cloud = WordCloud(**dct)
        self.splitWords()
        cloud.generate(" ".join(self.words))
        p = self.paths["輸出路徑"].get()
        if not (p.endswith('.png') or p.endswith('.svg')):
            p = p+".png"
        cloud.to_file(p)

測(cè)試結(jié)果

最后,按照慣例,做一下測(cè)試

if __name__ == "__main__":
    root = tk.Tk()
    DrawWords(root).pack(side=tk.TOP, fill=tk.BOTH)
    root.mainloop()

效果如下

到此這篇關(guān)于基于Python編寫一個(gè)詞云制作程序的文章就介紹到這了,更多相關(guān)python詞云內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于python調(diào)用psutil模塊過程解析

    基于python調(diào)用psutil模塊過程解析

    這篇文章主要介紹了基于python調(diào)用psutils模塊過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Python編程二分法實(shí)現(xiàn)冒泡算法+快速排序代碼示例

    Python編程二分法實(shí)現(xiàn)冒泡算法+快速排序代碼示例

    這篇文章主要介紹了Python編程二分法實(shí)現(xiàn)冒泡算法+快速排序代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • 解決編碼問題:UnicodeDecodeError: 'utf-8' codec can't decod

    解決編碼問題:UnicodeDecodeError: 'utf-8' codec

    這篇文章主要介紹了快速解決編碼問題:UnicodeDecodeError: 'utf-8' codec can't decod,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python實(shí)現(xiàn)目錄自動(dòng)清洗

    Python實(shí)現(xiàn)目錄自動(dòng)清洗

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)目錄自動(dòng)清洗的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • 詳解用python寫一個(gè)抽獎(jiǎng)程序

    詳解用python寫一個(gè)抽獎(jiǎng)程序

    這篇文章主要介紹了用python寫一個(gè)抽獎(jiǎng)程序,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Python爬蟲與反爬蟲大戰(zhàn)

    Python爬蟲與反爬蟲大戰(zhàn)

    這篇文章主要介紹了Python爬蟲與反爬蟲的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的理解Python爬蟲與反爬蟲的關(guān)系,感興趣的朋友可以了解下
    2020-07-07
  • pandas 使用apply同時(shí)處理兩列數(shù)據(jù)的方法

    pandas 使用apply同時(shí)處理兩列數(shù)據(jù)的方法

    下面小編就為大家分享一篇pandas 使用apply同時(shí)處理兩列數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python eval函數(shù)原理及用法解析

    Python eval函數(shù)原理及用法解析

    這篇文章主要介紹了Python eval函數(shù)原理及用法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 使用Flask獲取請(qǐng)求參數(shù)的方式總結(jié)

    使用Flask獲取請(qǐng)求參數(shù)的方式總結(jié)

    在 Flask 中,可以從 request 對(duì)象中獲取各種類型的參數(shù),這篇文章為大家整理了一些常見的獲取參數(shù)的方式及示例代碼,感興趣的小伙伴可以參考一下
    2025-04-04
  • python用pandas讀寫和追加csv文件

    python用pandas讀寫和追加csv文件

    大家好,本篇文章主要講的是python用pandas讀寫和追加csv文件,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02

最新評(píng)論

清水河县| 天镇县| 略阳县| 乐陵市| 美姑县| 通城县| 鄂伦春自治旗| 龙井市| 塔城市| 衢州市| 玛纳斯县| 新密市| 乐山市| 正阳县| 清河县| 五家渠市| 平阳县| 五峰| 兴山县| 连城县| 阜平县| 长白| 横峰县| 南通市| 尼玛县| 靖江市| 漾濞| 浦江县| 嵊州市| 纳雍县| 吴桥县| 深水埗区| 辉南县| 山东省| 米易县| 开远市| 鲜城| 林芝县| 正安县| 广饶县| 南通市|