溫馨提示×

    您好,登錄后才能下訂單哦!

    密碼登錄×
    登錄注冊(cè)×
    其他方式登錄
    點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

    Python如何制作詞云

    發(fā)布時(shí)間:2021-11-25 11:42:44 來(lái)源:億速云 閱讀:176 作者:iii 欄目:大數(shù)據(jù)

    本篇內(nèi)容主要講解“Python如何制作詞云”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Python如何制作詞云”吧!

    效果如下:

    Python如何制作詞云

    (詞云--出現(xiàn)頻率越多的詞,字體越大 )

    工具篇

    1、安裝可視化庫(kù)

    pip3 install matplotlib

    Python如何制作詞云

    3、安裝 “結(jié)巴” 庫(kù), 這個(gè)名字起的真接地氣, 給開(kāi)發(fā)者點(diǎn)個(gè)贊

    pip3 install jieba

    這個(gè)庫(kù)用來(lái)解析中文,把一句話解析成一個(gè)個(gè)的詞,

    我們中文不像英文每個(gè)詞之間有空格。需要根據(jù)語(yǔ)義分析拆分成詞組

    我們用《劍雨》的一段對(duì)話舉例:

    import   jieba #引入結(jié)巴庫(kù) 
    str='師傅,他為何說(shuō)禪機(jī)已到,\
         佛祖點(diǎn)化世人講究機(jī)緣,\
         禪機(jī)一過(guò)緣即滅矣,\
         而禪機(jī)未到雖點(diǎn)亦不中
         我愿化身石橋又是何意'
    
    print(str)
    # 解析拆分詞組  lcut的方法
    words = jieba.lcut(str)
    print(words)

    效果如下:

    Python如何制作詞云

    ( 把完整的句子拆分成一個(gè)個(gè)的詞,看著斷斷續(xù)續(xù),可能這就是結(jié)巴的由來(lái)吧,【拆詞】最難的這部分,結(jié)巴庫(kù)都做好了,這也是python強(qiáng)大的原因吧,各式各樣的庫(kù)都有了 )

    結(jié)巴庫(kù)

    網(wǎng)上下載txt格式的《西游記》,

    下載完成后轉(zhuǎn)換成utf-8格式再保存一下。

    轉(zhuǎn)化方法:記事本另存為的時(shí)候,選擇編碼格式UTF-8

    Python如何制作詞云

    format 格式化輸出:

    #列標(biāo)題 format
    print("{0:<5}{1:<8}{2:<5}".format('序號(hào)','詞語(yǔ)', '頻率'))

    {0:<5} :

    0 表示序號(hào):第一個(gè)參數(shù),第一列,

    < 左對(duì)齊, > 右對(duì)齊

    5 代表寬度

    任務(wù)一:統(tǒng)計(jì)西游記里面出現(xiàn)頻率最高的10個(gè)詞:

    后面為了方便,我們把這個(gè)叫主代碼。

    #引入結(jié)巴庫(kù)
    import  jieba 
    #open 內(nèi)置函數(shù) 不需要引用 直接使用
    #開(kāi)打文件西游記和python 文件放到同一個(gè)目錄,可直接引用不需要路徑
    f = open('西游記.txt', 'r' ,encoding='utf-8'  )
    # 查看文件的編碼格式
    print('文件的編碼格式:'+f.encoding)
    #讀取文件
    txt = f.read()
    #關(guān)閉文件,良好的習(xí)慣
    f.close()
    
    # 使用精確模式對(duì)文本進(jìn)行分詞
    #  使用結(jié)巴庫(kù)把西游拆分成一個(gè)個(gè)的詞組
    words = jieba.lcut(txt)
     
    # 通過(guò)鍵值對(duì)的形式存儲(chǔ)詞語(yǔ)及其出現(xiàn)的次數(shù)
    # 大括號(hào)表示 python的字典類(lèi)型對(duì)應(yīng),
    # 鍵值對(duì) key:value1 ,類(lèi)似java的map對(duì)象和list 
    counts = {}     
    
    chiyun = []
    for word in words:
         # == 1 單個(gè)詞語(yǔ)不計(jì)算在內(nèi)
        if  len(word) < 2 :  
            continue
        else:
             # 遍歷所有詞語(yǔ),每出現(xiàn)一次其對(duì)應(yīng)的值加 1
            counts[word] = counts.get(word, 0) + 1   
    
    #將鍵值對(duì)轉(zhuǎn)換成列表
    items = list(counts.items())
    
    # 根據(jù)詞語(yǔ)出現(xiàn)的次數(shù)進(jìn)行從大到小排序
    items.sort(key=lambda x: x[1], reverse=True)
    #列標(biāo)題 format
    print("{0:<5}{1:<8}{2:<5}".format('序號(hào)','詞語(yǔ)', '頻率'))
    #需要顯示的范圍  10即顯示前10個(gè),0到9
    for i in range(10):
        word, count = items[i]
        print("{0:<5}{1:<8}{2:>5}".format(i+1,word, count))

    效果如下:

    Python如何制作詞云

    還是沒(méi)有觀音, 放出前100,200,300 到500在看:

    終于出現(xiàn)了,在349位,重復(fù)61次,

    應(yīng)該是有哪里問(wèn)題,直覺(jué)判斷不止61次重復(fù)

    Python如何制作詞云

    預(yù)知后事如何,請(qǐng)聽(tīng)下回分解,‘下回分解’排第二合理。

    悟空每次打妖怪都要吹下牛,在洞口報(bào)個(gè)名:我是五百年前大鬧天宮的齊天大圣,這兩個(gè)詞出現(xiàn)在前10 合理。

    詞云庫(kù)

    我們?cè)谑崂硐铝鞒蹋?/p>

    注意下:結(jié)巴庫(kù)不是必須,主要是用來(lái)把句子拆分成詞,如果你已經(jīng)有統(tǒng)計(jì)好的詞組,可直接用詞云顯示。

    試一個(gè)簡(jiǎn)單的:我們手工創(chuàng)建個(gè)詞組,直接用詞云顯示出來(lái)。即繞開(kāi)結(jié)巴庫(kù)了

    from wordcloud import WordCloud
    # python的可視化庫(kù),也是二級(jí)考試推薦的可視化庫(kù)
    import matplotlib.pyplot as plt
    
    
    str=['齊天大圣','大圣','大圣','八戒','嫦娥']
    #數(shù)組里面添加內(nèi)容
    str.append('玉兔')
    str.append('女兒國(guó)')
    str.append('牛魔王')
    str.append('大圣')
    str.append('土地公公')
    str.append('小神仙')
    str.append('八戒')
    
    print(str)
    #join 函數(shù) 用斜桿拼接詞組mask =maskph,
    #這里一定要join拼接一下 轉(zhuǎn)成字符串
    text_cut  =  '/'.join(str)
    
    #看一下連接后的樣子 
    #關(guān)鍵點(diǎn) text_cut 是詞云要處理的內(nèi)容
    print(text_cut)
    wordcloud = WordCloud(  background_color='white',font_path = 'msyh.ttc', width=1000, height=860, margin=2).generate(text_cut)
    # 顯示圖片 
    plt.imshow(wordcloud)
    plt.axis('off')
    plt.show()

    可觀察下效果圖:主要join后的輸出,用/拼接成了一個(gè)字符串:

    Python如何制作詞云

    效果圖:

    (大圣和八戒出現(xiàn)次數(shù)多,字體最大)

    詞云圖

    先把全代碼放上,后面實(shí)例在解析:

    這段可先略過(guò),下面直接看效果圖:

    #引入結(jié)巴庫(kù)
    import  jieba
    #詞云庫(kù)
    from wordcloud import WordCloud
    # python的可視化庫(kù),也是二級(jí)考試推薦的可視化庫(kù)
    import matplotlib.pyplot as plt
    from PIL import Image  #處理圖片的
     #矩陣 好像也是協(xié)助處理圖片的
    import numpy as np 
    
    
    
    #open 內(nèi)置函數(shù) 不需要引用 直接使用
    #開(kāi)打文件西游記和python 文件放到同一個(gè)目錄,可直接引用不需要路徑
    f = open('西游記.txt', 'r' ,encoding='utf-8'  )
    
    # 查看文件的編碼格式
    print('文件的編碼格式:'+f.encoding)
    
    #讀取文件
    txt = f.read()
    
    #關(guān)閉文件,良好的習(xí)慣
    f.close()
    
    
    # 使用精確模式對(duì)文本進(jìn)行分詞
    #  使用結(jié)巴庫(kù)把西游拆分成一個(gè)個(gè)的詞組
    words = jieba.lcut(txt)
    
    
    # 通過(guò)鍵值對(duì)的形式存儲(chǔ)詞語(yǔ)及其出現(xiàn)的次數(shù)
    # 大括號(hào)表示 python的字典類(lèi)型對(duì)應(yīng),
    # 鍵值對(duì) key:value1 ,類(lèi)似java的map對(duì)象和list 
    counts = {}     
    #數(shù)組對(duì)象  用來(lái)接收需要傳遞給詞云的內(nèi)容
    chiyun = []
    for word in words:
         # == 1 單個(gè)詞語(yǔ)不計(jì)算在內(nèi)
        if  len(word) < 2 :  
            continue
        else:
             # 遍歷所有詞語(yǔ),每出現(xiàn)一次其對(duì)應(yīng)的值加 1
            counts[word] = counts.get(word, 0) + 1   
    
    #將鍵值對(duì)轉(zhuǎn)換成列表
    items = list(counts.items())
    
    # 根據(jù)詞語(yǔ)出現(xiàn)的次數(shù)進(jìn)行從大到小排序
    items.sort(key=lambda x: x[1], reverse=True)
    
    
    #列標(biāo)題 format
    print("{0:<5}{1:<8}{2:<5}".format('序號(hào)','詞語(yǔ)', '頻率'))
    
    
    #需要顯示的范圍  10即顯示前10個(gè),0到9
    for i in range(80):
        word, count = items[i]
        print("{0:<5}{1:<8}{2:>5}".format(i+1,word, count))
        chiyun.append(word)
    
    
     #print(chiyun) 
    
    
    #加載圖片信息
    maskph = np.array(Image.open('山東艦航母.png'))
    
    
    #join 函數(shù) 用斜桿拼接詞組
    text_cut  =  '/'.join(chiyun)
    wordcloud = WordCloud(mask =maskph,  background_color='white',font_path = 'msyh.ttc', width=1000, height=860, margin=2).generate(text_cut)
    # 顯示圖片 
    plt.imshow(wordcloud)
    plt.axis('off')
    plt.show()

    效果1:全部顯示

    即:結(jié)巴庫(kù)處理好的詞組,不做限制,全部送給詞云顯示:

    Python如何制作詞云

    顯示二:限定內(nèi)容顯示

    比如改成 只輸出前20個(gè)詞:(顯示密度會(huì)稀好多)

    即:結(jié)巴庫(kù)處理好后,取前20個(gè)高頻詞傳給詞云顯示:

    再試一下前20的 四個(gè)字的詞:

    Python如何制作詞云

    到此,相信大家對(duì)“Python如何制作詞云”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

    向AI問(wèn)一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI