Python 情人節(jié)告白特技:隱藏在聊天記錄里的珍貴禮物

明天又雙叒叕是一年一度的戀愛節(jié)了!
又是一波絕好的機會!恩愛秀起來!
購物車清空!禮物送起來!朋友圈曬起來!

等等!什么?!
你還沒準備好禮物么?
但其實你不知道要送啥?
原來又雙叒叕要到
全民不知道送什么禮物的系列日子了…

哎呦 你們這些
磨人的?。╨ao)妖(you)精(tiao)!
Python倒是覺得你還可以搶救一下!

說到詞云應該不陌生,不知道的童靴往下看
詞云,就是把網(wǎng)絡文本中出現(xiàn)頻率較高的
"關(guān)鍵詞"予以視覺上的突出
瀏覽者只要一眼掃過文本就可以領(lǐng)略其主旨

瞧 這是不是一個有聲音、有畫面的小愛心~
今天 我們采集情侶們之間的聊天日常
用此制作一份只屬于你們的小浪漫!
一、導出自己和對象的數(shù)據(jù)~
微信的備份功能并不能直接給你導出文本格式,它導出來其實是一種叫sqlite的數(shù)據(jù)庫。如果說用網(wǎng)上流傳的方法提取文本數(shù)據(jù),iOS則需要下載itunes備份整機,安卓則需要本機的root權(quán)限,無論是哪種都非常麻煩,在這里給大家介紹一種不需要整機備份和本機root權(quán)限,只導出和對象的聊天數(shù)據(jù)的方法。
那就是使用安卓模擬器導出,這樣既能ios/安卓通用,又能夠避免對本機造成不良影響,首先需要用電腦版的微信備份你和你對象的聊天記錄。以windows系統(tǒng)為例:
1. 下載夜神模擬器
2. 在夜神模擬器中下載微信
3. 使用windows客戶端版的微信進行備份,如圖左下角

4. 點擊備份聊天記錄至電腦

5. 手機端選擇備份的對象
點擊進入下方的選擇聊天記錄,然后選擇和你對象的記錄


6. 導出完畢后打開模擬器,登錄模擬器的微信

7. 登錄成功后返回電腦版微信登錄,打開備份與恢復,選擇恢復聊天記錄到手機


選擇恢復記錄至手機
8. 勾選我們剛剛導出的聊天記錄,并在手機上點擊開始恢復

9. 打開夜神模擬器的root權(quán)限

10. 用模擬器的瀏覽器百度搜索RE文件管理器,下載(圖一)安裝后打開,會彈出對話框讓你給予root權(quán)限,選擇永久給予,打開RE文件管理器(圖二),進入以下文件夾(圖三), 這是應用存放數(shù)據(jù)的地方。
/data/data/com.tencent.mm/MicroMsg

圖一

圖二

然后進入一個由數(shù)字和字母組合而成的文件夾,如上 圖三 的
4262333387ddefc95fee35aa68003cc5
11. 找到該文件夾下的EnMicroMsg.db文件,將其復制到夜神模擬器的共享文件夾(圖四)。
共享文件夾的位置為 /mnt/shell/emulated/0/others ( 圖五 )。
現(xiàn)在訪問windows的 C:\Users\你的用戶名\Nox_share\OtherShare 獲取該數(shù)據(jù)庫文件( EnMicroMsg.db )。

圖四

