banner
毅种循环

毅种循环

请将那贻笑罪过以逐字吟咏 如对冰川投以游丝般倾诉

彼女とのWeChatチャット履歴をエクスポートし、ワードクラウドで私たちが何を話しているのか分析しました。

一度面白い試み

前言#

誰もが知っているように、WeChat のチャットデータベースは暗号化されていますが、解読不可能ではありません。
現在主流の WeChat のチャット履歴を取得する方法は、ROOT 化されたスマートフォンを使用して抽出することです;2 つ目は Apple iTunes のバックアップ(非暗号化、非侵入型バックアップ)を通じて取得することです。
ここで述べる 2 つの方法については、ネット上に多くの記事がありますので、興味のある読者は検索してみてください。このプロセスについては詳述しませんが、この記事では PC クライアントを使用して実行できる侵入型の方法を主に説明します。

过程:#

WeChat のチャット履歴はデータベースに保存されており、形式は sqlite、つまり拡張子は DB です。
しかし、暗号化されているため、まずは解読キーを取得する必要があります。解読キーの取得は一般的にメモリ内にあるため、WeChat がログイン状態でなければなりません。

解密数据库:#

WeChat データはデフォルトで C:\Users\xxx\Documents\WeChat Files\ にあり、チャット履歴データベースはそのディレクトリ内の wxid_xxxx\Msg\Multi にあります。チャット履歴ファイルの名前は一般的に MSG.db で、240MB を超えると自動的に MSG1.db が生成されます。
image.png

参考 GitHub スクリプト利用:https://github.com/0xlane/wechat-dump-rs
現在私の WeChat バージョンは 3.9.7.25 で、このバージョンまでは解読可能です。作者が更新したベースアドレスも同様に有効です。
-a を実行すると、temp ディレクトリに暗号化されていない MSG.db ファイルが生成されるはずです。
navicat などで開くことができます。
image.png
チャット履歴の一部は MSG テーブルに存在し、概ね以下のようになります:

image.png
注目すべきフィールドは:
strtalker: 送信者の WeChat ID
StrContent:メッセージのキーワード

ID がわからない場合も簡単です。過去に送信したチャット履歴を全体検索し、見つけたらその値のすべての一致をフィルタリングします。
その後、ダンプを使用すれば良いです。ここでは、ダンプを xlsx ファイルにすることをお勧めします。

表に入れるとさらに簡単です。StrContent の行を TXT にフィルタリングし、すべての文字と英語を除去します(厳密ではありません)。
私は Python を使って表を処理しました。参考コードは以下の通りです:

import pandas as pd
import re

# 表データを読み込む
df = pd.read_excel('cy.xlsx', sheet_name='Sheet1')

# 無効な空行データを削除
df = df.dropna(subset=['yue'])  # 'column_name'を処理したい列名に置き換えてください

# 文書内容を取得
documents = df['yue'].tolist()  # 'column_name'を処理したい列名に置き換えてください

# 中文停用词表を読み込む
with open('hit_stopwords.txt', 'r', encoding='utf-8') as file:
    stop_words = [line.strip() for line in file]

# 分詞と停用詞の除去
tokenized_documents = [word_tokenize(doc) for doc in documents]
filtered_documents = [[word for word in doc if word not in stop_words] for doc in tokenized_documents]

# 词频を計算
word_frequencies = Counter([word for doc in filtered_documents for word in doc])

# 词频DataFrameを作成
df_word_freq = pd.DataFrame(list(word_frequencies.items()), columns=['词语', '词频'])

# 词频を降順にソート
df_word_freq = df_word_freq.sort_values(by='词频', ascending=False)

# 結果を新しいExcelファイルに保存
df_word_freq.to_excel('word_frequencies.xlsx', index=False)

print("词频結果が word_frequencies.xlsx ファイルに保存されました。")

処理後の結果はおおよそこんな感じです。例えば私のチャット履歴:
image.png

统计词频并分词#

分詞には中文停用詞表が必要です。ここではハルビン工業大学の停用詞表を使用しています。
プロジェクトのアドレスは以下の通りです:https://github.com/goto456/stopwords/blob/master/hit_stopwords.txt
分詞コードの例:

import pandas as pd
import nltk
from nltk.tokenize import word_tokenize
from collections import Counter

# 文書データを読み込む
df = pd.read_excel('processed_file.xlsx', sheet_name='Sheet1')

# 無効な空行データを削除
df = df.dropna(subset=['yue'])  # 'column_name'を処理したい列名に置き換えてください

# 文書内容を取得
documents = df['yue'].tolist()  # 'column_name'を処理したい列名に置き換えてください

# 中文停用詞表を読み込む
with open('hit_stopwords.txt', 'r', encoding='utf-8') as file:
    stop_words = [line.strip() for line in file]

# 分詞と停用詞の除去
tokenized_documents = [word_tokenize(doc) for doc in documents]
filtered_documents = [[word for word in doc if word not in stop_words] for doc in tokenized_documents]

# 词频を計算
word_frequencies = Counter([word for doc in filtered_documents for word in doc])

# 词频DataFrameを作成
df_word_freq = pd.DataFrame(list(word_frequencies.items()), columns=['词语', '词频'])

# 词频を降順にソート
df_word_freq = df_word_freq.sort_values(by='词频', ascending=False)

# 結果を新しいExcelファイルに保存
df_word_freq.to_excel('word_frequencies.xlsx', index=False)

print("词频結果が word_frequencies.xlsx ファイルに保存されました。")

結果は以下の通り:
image.png

ハハハハ、結構楽しいですね。

生成词云#

ネット上には多くのプロジェクトがあり、ワードクラウドを生成できますが、私は適切なものを見つけられず、オンラインサービスを使用しました。興味がある方はオンラインサービスを使用してみてください。良いワードクラウド分析のものがあれば、コメントで教えてください。
内容はおおよそ以下の通りです:

image.png

私たちの間のチャットは本当に面白いです。毎日「ハハハ」と言っています(冗談です)。

End#

再度、記事に言及されているすべての著者と参考コードに感謝します。
皆さんの生活が楽しく、毎日愛に満ちていますように。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。