สิ่งที่สามารถทำได้
ใช้เพื่อแสดงภาพบันทึกการสนทนา WeChat
รูปภาพต่อไปนี้สามารถสร้างขึ้นได้โดยอัตโนมัติ:
อะไรไม่ควรทำ
การใช้ซอฟต์แวร์ Liuhen ทำให้ Github มีดาว 22.8,000 ดวง และซอฟต์แวร์ดังกล่าวได้รับการทำซ้ำเป็นเวอร์ชัน 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
หมายเหตุ: เมื่อใช้ Trace คุณอาจพบว่ามีฟังก์ชันการวิเคราะห์ + การแสดงภาพในการส่งออกรายงานประจำปีด้วย อย่างไรก็ตาม หากคุณพิจารณารายงานประจำปีที่สร้างขึ้นโดยละเอียด คุณจะพบว่าคำนี้หยาบเกินไป ในคำว่า cloud diagram ยุ่งวุ่นวาย ยังไม่เสร็จ เลยอยากพัฒนาตัวเอง อย่างไรก็ตาม หากคุณรู้สึกว่ารายงานเกี่ยวกับ Trace Production นั้นดีอยู่แล้ว คุณไม่จำเป็นต้องอ่านเนื้อหาด้านล่าง
ผู้ใช้จำเป็นต้อง มีความรู้พื้นฐานเกี่ยวกับ Python (วิธีเรียกใช้โค้ด) และติดตั้ง Anaconda หรือ Python (เวอร์ชัน >= 3.7) บนคอมพิวเตอร์แล้ว หากใช้อนาคอนด้า วิธีที่ดีที่สุดคือสร้างสภาพแวดล้อมใหม่
ติดตั้งไลบรารีบุคคลที่สามที่จำเป็น ตามลำดับ:
ห้องสมุดบุคคลที่สาม | การทำงาน |
---|---|
หมีแพนด้า | การประมวลผลแบบฟอร์ม |
matplotlib | วาดแผนภูมิแท่ง |
ไพยัมล์ | อ่านไฟล์การกำหนดค่า |
เจียบะ | การแบ่งส่วนคำภาษาจีน |
ไม่เป็นไร | พิมพ์แถบความคืบหน้า |
แผนภูมิปี | วาดคำว่าเมฆ |
วิธีการติดตั้งเพียงคลิกเดียว:
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: รูปร่างไม่ตรงกัน: ไม่สามารถถ่ายทอดวัตถุไปยังรูปร่างเดียวได้
ValueError: จำนวนตำแหน่ง FixLocator (5) ซึ่งโดยปกติจากการเรียกไปยัง set_ticks ไม่ตรงกับจำนวนของ Ticklabels (1)
สาเหตุที่เป็นไปได้ : เมื่อเกิดข้อผิดพลาดสองประการข้างต้น อาจเป็นเพราะตั้งค่า top_k หรือ min_count ในตำแหน่งที่เกี่ยวข้องมากเกินไป และจำนวนบันทึกการสนทนาน้อยเกินไป ส่งผลให้มีคำที่จะวาดได้ไม่มากนัก
วิธีแก้ไข : ด้วยเหตุนี้ ฉันจึงพิมพ์ค่าพารามิเตอร์สูงสุดที่อนุญาตให้ตั้งค่าเมื่อแต่ละส่วนเล็กๆ ของโปรแกรมถูกรัน หากพิมพ์เส้นแนวนอนคู่ แสดงว่าพารามิเตอร์ของส่วนนี้ได้รับการตั้งค่าอย่างถูกต้องและโปรแกรมทำงานได้สำเร็จ คุณสามารถตรวจสอบว่าพารามิเตอร์ที่ตำแหน่งที่เกี่ยวข้องนั้นตั้งค่าไว้ใหญ่เกินไปหรือไม่ จากนั้นจึงลดขนาดลงอย่างเหมาะสม
parse.py
อ่านไฟล์ใน input_data/
และทำการแบ่งส่วนคำ สร้าง keywords.csv
และใส่ลงใน temp_files/
ซึ่งจะเพิ่มสองคอลัมน์ตามข้อมูลเดิม คอลัมน์หนึ่งคือคำที่แยก และอีกคอลัมน์คืออีโมติคอน WeChat ที่แยกออกมาword_cloud.py
คำนวณความถี่ของคำ สร้างไฟล์ดอง keyword_count.pkl
และวางไว้ใน temp_files/
และยังสร้าง word cloud และวางไว้ใน figs/
figs/
emoji_count.pkl
แล้วใส่ลงใน temp_files/
และคำนวณความจำเพาะของอีโมติคอน รูปภาพถูกวางลงใน figs/
figs/
figs/
figs/
จำไว้ว่าคุณส่งคำบางอย่าง
ความพิเศษหมายความว่าคุณมักจะพูดอะไรบางอย่าง แต่อีกฝ่ายกลับไม่พูดบ่อย (และในทางกลับกัน) การพิจารณาความพิเศษของฉันคือสิ่งนี้ สมมติว่ามีคำสามคำ A, B และ C
คำ | ความถี่ของตัวเอง x | ความถี่ของอีกฝ่าย y |
---|---|---|
ก | 4 | 0 |
บี | 100 | 96 |
ค | 1 | 0 |
สำหรับตัวผมเองเห็นได้ชัดว่าความพิเศษของ A น่าจะสูงที่สุด สำหรับคำ B แม้ว่าคนสองคนจะต่างกัน 4 ครั้ง แต่จำนวนฐานก็ค่อนข้างมาก ไม่มีความแตกต่างที่ชัดเจนระหว่าง 4 ครั้ง สำหรับ C นั้น เลขฐานน้อยเกินไป การจะบอกว่า C เป็นคำศัพท์เฉพาะของตัวเองนั้นไม่น่าเชื่อถือมากนัก
ให้การวัดความจำเพาะเป็น
จะเกิดอะไรขึ้นถ้าเราคูณด้วยฐาน? ฐานคือจำนวนครั้งทั้งหมด
ดังนั้นในการใช้งานของฉัน แทนที่จะคูณด้วยผลรวมของความถี่ของเทอม ฉันจะคูณด้วยค่าสูงสุดของความถี่ของเทอม นั่นคือ $$ alpha_i=dfrac{x_i-y_i}{x_i+y_i}cdotmathrm{max} (x_i ,y_i) $$ สิ่งนี้สามารถรับประกันได้ว่าความจำเพาะของคำ A นั้นสูงที่สุด
การแบ่งปันบ่งบอกว่าคนสองคนมักจะพูดอะไรกัน ดังนั้นก่อนอื่น ให้ตัดคำเหล่านั้นที่ฝ่ายหนึ่งไม่เคยพูดออกไป เมื่อต้องการทำเช่นนี้ ขั้นแรก ให้แยก คำที่ทั้งสองฝ่ายพูดกันก่อน
ตอนนี้เรายังคงสันนิษฐานว่ามีคำสามคำ A, B และ C
คำ | ความถี่ของตัวเอง x | ความถี่ของอีกฝ่าย y |
---|---|---|
ก | 50 | 50 |
บี | 1,000 | 1 |
ค | 1 | 1 |
คำ B มีคนพูดด้วยตัวเองบ่อยกว่าอีกฝ่ายมาก ดังนั้นความเหมือนกันจึงต่ำมากอย่างเห็นได้ชัด แม้ว่าทั้งสองฝ่ายจะพูดคำ C ประมาณจำนวนครั้งเท่ากัน แต่ตัวเลขฐานยังน้อยเกินไปที่จะสรุปผลได้อย่างน่าเชื่อถือ ดังนั้นคำ A จึงมีความเหมือนกันสูงสุด จะคำนวณได้อย่างไร?
ชุมชนเป็นสิ่งที่ตรงกันข้ามกับการผูกขาด ดังนั้นเราจะใช้การตอบแทนซึ่งกันและกันของการผูกขาดได้หรือไม่? ฉันรู้สึกแย่ส่วนหนึ่งเป็นเพราะตัวส่วนคือ
สำหรับสิ่งนี้ ฉันใช้ค่าเฉลี่ยฮาร์มอนิก: $$ beta=dfrac{2}{1/x+1/y} $$ เหตุใดจึงใช้ค่าเฉลี่ยฮาร์มอนิกที่นี่แทนวิธีอื่น เพราะค่าเฉลี่ยฮาร์มอนิกคือค่าที่มี จำนวนที่น้อยที่สุดในบรรดาค่าเฉลี่ยทั้งสี่ "คนธรรมดาสามัญ" เน้นย้ำว่าคนทั้งสองต้องพูดบ่อยๆ และคนหนึ่งไม่สามารถพูดได้ในขณะที่อีกฝ่ายไม่พูด กล่าวคือ ไม่ว่าฝ่ายใดฝ่ายหนึ่งจะพูดมากเพียงใดก็ตาม ผลกระทบต่อความเหมือนกันก็จะเป็นเช่นนั้น มีขนาดเล็กมากเช่นกัน เช่น คำว่า B (1000,1)
การใช้ค่าเฉลี่ยฮาร์มอนิกช่วยให้มั่นใจได้ว่าคำ A มีความเหมือนกันมากที่สุด
หากคุณไม่ต้องการเสร็จสิ้น โปรดดูซอร์สโค้ด
โปรเจ็กต์นี้ไม่ได้รวมฟังก์ชันการทิ้งร่องรอยไว้ หากเพิ่มฟังก์ชันการดึงข้อมูลจากการติดตาม จะทำให้การดำเนินการตามกระบวนการง่ายขึ้น อย่างไรก็ตาม เนื่องจากข้อจำกัดด้านความสามารถและเวลาของผู้เขียน แนวคิดนี้จึงไม่สามารถนำมาใช้ได้ในปัจจุบัน สำหรับฟังก์ชันอื่นๆ ที่ยังไม่เพียงพอและสามารถปรับปรุงได้ คุณสามารถฝากข้อความไว้ที่ GitHub หรือพื้นหลังบัญชีอย่างเป็นทางการได้ ผู้ที่มีความคิดเหมือนกันสามารถเข้าร่วมทีมนักพัฒนาซอฟต์แวร์ได้ และมาพัฒนา WechatVisualization ให้ดียิ่งขึ้นไปด้วยกัน!