ما يمكن القيام به
يستخدم لتصور سجلات دردشة WeChat.
يمكن إنشاء الصور التالية تلقائيًا:
ما لا يجب القيام به
باستخدام برنامج Liuhen ، يحتوي Github على 22.8 ألف نجمة، وتم تكرار البرنامج إلى الإصدار 1.1.1 وهو برنامج ناضج جدًا وجدير بالثقة.
عنوان GitHub: LC044/WeChatMsg: استخراج سجلات دردشة WeChat، وتصديرها إلى مستندات HTML وWord وCSV للتخزين الدائم، وتحليل سجلات الدردشة وإنشاء تقارير الدردشة السنوية (github.com)
موقع البرنامج: https://memotrace.lc044.love/
فقط قم بتحميل ملف exe وتثبيته.
أعتقد أن سجلات الدردشة الخاصة بمعظم الأشخاص موجودة على هواتفهم المحمولة، وسجلات الدردشة الموجودة على أجهزة الكمبيوتر الخاصة بهم غير مكتملة. لذا قم أولاً بمزامنة سجل الدردشة الخاص بالهاتف المحمول مع الكمبيوتر، ربما تكون قد واجهت ذلك عند تغيير هاتفك المحمول: WeChat - الإعدادات - الدردشة - ترحيل سجل الدردشة والنسخ الاحتياطي - الترحيل. انتظر بضع دقائق، حسب حجم سجل الدردشة الخاص بك.
فك التشفير 2: أدخل المعلومات الشخصية واحصل على المعلومات. ثم فك التشفير: ابدأ التشغيل!
ثم يمكنك تصدير سجل الدردشة بين الأصدقاء. من أجل تقليل الأحرف المشوهة، يرجى عدم التحقق من الصور ومقاطع الفيديو والرموز التعبيرية. لا يتضمن التصدير الصور/مقاطع الفيديو/الملفات !
عند اكتمال التصدير، قم بإنهاء التتبع. سيكون هناك دليل بيانات في نفس دليل البرنامج. انقر فوق وسيكون هناك ملف CSV ضمن data/聊天记录/
. ربما يبدو مثل هذا:
انسخ ملف CSV هذا إلى دليل input_data/
الخاص بـ WechatVisualization.
ملاحظة: عند استخدام التتبع، قد تجد أنه يدمج أيضًا وظيفة التحليل + التصور لتصدير التقارير السنوية، ومع ذلك، إذا ألقيت نظرة فاحصة على التقرير السنوي الذي يصدره، ستجد أن الكلمات الواردة فيه تقريبية للغاية مخطط سحابة الكلمات فوضوي ولم يتم تنظيف البيانات، ولهذا السبب أريد تطويره بنفسي. ومع ذلك، إذا كنت تشعر أن التقرير الخاص بتتبع الإنتاج جيد جدًا بالفعل، فلن تحتاج إلى قراءة المحتوى التالي.
يحتاج المستخدمون إلى معرفة أساسية بـ Python (كيفية تشغيل التعليمات البرمجية)، وقد تم تثبيت Anaconda أو Python (الإصدار >= 3.7) على الكمبيوتر. إذا كنت تستخدم أناكوندا، فمن الأفضل إنشاء بيئة جديدة.
قم بتثبيت مكتبات الطرف الثالث الضرورية بالتسلسل:
مكتبات الطرف الثالث | وظيفة |
---|---|
الباندا | معالجة النموذج |
matplotlib | رسم مخطط شريطي |
pyyaml | قراءة ملف التكوين |
jieba | تجزئة الكلمات الصينية |
tqd | طباعة شريط التقدم |
pyecharts | ارسم سحابة الكلمات |
طريقة التثبيت بنقرة واحدة:
pip install -r requirements.txt
طريقة التثبيت ليست محور هذه المقالة بشكل أساسي، فهي pip install
. إذا واجهت مشكلات، فيرجى البحث عن الحلول عبر الإنترنت، ولن أخوض في التفاصيل هنا.
ملف التكوين هو config.yml
، والذي يمكن فتحه باستخدام برنامج Notepad. بالطبع، من الأفضل استخدام محرر التعليمات البرمجية لأن تمييز بناء الجملة متاح.
تتضمن المحتويات التي يمكن تعيينها بنفسك
# 输入数据
# 下面这些文件都放在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
بتحويل بعض الكلمات إلى كلمات أخرى. المرادفات مثل "انظر" و"انظر" و"انظر" و"انظر" يمكن أن تحسب بشكل منفصل، وليس من الضروري على الإطلاق أن ندمجها في كلمة واحدة "ينظر". للقيام بذلك، ما عليك سوى ملء الكلمة الأصلية والكلمة المحولة في عمودين. لاحظ أن العمودين مفصولان بأحرف جدولة .usreDict
إضافة كلمات غير موجودة في القواميس التقليدية، مثل "e人" و"i人" و"Tencent Conference" وما إلى ذلك. إذا لم تقم بإضافة هذه الكلمات بنفسك، فإن النتيجة هي أنها قد تنقسم إلى كلمات مثل "e"، و"i"، و"people"، و"Tencent"، و"meeting"، وهو ما لا نريد رؤيته. . خطأ القيمة: عدم تطابق الشكل: لا يمكن بث الكائنات إلى شكل واحد
ValueError: عدد مواقع FixedLocator (5)، عادةً من استدعاء set_ticcks، لا يتطابق مع عدد علامات التجزئة (1).
الأسباب المحتملة : عند حدوث الخطأين المذكورين أعلاه، قد يكون ذلك بسبب تعيين top_k أو min_count في الموضع المقابل على حجم كبير جدًا، وكمية سجلات الدردشة صغيرة جدًا، مما يؤدي إلى عدم وجود عدد كبير من الكلمات التي يمكن رسمها.
الحل : مع أخذ ذلك في الاعتبار، قمت بطباعة الحد الأقصى لقيمة المعلمة المسموح بتعيينها عند تشغيل كل قسم صغير من البرنامج. إذا تمت طباعة خطوط أفقية مزدوجة، فهذا يعني أنه تم ضبط معلمات هذا القسم بشكل صحيح وتشغيل البرنامج بنجاح. يمكنك التحقق مما إذا كانت المعلمة في الموضع المقابل قد تم تعيينها على حجم كبير جدًا، ثم تقليلها بشكل مناسب.
parse.py
الملفات الموجودة في input_data/
ويقوم بتجزئة الكلمات. قم بإنشاء ملف keywords.csv
ووضعه في temp_files/
، والذي يضيف عمودين بناءً على البيانات الأصلية، أحدهما عبارة عن الكلمات المقسمة، والآخر عبارة عن رموز WeChat المستخرجة.word_cloud.py
تكرار الكلمات، وينشئ ملف المخلل keyword_count.pkl
ويضعه في temp_files/
، كما ينشئ سحابة كلمات ويضعها في figs/
.figs/
.emoji_count.pkl
ووضعه في temp_files/
واحسب خصوصية الرموز التعبيرية. يتم وضع الصور في figs/
.figs/
.figs/
.figs/
. تذكر أنك أرسلت كلمة معينة
تعني الحصرية أنك تقول شيئًا ما غالبًا، لكن الشخص الآخر لا يقوله كثيرًا (والعكس صحيح). اعتباري للحصرية هو هذا. لنفترض أن هناك ثلاث كلمات أ، ب، ج.
كلمة | التردد الخاص x | تردد الطرف الآخر ذ |
---|---|---|
أ | 4 | 0 |
ب | 100 | 96 |
ج | 1 | 0 |
بالنسبة لي، من الواضح أن حصرية A يجب أن تكون الأعلى. أما بالنسبة للكلمة (ب)، فرغم أن الشخصين اختلفا 4 مرات، إلا أن الرقم الأساسي كبير نسبيا، ولا يوجد تباين واضح بين الـ 4 مرات. في حالة C، الرقم الأساسي صغير جدًا للقول بأن C هي مفرداتها الحصرية لا يمكن الاعتماد عليها كثيرًا.
فليكن مقياس الخصوصية
ماذا لو ضربنا في الأساس؟ الأساس هو العدد الإجمالي للمرات
لذا، في تنفيذي، بدلاً من الضرب في مجموع تكرارات المصطلح، أضرب في الحد الأقصى لقيمة تكرارات المصطلح، أي $$ alpha_i=dfrac{x_i-y_i}{x_i+y_i}cdotmathrm{max} (x_i ,y_i) $$ هذا يمكن أن يضمن أن خصوصية الكلمة A هي الأعلى.
تشير المشاركة إلى أن شخصين غالبًا ما يقولان كلمة واحدة. لذا قم أولاً بإزالة تلك الكلمات التي لم يقلها أحد الأطراف مطلقًا . للقيام بذلك، خذ أولاً تقاطع الكلمات التي يتحدث بها الطرفان.
الآن ما زلنا نفترض أن هناك ثلاث كلمات أ، ب، ج.
كلمة | التردد الخاص x | تردد الطرف الآخر ذ |
---|---|---|
أ | 50 | 50 |
ب | 1000 | 1 |
ج | 1 | 1 |
لقد قلت الكلمة "ب" بنفسي مرات أكثر بكثير من الشخص الآخر، لذلك من الواضح أن القواسم المشتركة منخفضة جدًا. على الرغم من أن كلا الطرفين قالا الكلمة "ج" بنفس العدد من المرات تقريبًا، إلا أن الرقم الأساسي صغير جدًا بحيث لا يمكن استخلاص استنتاجات موثوقة. ولذلك، فإن الكلمة "أ" لديها أعلى القواسم المشتركة. كيفية حساب ذلك؟
الجماعة هي عكس التفرد، فهل يمكننا استخدام مقلوب التفرد؟ أشعر بالسوء، ويرجع ذلك جزئيا إلى القاسم
وللقيام بذلك استخدمت الوسط التوافقي: $$ beta=dfrac{2}{1/x+1/y} $$ لماذا نستخدم الوسط التوافقي هنا بدلاً من الوسائل الأخرى، لأن الوسط التوافقي هو الذي مع وهو العدد الأصغر بين المتوسطات الأربعة، ويؤكد "القواسم المشتركة" على أن كلا الشخصين يجب أن يتحدثا كثيرًا، ولا يمكن لأحدهما أن يقولها فقط بينما لا يفعلها الآخر، أي أنه مهما تحدث أحد الطرفين، فإن التأثير على القواسم المشتركة سيكون هو كما أنها صغيرة جدًا، مثل الكلمة ب (1000،1).
إن استخدام الوسط التوافقي يمكن أن يضمن أن الكلمة "أ" لها أكبر قدر من القواسم المشتركة.
دون مزيد من اللغط، يرجى إلقاء نظرة على التعليمات البرمجية المصدر.
لا يدمج هذا المشروع وظيفة ترك الآثار، إذا تمت إضافة وظيفة استخراج البيانات من الآثار، فيمكن تحقيق عملية عملية أبسط. ولكن نظرا لقدرة المؤلف وضيق الوقت، لا يمكن تنفيذ هذه الفكرة في الوقت الحاضر. بالنسبة للوظائف الأخرى غير الكافية والتي يمكن تحسينها، نرحب أيضًا بترك رسائل على GitHub أو خلفية الحساب الرسمي. نرحب بالأشخاص ذوي التفكير المماثل للانضمام إلى فريق التطوير، ودعونا نطور WechatVisualization بشكل أفضل معًا!