情人节礼物------用她的照片和我们的聊天记录生成词云~
用到的知識點
第一步
從電腦版蛐蛐導出聊天記錄。(手機一般不可以)
點擊消息管理,右鍵點擊想導出的聯系人
點擊導出消息記錄即可,選擇保存方式為.txt
這里是在電腦消息記錄和手機同步的情況下的操作。如果在自己不常用的電腦上可能消息記錄并不全。需要手機進行消息記錄同步,網上也有教程。
txt文件格式是這樣子滴,xxx是昵稱
第二步
時間和昵稱是無用文本消息,需要進行過濾【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讀寫文件和正則表達式過濾的代碼如下:
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) # 得到過濾時間后的文本 text2 = text1.replace('y','xxx') #y是原本的昵稱,xxx是需要替換為的字符串 fh = open('2_clean_temp.txt', 'w', encoding='utf-8') fh.write(text2) fh.close()Python 正則表達式|菜鳥教程
python re模塊(正則表達式) sub()函數詳解
簡單來說,sub函數傳入三個必選參數,分別是pattern, repl, string
pattern
模式字符串 ,即要匹配的字符串
代碼中
表示匹配4位整數-2位整數-2位整數 1或2位整數:2位整數:2位整數 ------匹配時間
[表情] 和 [圖片] ------匹配txt無法顯示的表情和圖片
repl
要替換為的字符串,代碼中替換為空字符串
string
要處理的文本
過濾完成后將文本保存
第三步
接著打開過濾后的文本進行jieba分詞,同時定義自己的詞典。即某些詞不會被分開【3】
你們肯定會有一些屬于你們之間的稱呼哈哈哈哈,或者是一些地名等等,為了不讓它們被分開,所以定義自己的詞典。
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) # 查看分詞結果,更新自定義詞典詞典格式為:一個詞占一行;每一行分三部分:詞語、詞頻(可省略)、詞性(可省略),用空格隔開,順序不可顛倒。
例如:
這里用新建txt文件作為詞典比較方便。
jieba分詞
jieba分詞詳解
有三種匹配模型,精確模式、全模式和搜索引擎模式:
得到結果
sentence = "今天天氣真好。" #---------------result---------------- '今天天氣 真 好' # 精確模式 '今天 今天天氣 天天 天氣 真好' # 全模式 '今天 天天 天氣 今天天氣 真 好' # 搜索引擎模式如果調用lcut,則得到list結果
第四步
刪除停用詞并統計詞頻方便后續詞云繪制【4】
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) #重新轉換為字典,繪制詞云要用到這里停用詞用到哈工大的停用詞列表,自己再添加了一些。
中文停用詞表——哈工大停用詞表
可以自己新建txt文件,將停用詞復制進去。
第五步
用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軸下標 plt.show()如果只想得到矩形圖片的詞云,例如:
那就不需要前兩行代碼
如果想生成這樣效果的:
那就需要摳圖。需要將想要詞云覆蓋的部分摳出來,其他部分設置為白色背景。寫入前兩行代碼,以及調用如下代碼:
Python之wordcloud庫使用
一般來說。詞云的清晰度可以通過scale這個參數調節
或者根據圖片的分辨率、大小,調節max_words和max_font_size兩個參數調整,得到字體清晰的詞云
python詞云庫wordcloud的使用方法與實例詳解
用到wordcloud的函數:generate_from_frequencies(dictItems)。這是根據詞頻繪制
其實也可以直接根據文本進行繪制,但是可能得不到自己想要的效果。如 generate_from_text(text)
為了顯示中文,需要自己將字體路徑加進來
font=r'C:\\Windows\\Fonts\\simhei.ttf' 路徑都是C:\Windows\Fonts\,需要什么字體調整后面的simhei.ttf’即可,這個是黑體。
全部代碼
import jieba import matplotlib.pyplot as plt from wordcloud import WordCloud import numpy as np import PIL.Image as Image import re''' 保存過濾時間后的文本 ''' 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) # 得到過濾時間后的文本 text2 = text1.replace('渡','王彥景') fh = open('2_clean_temp.txt', 'w', encoding='utf-8') fh.write(text2) fh.close() ''' 進行結巴分詞 ''' 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軸下標 plt.show()到此就結束啦,倆人都很傻哈哈哈哈,情人節一天沒咋理對方,都在制作情人節禮物哈哈哈哈。
到了晚上才發現我給她做了詞云,她給我做了音樂視頻嘿嘿。
這是最終我做的視頻的效果:附上b站鏈接
總結
以上是生活随笔為你收集整理的情人节礼物------用她的照片和我们的聊天记录生成词云~的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新能源产业写入2021年11省两会政府工
- 下一篇: 【No server address l