que peut-on faire
Utilisé pour visualiser les enregistrements de discussion WeChat.
Les images suivantes peuvent être générées automatiquement :
Ce qu'il ne faut pas faire
En utilisant le logiciel Liuhen , Github a 22,8 000 étoiles et le logiciel a été itéré jusqu'à la version 1.1.1. C'est un logiciel très mature et digne de confiance.
Adresse GitHub : LC044/WeChatMsg : extrayez les enregistrements de discussion WeChat, exportez-les dans des documents HTML, Word et CSV pour un stockage permanent, analysez les enregistrements de discussion et générez des rapports de discussion annuels (github.com)
Site Web du logiciel : https://memotrace.lc044.love/
Téléchargez simplement l'exe et installez-le.
Je pense que les enregistrements de discussion de la plupart des gens se trouvent sur leurs téléphones portables et que les enregistrements de discussion sur leurs ordinateurs sont incomplets. Synchronisez donc d'abord l'historique des discussions du téléphone mobile avec l'ordinateur. Vous avez peut-être vécu cela lors du changement de téléphone mobile : WeChat - Paramètres - Chat - Migration et sauvegarde de l'historique des discussions - Migration. Attendez quelques minutes, en fonction de la taille de votre historique de discussion.
Décryptage 2 : Saisir les informations personnelles et obtenir des informations. Puis décryptez : commencez à démarrer !
Ensuite, vous pouvez exporter l'historique des discussions entre amis. Afin de réduire les caractères tronqués, veuillez ne pas vérifier les images, vidéos et émoticônes. L'exportation n'inclut pas les images/vidéos/fichiers !
Une fois l’exportation terminée, quittez Trace. Il y aura un répertoire de données dans le même répertoire du logiciel. Cliquez dessus et il y aura un fichier csv sous data/聊天记录/
. Cela ressemble probablement à ceci :
Copiez ce fichier csv dans input_data/
de WechatVisualization.
Remarque : lorsque vous utilisez Trace, vous constaterez peut-être qu'il intègre également la fonction d'analyse + visualisation d'exportation des rapports annuels. Cependant, si vous regardez de plus près le rapport annuel qu'il produit, vous constaterez qu'il est trop grossier. les diagrammes de nuages de mots sont compliqués et ne nettoient pas les données, c'est pourquoi je souhaite le développer moi-même. Cependant, si vous estimez que le rapport sur Trace Production est déjà très bon, vous n’avez pas besoin de lire le contenu suivant.
Les utilisateurs doivent avoir des connaissances de base en Python (comment exécuter du code) et Anaconda ou Python (version >= 3.7) a été installé sur l'ordinateur. Si vous utilisez Anaconda, il est préférable de créer un nouvel environnement.
Installez les bibliothèques tierces nécessaires dans l'ordre :
Bibliothèques tierces | Fonction |
---|---|
pandas | Traitement des formulaires |
matplotlib | Dessiner un graphique à barres |
pyyaml | Lire le fichier de configuration |
jieba | Segmentation des mots chinois |
tqd | Imprimer la barre de progression |
graphiques | Dessiner un nuage de mots |
Méthode d'installation en un clic :
pip install -r requirements.txt
La méthode d'installation n'est pas au centre de cet article. En gros, c'est pip install
. Si vous rencontrez des problèmes, veuillez rechercher des solutions en ligne, je n'entrerai pas dans les détails ici.
Le fichier de configuration est config.yml
, qui peut être ouvert avec le Bloc-notes. Bien entendu, il est préférable d'utiliser un éditeur de code car la coloration syntaxique est disponible.
Les contenus qui peuvent être définis par vous-même incluent
# 输入数据
# 下面这些文件都放在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
Vous pouvez exécuter main.py
directement dans l'éditeur de code, ou vous pouvez exécuter python main.py
dans la ligne de commande (activez d'abord l'environnement précédemment créé).
Une exécution réussie doit afficher les informations suivantes :
Les images générées se trouvent dans le dossier figs
du répertoire courant.
Vérifiez l'image générée. Vous constaterez peut-être que certains mots ne correspondent pas à ce que vous voulez, ou que certains mots que vous souhaitez ont été divisés. Dans ce cas, allez simplement dans input_data/
et modifiez chaque fichier. Il s’agit d’un processus itératif continu, c’est-à-dire de nettoyage des données, qui prend relativement du temps. Mais il n'y a pas d'autre moyen si vous souhaitez des résultats de relativement haute qualité, soyez simplement patient, faites-le avec soin et nettoyez les données.
emoji.txt
est la version chinoise et anglaise des émoticônes WeChat. Les émoticônes WeChat sont présentées sous la forme de [facepalm] ou [Facepalm] dans les enregistrements de discussion. Il y a [xxx] en chinois et en anglais dans mon historique de discussion, j'ai donc créé un tableau de comparaison et remplacé tous les mots anglais par du chinois. Si vous constatez que certaines émoticônes sont toujours en anglais, vous pouvez y ajouter du chinois pour faciliter la fusion.stopwords_hit_modified.txt
est une liste de mots vides. Des mots tels que "maintenant", "continue" et "comme si" (qui, à mon avis) n'ont aucune signification réelle ne devraient pas être comptés et devraient être éliminés directement. Si vous pensez qu'il y a des mots que vous ne souhaitez pas voir dans les résultats générés, vous pouvez les ajouter ici.transformDict.txt
convertit certains mots en d'autres mots. Les synonymes tels que « voir », « voir », « regarder » et « regarder » peuvent être comptés séparément. Ce n'est pas du tout nécessaire. Nous pouvons les fusionner en un seul mot « regarder ». Pour ce faire, remplissez simplement le mot original et le mot converti dans deux colonnes. Notez que les deux colonnes sont séparées par des caractères de tabulation .usreDict
peut ajouter des mots qui ne figurent pas dans les dictionnaires traditionnels, tels que « e人 », « i人 », « Tencent Conference », etc. Si vous n'ajoutez pas ces mots vous-même, la conséquence est qu'ils peuvent être divisés en mots tels que « e », « i », « people », « Tencent » et « meeting », ce qui n'est pas ce que nous voulons voir. . ValueError : incompatibilité de forme : les objets ne peuvent pas être diffusés vers une seule forme
ValueError : le nombre d'emplacements FixedLocator (5), généralement provenant d'un appel à set_ticks, ne correspond pas au nombre de ticklabels (1).
Raisons possibles : Lorsque les deux erreurs ci-dessus se produisent, cela peut être dû au fait que le top_k ou le min_count à la position correspondante est trop grand et que le nombre d'enregistrements de discussion est trop petit, ce qui entraîne peu de mots à dessiner.
Solution : Dans cet esprit, j'ai imprimé la valeur maximale du paramètre pouvant être définie lors de l'exécution de chaque petite section du programme. Si des lignes horizontales doubles sont imprimées, cela signifie que les paramètres de cette section sont correctement définis et que le programme s'exécute avec succès. Vous pouvez vérifier si le paramètre à la position correspondante est trop grand, puis le réduire de manière appropriée.
parse.py
lit les fichiers dans input_data/
et effectue la segmentation des mots. Générez keywords.csv
et placez-le dans temp_files/
, qui ajoute deux colonnes basées sur les données d'origine. Une colonne contient les mots divisés et l'autre les émoticônes WeChat extraites.word_cloud.py
calcule la fréquence des mots, génère le fichier pickle keyword_count.pkl
et le place dans temp_files/
, et crée également un nuage de mots et le place dans figs/
.figs/
.emoji_count.pkl
et placez-le dans temp_files/
et calculez la spécificité des émoticônes. Les images sont placées dans figs/
.figs/
.figs/
.figs/
. N'oubliez pas que vous avez envoyé un certain mot
L'exclusivité signifie que vous dites souvent quelque chose, mais que l'autre personne ne le dit pas souvent (et vice versa). Ma considération de l'exclusivité est la suivante. Supposons qu'il y ait trois mots A, B et C.
mot | propre fréquence x | Fréquence de l'autre partie y |
---|---|---|
UN | 4 | 0 |
B | 100 | 96 |
C | 1 | 0 |
Pour moi, il est évident que l'exclusivité de A doit être la plus élevée. Quant au mot B, bien que les deux personnes diffèrent 4 fois, le nombre de base est relativement grand. Il n'y a pas de contraste évident entre les 4 fois. Dans le cas de C, le nombre de base est trop petit. Dire que C est son propre vocabulaire exclusif n’est pas très fiable.
Soit la mesure de spécificité
Et si on multipliait par la base ? La base est le nombre total de fois
Ainsi, dans mon implémentation, au lieu de multiplier par la somme des fréquences des termes, je multiplie par la valeur maximale des fréquences des termes, c'est-à-dire $$ alpha_i=dfrac{x_i-y_i}{x_i+y_i}cdotmathrm{max} (x_i ,y_i) $$ Cela peut garantir que la spécificité du mot A est la plus élevée.
Le partage indique que deux personnes disent souvent un mot. Alors commencez par éliminer les mots qu'un parti n'a jamais prononcés . Pour ce faire, faites d’abord l’intersection des mots prononcés par les deux parties.
Maintenant, nous supposons toujours qu’il existe trois mots A, B et C.
mot | propre fréquence x | Fréquence de l'autre partie y |
---|---|---|
UN | 50 | 50 |
B | 1000 | 1 |
C | 1 | 1 |
Le mot B a été prononcé par moi-même beaucoup plus de fois que par l'autre personne, donc le point commun est évidemment très faible. Bien que les deux parties aient prononcé le mot C à peu près le même nombre de fois, le nombre de base est trop petit pour tirer des conclusions fiables. Par conséquent, le mot A a le point commun le plus élevé. Comment le calculer ?
La communauté est le contraire de l’exclusivité, alors pouvons-nous utiliser la réciproque de l’exclusivité ? Je me sens mal, en partie parce que le dénominateur est
Pour ce faire, j'ai utilisé la moyenne harmonique : $$ beta=dfrac{2}{1/x+1/y} $$ Pourquoi utiliser la moyenne harmonique ici plutôt que d'autres moyens, car la moyenne harmonique est celle avec le plus petit nombre parmi les quatre moyennes, le « point commun » souligne que les deux personnes doivent parler souvent, et que l'une ne peut pas simplement le dire alors que l'autre ne le fait pas. Autrement dit, peu importe combien l'une des parties parle, l'impact sur le point commun sera Cela. est également très petit, comme le mot B (1000,1).
L’utilisation de la moyenne harmonique peut garantir que le mot A a le plus grand point commun.
Sans plus tarder, veuillez consulter le code source.
Ce projet n'intègre pas la fonction de laisser des traces. Si la fonction d'extraction de données à partir des traces est ajoutée, une opération de processus plus simple peut être obtenue. Cependant, en raison des capacités de l'auteur et des contraintes de temps, cette idée ne peut pas être mise en œuvre à l'heure actuelle. Pour d'autres fonctions insuffisantes et pouvant être améliorées, vous pouvez également laisser des messages sur GitHub ou sur l'arrière-plan du compte officiel. Les personnes partageant les mêmes idées sont invitées à rejoindre l'équipe de développeurs et développons ensemble une meilleure visualisation Wechat !