何ができるか
WeChat チャット記録を視覚化するために使用されます。
次の画像を自動生成できます。
してはいけないこと
ソフトウェアLiuhenを使用すると、Github には 22.8k のスターがあり、このソフトウェアはバージョン 1.1.1 まで繰り返されています。これは非常に成熟したソフトウェアであり、信頼できます。
GitHub アドレス: LC044/WeChatMsg: WeChat チャット記録を抽出し、HTML、Word、および CSV ドキュメントにエクスポートして永続的に保存し、チャット記録を分析して年次チャット レポートを生成します (github.com)
ソフトウェアWebサイト:https://memotrace.lc044.love/
exeをダウンロードしてインストールするだけです。
ほとんどの人のチャット記録は携帯電話にあり、コンピュータ上のチャット記録は不完全だと思います。そのため、まず携帯電話のチャット履歴をコンピュータに同期します。携帯電話を変更するときに、「WeChat」-「設定」-「チャット」-「チャット履歴の移行」および「バックアップ」-「移行」を経験したことがあるかもしれません。チャット履歴のサイズに応じて、数分待ちます。
復号化2:個人情報を入力し、情報を取得します。次に、復号化します。起動を開始します。
その後、友達間のチャット履歴をエクスポートできます。文字化けを軽減するため、写真、動画、絵文字はチェックしないでください。写真/動画/ファイルはエクスポートされません。
エクスポートが完了したら、Trace を終了します。ソフトウェアの同じディレクトリにデータ ディレクトリがあり、その中をクリックすると、 data/聊天记录/
の下に csv ファイルが作成されます。おそらく次のようになります。
この csv ファイルを WechatVisualization のinput_data/
ディレクトリにコピーします。
注: Trace を使用すると、アニュアル レポートのエクスポートの分析 + 視覚化機能も統合されていることがわかります。しかし、生成されるアニュアル レポートをよく見てみると、言葉があまりにも大雑把であることがわかります。ワードクラウド図は乱雑でデータクリーニングが完了していないため、自分で開発したいと考えています。ただし、 Trace Production に関するレポートがすでに非常に優れていると思われる場合は、以下の内容を読む必要はありません。
ユーザーはPython の基本的な知識(コードの実行方法) が必要で、Anaconda または Python (バージョン 3.7 以上) がコンピューターにインストールされている必要があります。 Anaconda を使用する場合は、新しい環境を作成するのが最善です。
必要なサードパーティ ライブラリを順番にインストールします。
サードパーティのライブラリ | 関数 |
---|---|
パンダ | フォーム処理 |
マットプロットライブラリ | 棒グラフを描く |
ピヤムル | 設定ファイルの読み取り |
ジエバ | 中国語の単語の分割 |
tqd | プログレスバーの印刷 |
パイチャート | 単語の雲を描く |
ワンクリックインストール方法:
pip install -r requirements.txt
この記事ではインストール方法については説明しませんが、基本的にはpip install
です。問題が発生した場合は、オンラインで解決策を検索してください。
構成ファイルはconfig.yml
で、これはメモ帳で開くことができます。もちろん、構文の強調表示が利用できるため、コード エディターを使用することをお勧めします。
自分で設定できる内容としては、
# 输入数据
# 下面这些文件都放在input_data目录下
# 聊天记录
msg_file : msg.csv
# 微信表情中英文对照表
emoji_file : emoji.txt
# 停用词表,一般是没有实际意义的词,不想让被分析到的词都放在这里
stopword_file : stopwords_hit_modified.txt
# 词语转换表,用于合并意义相近的词,比如把“看到”、“看见”、“看看”都转换为“看”
transform_file : transformDict.txt
# 用户自定义词典,用于添加大部分字典没有的、但自己觉得不能分开的词,如i人、e人、腾讯会议
user_dict_file : userDict.txt
# 名字
# name1是自己的名字
name1 : person 1
# name2是对方的名字
name2 : person 2
# name_both是双方共同的名字
name_both : both
# 局部参数
# top_k是绘制前多少个词
# 如果词或表情的出现频次低于word_min_count或emoji_min_count,就不会被分析
# figsize是绘图图窗尺寸,第一个是宽度,第二个是高度
word_specificity :
top_k : 25
word_min_count : 2
figsize :
- 10
- 12
emoji_specificity :
emoji_min_count : 1
top_k : 5
figsize :
- 10
- 12
word_commonality :
top_k : 25
figsize :
- 10
- 12
emoji_commonality :
top_k : 5
figsize :
- 12
- 12
time_analysis :
figsize :
- 12
- 8
コード エディターでmain.py
直接実行することも、コマンド ラインでpython main.py
実行することもできます (先に作成した環境をアクティブ化します)。
実行が成功すると、次の情報が表示されます。
生成されたイメージは、現在のディレクトリのfigs
フォルダーにあります。
生成されたイメージを確認してください。一部の単語が目的のものではない場合や、必要な単語が分割されている場合があります。この場合は、 input_data/
ディレクトリに移動して各ファイルを変更してください。これは継続的に反復されるプロセス、つまりデータ クリーニングであり、比較的時間がかかります。ただし、比較的高品質の結果が必要な場合は、忍耐強く慎重にデータをクリーンアップすること以外に方法はありません。
emoji.txt
WeChat 絵文字の中国語版と英語版です。 WeChat の絵文字は、チャット記録では [facepalm] または [Facepalm] の形式で表示されます。チャット履歴に中国語と英語の両方に[xxx]があったため、比較表を作成し、英語の単語をすべて中国語に置き換えました。一部の絵文字がまだ英語である場合は、中国語を追加して統合できます。stopwords_hit_modified.txt
はストップワードのリストです。 「今」、「進行中」、「まるで」(私はそう思います)などの言葉は実際には意味を持たず、カウントされるべきではなく、直接削除されるべきです。生成された結果に表示したくない単語があると思われる場合は、ここに追加できます。transformDict.txt
いくつかの単語を別の単語に変換します。 「見る」、「見る」、「見る」、「見る」などの同義語は別々に数えることもできますが、必ずしも「見る」という 1 つの単語にまとめる必要はありません。これを行うには、元の単語と変換された単語を 2 つの列に記入するだけです。 2 つの列はタブ文字で区切られていることに注意してください。usreDict
「e人」、「i人」、「Tencent Conference」など、従来の辞書に載っていない単語を追加できます。これらの単語を自分で追加しないと、「e」、「i」、「people」、「Tencent」、「meeting」などの単語に分割される可能性がありますが、これは私たちが望んでいることではありません。 。 ValueError: 形状が一致しません: オブジェクトを単一の形状にブロードキャストできません
ValueError: 通常、set_ticks の呼び出しから得られる、FixedLocator の場所の数 (5) が目盛りラベルの数 (1) と一致しません。
考えられる理由: 上記 2 つのエラーが発生する場合は、対応する位置の top_k または min_count の設定が大きすぎ、チャット レコードの量が少なすぎて、描画できる単語数が少ないことが考えられます。
解決策: これを念頭に置いて、プログラムの各小さなセクションの実行時に設定できる最大パラメータ値を出力しました。二重の水平線が出力された場合は、このセクションのパラメータが正しく設定されており、プログラムが正常に実行されていることを意味します。対応する位置のパラメータの設定が大きすぎないかを確認し、適切に下げることができます。
parse.py
input_data/
内のファイルを読み取り、単語の分割を実行します。 keywords.csv
を生成し、それをtemp_files/
に配置します。これにより、元のデータに基づいて 2 つの列が追加されます。1 つの列は分割された単語で、もう 1 つは抽出された WeChat 絵文字です。word_cloud.py
単語の出現頻度を計算し、pickle ファイルkeyword_count.pkl
を生成してtemp_files/
に置き、さらにワードクラウドを作成してfigs/
に置きます。figs/
に配置されます。emoji_count.pkl
を生成してtemp_files/
に配置し、絵文字の特異性を計算します。写真はfigs/
に配置されます。figs/
に配置されます。figs/
に配置されます。figs/
に配置されます。 あなたが特定の言葉を送ったことを思い出してください
排他的とは、あなたは頻繁に何かを言うが、相手はあまりそれを言わないことを意味します(逆も同様)。排他性についての私の考察は次のとおりです。A、B、C という 3 つの単語があるとします。
言葉 | 自分自身の周波数× | 相手の頻度y |
---|---|---|
あ | 4 | 0 |
B | 100 | 96 |
C | 1 | 0 |
私自身としては、A の独占性が最も高くなければならないことは明らかです。単語 B については、2 人の時間は 4 回異なりますが、基数は比較的大きく、4 回の間に明らかな対照はありません。 C に関しては、基数が少なすぎるため、C が独自の語彙であると言うのはあまり信頼できません。
特異性の尺度を次のようにします。
底を掛けるとどうなるでしょうか?基本は合計回数です
したがって、私の実装では、項頻度の合計を乗算する代わりに、項頻度の最大値を乗算します。つまり、 $$ alpha_i=dfrac{x_i-y_i}{x_i+y_i}cdotmathrm{max} (x_i ,y_i) $$ これにより、単語 A の特異性が最も高いことが保証されます。
共有とは、2 人が頻繁に言葉を言うことを示します。したがって、まず一方の当事者が一度も言っていない言葉を排除します。これを行うには、まず、双方が話した言葉の交差部分を取得します。
ここでも、A、B、C という 3 つの単語があると仮定します。
言葉 | 自分自身の周波数× | 相手の頻度y |
---|---|---|
あ | 50 | 50 |
B | 1000 | 1 |
C | 1 | 1 |
単語 B は、他の人よりも自分が言った回数がはるかに多いため、共通性は明らかに非常に低いです。両者が単語 C をほぼ同じ回数言っていますが、基数が小さすぎるため、信頼できる結論を導き出すことができません。したがって、単語 A が最も高い共通性を持ちます。どのように計算するのでしょうか?
共同性は排他性の反対なので、排他性の逆数を使用できますか?分母が ということもあり、気分が悪いです。
このために、調和平均を使用しました。 $$ beta=dfrac{2}{1/x+1/y} $$ ここで他の平均ではなく調和平均を使用する理由は、調和平均が4つの平均の中で最も小さい数値である「共通性」は、双方が頻繁に話さなければならないことを強調しており、一方が話している間にもう一方が話していないというだけではいけない、つまり、一方がどれだけ話しても共通性に影響を与えることになります。ワード B (1000,1) など、非常に小さいものもあります。
調和平均を使用すると、単語 A に最大の共通性があることが保証されます。
最後まで読みたくない場合は、ソースコードを見てください。
このプロジェクトには痕跡を残す機能は組み込まれていませんが、痕跡からデータを抽出する機能を追加すると、より簡単な処理が実現できます。しかし、著者の能力と時間の制約により、このアイデアは現時点では実行できません。その他の機能不足や改善点については、GitHubや公式アカウントのバックグラウンドにメッセージを残していただければ幸いです。同じ考えを持つ人は開発者チームに参加することを歓迎し、一緒により良い WechatVisualization を開発しましょう。