圖五
12. 導出該數(shù)據(jù)庫后,使用一款叫 sqlcipher 的軟件讀取數(shù)據(jù)
(鏈接: https://pan.baidu.com/s/1Im3n02yseo-4IxeDY9srqQ 提取碼: ka4z)
在這之前,我們還需要知道該數(shù)據(jù)庫的密碼,根據(jù)前人的經(jīng)驗,該密碼的公式如下
字符串 IMEI (手機序列號) UIN(用戶信息號)
將該字符串進行MD5計算后的前七位便是該數(shù)據(jù)庫的密碼
如 "355757010761231 857456862" 實際上中間沒有空格,然后放入MD5計算取前面七位數(shù)字,后續(xù)會詳細介紹
哇,真是“簡單易懂”啊,沒關(guān)系,接下來告訴大家IMEI和UIN怎么獲得。
首先是IMEI,在模擬器右上角的系統(tǒng)設(shè)置 —— 屬性設(shè)置里就可以找得到啦,如圖所示。

現(xiàn)在我們獲得了IMEI號,那UIN號呢?
同樣地,用RE文件管理器打開這個文件
/data/data/com.tencent.mm/shared_prefs/system_config_prefs.xml

長按改文件,點擊右上角的三個點—選擇打開方式—文本瀏覽器,找到default_uin,后面的數(shù)字就是了 !

得到這兩串數(shù)字后,就可以開始計算密碼啦,如果我的IMEI是355757010762041,Uin是857749862,那么合起來就是355757010762041857749862,將這串數(shù)字放入免費MD5在線計算:
https://md5calculator.chromefans.org/?langid=zh-cn
得到的數(shù)字的前七位就是我們的密碼了,像這一串就是 6782538.
如果uin是負的話,可以試試uin拼接手機IMEI碼(就是和正的相反,進行拼接),取MD5的32位小寫密文前7個字符。再不行就重裝模擬器。
然后我們就可以進入我們的核心環(huán)節(jié):使用 sqlcipher 導出聊天文本數(shù)據(jù)!

sqlcipher
點擊 File - open database - 選擇我們剛剛的數(shù)據(jù)庫文件,會彈出框框讓你輸入密碼,我們輸入剛剛得到的七位密碼,就可以進入到數(shù)據(jù)庫了,選擇message表格,這就是你與你的對象的聊天記錄!

我們可以將它導出成csv文件:File - export - table as csv.
接下來,我們將使用Python代碼,將里面真正的聊天內(nèi)容:content信息提取出來,如下所示。雖然這個軟件也允許select,但是它select后不允許導出,非常不好用,因此還不如我們自己寫一個:

將該文件命名為extract.py,windows打開CMD / macOS系統(tǒng)打開Terminal 進入到該文件夾下,執(zhí)行命令:
python extract.py記得把生成csv文件的編碼格式轉(zhuǎn)換成utf-8哦,不然可能會運行不下去:

用記事本打開—文件—另存為—編碼改為UTF-8即可
當然你還可以用正則表達式去除以下內(nèi)容
微信發(fā)送的數(shù)據(jù):wxid.*
表情:\[.*\]
不過我覺得這些也是必要的聊天信息之一,留著也無妨,因此在這里就不加入進去啦,有需要的同學可以百度搜索python 正則表達式,學習正則表達式的使用。
最后得到的文本格式就是一行一句聊天內(nèi)容,處理后我們就準備好進入下一個環(huán)節(jié)了!那就是令人激動的!生成詞云??!
二、根據(jù)第一步得到的聊天數(shù)據(jù)生成詞云
1. 導入我們的聊天記錄,并對每一行進行分詞
聊天記錄是一行一行的句子,我們需要使用分詞工具把這一行行句子分解成由詞語組成的數(shù)組,這時候我們就需要用到結(jié)巴分詞了。
分詞后我們還需要去除詞語里一些語氣詞、標點符號等等(停用詞),然后還要自定義一些詞典,比如說你們之間恩恩愛愛的話,一般結(jié)巴分詞是無法識別出來的,需要你自行定義,比如說:小傻瓜別感冒了,一般分詞結(jié)果是:
小/傻瓜/別/感冒/了
如果你把“小傻瓜”加入到自定義詞典里(我們下面的例子里是mywords.txt),則分詞結(jié)果則會是:
小傻瓜/別/感冒/了
下面對我們的聊天記錄進行分詞:

在這個函數(shù)里,我們使用了codecs打開我們的聊天記錄文件,然后進行結(jié)巴分詞,最終返回一個包含所有詞語的數(shù)組。記得運行前要安裝jieba分詞包,默認你已經(jīng)安裝了python3,如果沒有請查閱這個文檔:
https://www.liaoxuefeng.com/wiki/1016959663602400/1016959856222624
windows打開CMD / macOS系統(tǒng)打開Terminal 輸入:
pip install jieba安裝完成后,在編輯器中輸入我們剛剛的python代碼,我將其命名為segment.py,切記在同個目錄下放置 聊天記錄.txt 及 自定義詞表 mywords.txt, 然后在CMD/Terminal中輸入命令運行:
python segment.py你就可以看見你們的聊天記錄分詞后的效果啦
2. 計算分詞后的詞語對應的頻數(shù)
為了方便計算,我們需要引入一個叫pandas的包,然后為了計算每個詞的個數(shù),我們還要引入一個叫numpy的包,cmd/terminal中輸入以下命令安裝pandas和numpy:
pip install pandas==0.25.1
pip install numpy詳細的解析我都寫在下方的注釋里啦,大家可以自行閱讀并實踐。不過需要注意的是,里面的load_file_segment()是我們第一步里的函數(shù),如果你不知道如何把這兩個步驟合在一起,沒關(guān)系,最后我們會提供一份完整的代碼.

同第一步一樣,運行這份代碼你就可以看到每個詞語及其對應的頻數(shù)。需要注意的是,這里有個加載停用詞的操作,你需要把停用詞表放在當前文件夾下,這里提供一份停用詞表下載
stopwords.txt: https://pythondict.com/wp-content/uploads/2019/08/2019080607572893.txt
三、生成詞云
終于到了最后一部分啦!你是不是開心而又滿懷激動的心情呢(滑稽,在這一步開始之前,我們需要先安裝需要使用的包,我們需要用到的包有:
pip install matplot
pip install scipy==1.2.1
pip install wordcloud打開CMD/Terminal 輸入以上命令即可安裝,加上之前兩個步驟的包,有:
pip install jieba
pip install codecs
pip install pandas==0.25.1
pip install numpy如果你在安裝這些包的時候出現(xiàn)了什么問題,請記得在我們下方評論區(qū)提出,我們會一一解答的哦。
運行目錄的文件結(jié)構(gòu)如下:
聊天記錄.txt
mywords.txt(如果你沒有自定義的詞的話可以為空)
stopwords.txt
wordCloud.py
semhei.tff
ai.jpg (可以為任意的圖片,你喜歡就行)
完整代碼,wordCloud.py 如下,附有詳細的解析:

值得注意的是這里面的bimg和wordcloud對象的生成,我們知道png格式背景一般是透明的,因此如果你的圖像是png格式的話,其生成詞云的時候背景色應該設(shè)為None,然后mode應該設(shè)為RGBA。
我們還可以控制詞云字體的大小和數(shù)目的多少,使用下面這兩個參數(shù):
max_font_size=60, max_words=3000
調(diào)用方式如下所示:
wordcloud = WordCloud(background_color='white', mask=bimg, max_font_size=x, max_words=y, font_path='simhei.ttf')運行前,確保安裝了所有的包,并且當前目錄下有我們所需要的所有文件哦
下面就可以用我們的聊天記錄,畫心型詞云啦?。。。?/span>
CMD/Terminal 進入代碼所在文件夾,運行:python wordcloud.py
得到的圖像如下:



