馬上又雙叒叕是一年一度的戀愛節了!
又是一波絕好的機會!恩愛秀起來!
購物車清空!禮物送起來!朋友圈曬起來!
等等!什麼?!
你還沒準備好禮物麼?
但其實你不知道要送啥?
原來又雙叒叕要到
全民不知道送什麼禮物的系列日子了…
哎呦 你們這些
磨人的小(lao)妖(you)精(tiao)!
Python倒是覺得你還可以搶救一下!
說到詞雲應該不陌生,不知道的童靴往下看
詞雲,就是把網絡文本中出現頻率較高的
"關鍵詞"予以視覺上的突出
瀏覽者只要一眼掃過文本就可以領略其主旨
瞧 這是不是一個有聲音、有畫面的小愛心~
今天 我們採集情侶們之間的聊天日常
用此製作一份只屬於你們的小浪漫!
一、導出自己和對象的數據~微信的備份功能並不能直接給你導出文本格式,它導出來其實是一種叫sqlite的資料庫。如果說用網上流傳的方法提取文本數據,iOS則需要下載itunes備份整機,安卓則需要本機的root權限,無論是哪種都非常麻煩,在這裡給大家介紹一種不需要整機備份和本機root權限,只導出和對象的聊天數據的方法。
那就是使用安卓模擬器導出,這樣既能ios/安卓通用,又能夠避免對本機造成不良影響,首先需要用電腦版的微信備份你和你對象的聊天記錄。以windows系統為例:
1. 下載夜神模擬器2. 在夜神模擬器中下載微信點擊進入下方的選擇聊天記錄,然後選擇和你對象的記錄
6. 導出完畢後打開模擬器,登錄模擬器的微信選擇恢復記錄至手機
8. 勾選我們剛剛導出的聊天記錄,並在手機上點擊開始恢復
圖一
圖二
圖三然後進入一個由數字和字母組合而成的文件夾,如上 圖三 的
4262333387ddefc95fee35aa68003cc5
11. 找到該文件夾下的EnMicroMsg.db文件,將其複製到夜神模擬器的共享文件夾(圖四)。共享文件夾的位置為 /mnt/shell/emulated/0/others ( 圖五 )。現在訪問windows的 C:\Users\你的用戶名\Nox_share\OtherShare 獲取該資料庫文件( EnMicroMsg.db )。圖四
圖五
在這之前,我們還需要知道該資料庫的密碼,根據前人的經驗,該密碼的公式如下
字符串 IMEI (手機序列號) UIN(用戶信息號)
將該字符串進行MD5計算後的前七位便是該資料庫的密碼
如 "355757010761231 857456862" 實際上中間沒有空格,然後放入MD5計算取前面七位數字,後續會詳細介紹哇,真是「簡單易懂」啊,沒關係,接下來告訴大家IMEI和UIN怎麼獲得。
首先是IMEI,在模擬器右上角的系統設置 —— 屬性設置裡就可以找得到啦,如圖所示。
現在我們獲得了IMEI號,那UIN號呢?
同樣地,用RE文件管理器打開這個文件
/data/data/com.tencent.mm/shared_prefs/system_config_prefs.xml
長按改文件,點擊右上角的三個點—選擇打開方式—文本瀏覽器,找到default_uin,後面的數字就是了 !
得到這兩串數字後,就可以開始計算密碼啦,如果我的IMEI是355757010762041,Uin是857749862,那麼合起來就是355757010762041857749862,將這串數字放入免費MD5在線計算
得到的數字的前七位就是我們的密碼了,像這一串就是 6782538. 如果uin是負的話,試試uin拼接手機IMEI碼(直接連在一起算MD5),取MD5的32位小寫密文前7個字符。
然後我們就可以進入我們的核心環節:使用 sqlcipher 導出聊天文本數據!
sqlcipher
點擊 File - open database - 選擇我們剛剛的資料庫文件,會彈出框框讓你輸入密碼,我們輸入剛剛得到的七位密碼,就可以進入到資料庫了,選擇message表格,這就是你與你的對象的聊天記錄!
我們可以將它導出成csv文件:File - export - table as csv.
接下來,我們將使用Python代碼,將裡面真正的聊天內容:content信息提取出來,如下所示。雖然這個軟體也允許select,但是它select後不允許導出,非常不好用,因此還不如我們自己寫一個:
將該文件命名為extract.py,windows打開CMD / macOS系統打開Terminal 進入到該文件夾下,執行命令:
記得把生成csv文件的編碼格式轉換成utf-8哦,不然可能會運行不下去:
用記事本打開—文件—另存為—編碼改為UTF-8即可
當然你還可以用正則表達式去除以下內容
不過我覺得這些也是必要的聊天信息之一,留著也無妨,因此在這裡就不加入進去啦,有需要的同學可以百度搜索python 正則表達式,學習正則表達式的使用。
最後得到的文本格式就是一行一句聊天內容,處理後我們就準備好進入下一個環節了!那就是令人激動的!生成詞雲!!
二、根據第一步得到的聊天數據生成詞雲1. 導入我們的聊天記錄,並對每一行進行分詞聊天記錄是一行一行的句子,我們需要使用分詞工具把這一行行句子分解成由詞語組成的數組,這時候我們就需要用到結巴分詞了。
分詞後我們還需要去除詞語裡一些語氣詞、標點符號等等(停用詞),然後還要自定義一些詞典,比如說你們之間恩恩愛愛的話,一般結巴分詞是無法識別出來的,需要你自行定義,比如說:小傻瓜別感冒了,一般分詞結果是:
小/傻瓜/別/感冒/了
如果你把「小傻瓜」加入到自定義詞典裡(我們下面的例子裡是mywords.txt),則分詞結果則會是:
小傻瓜/別/感冒/了
下面對我們的聊天記錄進行分詞:
在這個函數裡,我們使用了codecs打開我們的聊天記錄文件,然後進行結巴分詞,最終返回一個包含所有詞語的數組。記得運行前要安裝jieba分詞包,默認你已經安裝了python3,如果沒有請查閱這個文檔:
https://www.liaoxuefeng.com/wiki/1016959663602400/1016959856222624
windows打開CMD / macOS系統打開Terminal 輸入:
pip install jieba
安裝完成後,在編輯器中輸入我們剛剛的python代碼,我將其命名為segment.py,切記在同個目錄下放置 聊天記錄.txt 及 自定義詞表 mywords.txt, 然後在CMD/Terminal中輸入命令運行
python segment.py
你就可以看見你們的聊天記錄分詞後的效果啦
2. 計算分詞後的詞語對應的頻數為了方便計算,我們需要引入一個叫pandas的包,然後為了計算每個詞的個數,我們還要引入一個叫numpy的包,cmd/terminal中輸入以下命令安裝pandas和numpy:
詳細的解析我都寫在下方的注釋裡啦,大家可以自行閱讀並實踐。不過需要注意的是,裡面的load_file_segment()是我們第一步裡的函數,如果你不知道如何把這兩個步驟合在一起,沒關係,最後我們會提供一份完整的代碼.
同第一步一樣,運行這份代碼你就可以看到每個詞語及其對應的頻數。需要注意的是,這裡有個加載停用詞的操作,你需要把停用詞表放在當前文件夾下,我們這裡提供一份停用詞表下載
stopwords.txt: https://pythondict.com/wp-content/uploads/2019/08/2019080607572893.txt
3. 生成詞雲終於到了最後一部分啦!你是不是開心而又滿懷激動的心情呢(滑稽,在這一步開始之前,我們需要先安裝需要使用的包,我們需要用到的包有:
pip install matplot
pip install scipy==1.2.1
pip install wordcloud
打開CMD/Terminal 輸入以上命令即可安裝,加上之前兩個步驟的包,有:
如果你在安裝這些包的時候出現了什麼問題,請記得在我們下方評論區提出,我們會一一解答的哦。
運行目錄的文件結構如下:
完整代碼,wordCloud.py 如下,附有詳細的解析:
點擊下方閱讀原文可以獲得文字版的完整代碼!在公眾號後臺回復 情人節禮物 可以直接下載包括代碼、圖片、字體的完整資源。
值得注意的是這裡面的bimg和wordcloud對象的生成,我們知道png格式背景一般是透明的,因此如果你的圖像是png格式的話,其生成詞雲的時候背景色應該設為None,然後mode應該設為RGBA。
我們還可以控制詞雲字體的大小和數目的多少,使用下面這兩個參數:
max_font_size=60, max_words=3000
調用方式如下所示:
wordcloud = WordCloud(background_color='white', mask=bimg, max_font_size=x, max_words=y, font_path='simhei.ttf')運行前,確保安裝了所有的包,並且當前目錄下有我們所需要的所有文件哦
下面就可以用我們的聊天記錄,畫心型詞雲啦!!!:
CMD/Terminal 進入代碼所在文件夾,運行:python wordcloud.py
得到的圖像如下:
怎麼樣,是不是很好看,如果你想要這些圖片的原圖做一個屬於自己的詞雲的話,請訪問python實用寶典的官網,點擊下方閱讀原文直達!還有原始碼等著你哦!在公眾號後臺回復 情人節禮物 也可以直接下載包括代碼、圖片、字體的完整資源。最後,祝大家有情人眾人眷屬!
如果你喜歡今天的Python 教程,請持續關注Python實用寶典,如果對你有幫助,麻煩在下面點一個贊/在看,有任何問題都可以在下方留言,我們會耐心解答的!
點擊下方閱讀原文可以獲取所有代碼和連結哦!
Python實用寶典 (pythondict.com)
不只是一個寶典