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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

情人节礼物------用她的照片和我们的聊天记录生成词云~

發(fā)布時(shí)間:2024/1/8 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 情人节礼物------用她的照片和我们的聊天记录生成词云~ 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

用到的知識(shí)點(diǎn)

  • python讀寫文件
  • python正則表達(dá)式過濾無用信息
  • jieba分詞自定義字典
  • 停用詞篩選、統(tǒng)計(jì)詞頻
  • 調(diào)用wordcloud繪制詞云
  • 第一步

    從電腦版蛐蛐導(dǎo)出聊天記錄。(手機(jī)一般不可以)

    點(diǎn)擊消息管理,右鍵點(diǎn)擊想導(dǎo)出的聯(lián)系人

    點(diǎn)擊導(dǎo)出消息記錄即可,選擇保存方式為.txt

    這里是在電腦消息記錄和手機(jī)同步的情況下的操作。如果在自己不常用的電腦上可能消息記錄并不全。需要手機(jī)進(jìn)行消息記錄同步,網(wǎng)上也有教程。


    txt文件格式是這樣子滴,xxx是昵稱

    第二步

    時(shí)間和昵稱是無用文本消息,需要進(jìn)行過濾【1,2】。

    emmm先來用到的python包

    import jieba import matplotlib.pyplot as plt from wordcloud import WordCloud import numpy as np import PIL.Image as Image import re

    讀寫文件和正則表達(dá)式過濾的代碼如下:

    with open('2-month.txt', encoding="utf8") as fp:text = fp.read()text1 = re.sub(r"\d{4}-\d{2}-\d{2} \d{1,2}:\d\d:\d\d|[表情]|[圖片]|\[|\]", "", text) # 得到過濾時(shí)間后的文本 text2 = text1.replace('y','xxx') #y是原本的昵稱,xxx是需要替換為的字符串 fh = open('2_clean_temp.txt', 'w', encoding='utf-8') fh.write(text2) fh.close()

    Python 正則表達(dá)式|菜鳥教程
    python re模塊(正則表達(dá)式) sub()函數(shù)詳解
    簡單來說,sub函數(shù)傳入三個(gè)必選參數(shù),分別是pattern, repl, string

    pattern

    模式字符串 ,即要匹配的字符串
    代碼中

    "\d{4}-\d{2}-\d{2} \d{1,2}:\d\d:\d\d|[表情]|[圖片]|\[|\]"

    表示匹配4位整數(shù)-2位整數(shù)-2位整數(shù) 1或2位整數(shù):2位整數(shù):2位整數(shù) ------匹配時(shí)間
    [表情] 和 [圖片] ------匹配txt無法顯示的表情和圖片

    repl

    要替換為的字符串,代碼中替換為空字符串

    string

    要處理的文本

    過濾完成后將文本保存

    第三步

    接著打開過濾后的文本進(jìn)行jieba分詞,同時(shí)定義自己的詞典。即某些詞不會(huì)被分開【3】

    你們肯定會(huì)有一些屬于你們之間的稱呼哈哈哈哈,或者是一些地名等等,為了不讓它們被分開,所以定義自己的詞典。

    with open('2_clean_temp.txt', encoding="utf8") as fp:text1 = fp.read() jieba.load_userdict("./dict.txt")#加載自定義字典 word_list = jieba.lcut(text1, cut_all=False) # 分詞 # print(word_list) # 查看分詞結(jié)果,更新自定義詞典

    詞典格式為:一個(gè)詞占一行;每一行分三部分:詞語、詞頻(可省略)、詞性(可省略),用空格隔開,順序不可顛倒。

    例如:

    這里用新建txt文件作為詞典比較方便。

    jieba分詞

    jieba分詞詳解
    有三種匹配模型,精確模式、全模式和搜索引擎模式:

    jieba.cut(sentence,cut_all=False,HMM=True) # 精確模式 jieba.cut(sentence,cut_all=True,HMM=True) # 全模式 jieba.cut_for_search (sentence, HMM=True) # 搜索引擎模式

    得到結(jié)果

    sentence = "今天天氣真好。" #---------------result---------------- '今天天氣 真 好' # 精確模式 '今天 今天天氣 天天 天氣 真好' # 全模式 '今天 天天 天氣 今天天氣 真 好' # 搜索引擎模式

    如果調(diào)用lcut,則得到list結(jié)果

    第四步

    刪除停用詞并統(tǒng)計(jì)詞頻方便后續(xù)詞云繪制【4】

    word_count={} #定義字典進(jìn)行存儲(chǔ),較為方便 stopwords = [line.strip() for line in open("stopword.txt",encoding="UTF-8").readlines()] #加載停用詞,逐行讀取 for word in word_list:if word not in stopwords: #如果不在停用詞列表中word_count[word] = word_count.get(word, 0) + 1 #就將次數(shù)加一 items = list(word_count.items()) items.sort(key=lambda x: x[1], reverse=True) #進(jìn)行排序 dictItems = dict(items) #重新轉(zhuǎn)換為字典,繪制詞云要用到

    這里停用詞用到哈工大的停用詞列表,自己再添加了一些。
    中文停用詞表——哈工大停用詞表
    可以自己新建txt文件,將停用詞復(fù)制進(jìn)去。

    第五步

    用wordcloud繪制詞云

    image_background = Image.open('2.jpg') MASK = np.array(image_background)font=r'C:\\Windows\\Fonts\\simhei.ttf' my_wordcloud = WordCloud(background_color="white", max_words=500, max_font_size=45,font_path=font,scale=20,mask =MASK).generate_from_frequencies(dictItems)plt.imshow(my_wordcloud) # 顯示詞云圖 plt.axis('off') # 是否顯示x軸、y軸下標(biāo) plt.show()

    如果只想得到矩形圖片的詞云,例如:

    那就不需要前兩行代碼

    如果想生成這樣效果的:

    那就需要摳圖。需要將想要詞云覆蓋的部分摳出來,其他部分設(shè)置為白色背景。寫入前兩行代碼,以及調(diào)用如下代碼:

    my_wordcloud = WordCloud(background_color="white", max_words=500, max_font_size=45,font_path=font,scale=20,mask =MASK).generate_from_frequencies(dictItems)

    Python之wordcloud庫使用

    一般來說。詞云的清晰度可以通過scale這個(gè)參數(shù)調(diào)節(jié)
    或者根據(jù)圖片的分辨率、大小,調(diào)節(jié)max_words和max_font_size兩個(gè)參數(shù)調(diào)整,得到字體清晰的詞云

    python詞云庫wordcloud的使用方法與實(shí)例詳解
    用到wordcloud的函數(shù):generate_from_frequencies(dictItems)。這是根據(jù)詞頻繪制

    其實(shí)也可以直接根據(jù)文本進(jìn)行繪制,但是可能得不到自己想要的效果。如 generate_from_text(text)

    為了顯示中文,需要自己將字體路徑加進(jìn)來
    font=r'C:\\Windows\\Fonts\\simhei.ttf' 路徑都是C:\Windows\Fonts\,需要什么字體調(diào)整后面的simhei.ttf’即可,這個(gè)是黑體。

    全部代碼

    import jieba import matplotlib.pyplot as plt from wordcloud import WordCloud import numpy as np import PIL.Image as Image import re''' 保存過濾時(shí)間后的文本 ''' with open('2-month.txt', encoding="utf8") as fp:text = fp.read()text1 = re.sub(r"\d{4}-\d{2}-\d{2} \d{1,2}:\d\d:\d\d|[表情]|[圖片]|\[|\]", "", text) # 得到過濾時(shí)間后的文本 text2 = text1.replace('渡','王彥景') fh = open('2_clean_temp.txt', 'w', encoding='utf-8') fh.write(text2) fh.close() ''' 進(jìn)行結(jié)巴分詞 ''' with open('2_clean_temp.txt', encoding="utf8") as fp:text1 = fp.read() jieba.load_userdict("./dict.txt")#加載自定義字典 word_list = jieba.lcut(text1, cut_all=False) # 分詞 # print(word_list)word_count={} stopwords = [line.strip() for line in open("stopword.txt",encoding="UTF-8").readlines()] for word in word_list:if word not in stopwords:word_count[word] = word_count.get(word, 0) + 1 items = list(word_count.items()) items.sort(key=lambda x: x[1], reverse=True) dictItems = dict(items) # print(dictItems) image_background = Image.open('2.jpg') MASK = np.array(image_background)font=r'C:\\Windows\\Fonts\\simhei.ttf' my_wordcloud = WordCloud(background_color="white", max_words=500, max_font_size=45,font_path=font,scale=20,mask =MASK).generate_from_frequencies(dictItems)plt.imshow(my_wordcloud) # 顯示詞云圖 plt.axis('off') # 是否顯示x軸、y軸下標(biāo) plt.show()

    到此就結(jié)束啦,倆人都很傻哈哈哈哈,情人節(jié)一天沒咋理對方,都在制作情人節(jié)禮物哈哈哈哈。
    到了晚上才發(fā)現(xiàn)我給她做了詞云,她給我做了音樂視頻嘿嘿。
    這是最終我做的視頻的效果:附上b站鏈接

    總結(jié)

    以上是生活随笔為你收集整理的情人节礼物------用她的照片和我们的聊天记录生成词云~的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。