apa yang bisa dilakukan
Digunakan untuk memvisualisasikan catatan obrolan WeChat.
Gambar-gambar berikut dapat dihasilkan secara otomatis:
Apa yang tidak boleh dilakukan
Menggunakan perangkat lunak Liuhen , Github memiliki 22,8 ribu bintang, dan perangkat lunak tersebut telah diiterasi ke versi 1.1.1. Ini adalah perangkat lunak yang sangat matang dan dapat dipercaya.
Alamat GitHub: LC044/WeChatMsg: Ekstrak catatan obrolan WeChat, ekspor ke dokumen HTML, Word, dan CSV untuk penyimpanan permanen, analisis catatan obrolan, dan buat laporan obrolan tahunan (github.com)
Situs web perangkat lunak: https://memotrace.lc044.love/
Cukup unduh exe dan instal.
Saya yakin rekaman obrolan kebanyakan orang ada di ponsel mereka, dan rekaman obrolan di komputer mereka tidak lengkap. Jadi sinkronkan dulu riwayat obrolan ponsel ke komputer. Anda mungkin pernah mengalami hal ini saat mengganti ponsel: WeChat - Pengaturan - Obrolan - Migrasi dan Cadangan Riwayat Obrolan - Migrasi. Tunggu beberapa menit, tergantung besar kecilnya riwayat chat Anda.
Dekripsi 2: Masukkan informasi pribadi dan dapatkan informasi. Kemudian dekripsi: Mulai booting!
Kemudian Anda dapat mengekspor riwayat obrolan antar teman. Untuk mengurangi karakter yang kacau, mohon jangan memeriksa gambar, video, dan emotikon. Ekspor tidak menyertakan gambar/video/file !
Ketika ekspor selesai, keluar dari Trace. Akan ada direktori data di direktori yang sama dengan perangkat lunak. Klik dan akan ada file csv di bawah data/聊天记录/
. Mungkin terlihat seperti ini:
Salin file csv ini ke direktori input_data/
WechatVisualization.
Catatan: Saat menggunakan Trace, Anda mungkin menemukan bahwa itu juga mengintegrasikan fungsi analisis + visualisasi untuk mengekspor laporan tahunan. Namun, jika Anda melihat lebih dekat pada laporan tahunan yang dihasilkannya, Anda akan menemukan bahwa kata-kata di dalamnya terlalu kasar kata cloud diagram berantakan dan belum selesai. Pembersihan data, inilah mengapa saya ingin mengembangkannya sendiri. Namun jika Anda merasa laporan Trace Production sudah sangat bagus, maka Anda tidak perlu membaca konten berikut ini.
Pengguna harus memiliki pengetahuan dasar Python (cara menjalankan kode), dan Anaconda atau Python (versi >= 3.7) telah diinstal di komputer. Jika menggunakan Anaconda, sebaiknya buat lingkungan baru.
Instal perpustakaan pihak ketiga yang diperlukan secara berurutan:
Perpustakaan pihak ketiga | Fungsi |
---|---|
panda | Pemrosesan formulir |
matplotlib | Gambarlah diagram batang |
pyyaml | Baca file konfigurasi |
jieba | Segmentasi kata Cina |
tqd | Cetak bilah kemajuan |
diagram lingkaran | Gambarlah awan kata |
Metode instalasi sekali klik:
pip install -r requirements.txt
Metode instalasi bukanlah fokus artikel ini. Pada dasarnya, ini adalah pip install
. Jika Anda mengalami masalah, silakan cari solusi secara online. Saya tidak akan membahas detailnya di sini.
File konfigurasinya adalah config.yml
, yang dapat dibuka dengan Notepad. Tentu saja lebih baik menggunakan editor kode karena tersedia penyorotan sintaksis.
Isinya bisa diatur sendiri antara lain
# 输入数据
# 下面这些文件都放在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
Anda dapat menjalankan main.py
langsung di editor kode, atau Anda dapat menjalankan python main.py
di baris perintah (aktifkan lingkungan yang dibuat sebelumnya terlebih dahulu).
Proses yang berhasil akan menampilkan informasi berikut:
Gambar yang dihasilkan dapat ditemukan di folder figs
di direktori saat ini.
Periksa gambar yang dihasilkan. Anda mungkin input_data/
bahwa beberapa kata tidak sesuai dengan yang Anda inginkan, atau beberapa kata yang Anda inginkan telah terpecah. Ini adalah proses yang berulang-ulang, yaitu pembersihan data, yang relatif memakan waktu. Namun tidak ada cara lain. Jika ingin hasil yang relatif berkualitas, bersabarlah dan lakukan dengan hati-hati serta bersihkan datanya.
emoji.txt
adalah emotikon WeChat versi Cina dan Inggris. Emoticon WeChat disajikan dalam bentuk [facepalm] atau [Facepalm] dalam rekaman chat. Ada [xxx] dalam bahasa Mandarin dan Inggris di riwayat obrolan saya, jadi saya membuat tabel perbandingan dan mengganti semua kata bahasa Inggris dengan bahasa Mandarin. Jika ternyata beberapa emotikon masih dalam bahasa Inggris, Anda dapat menambahkan bahasa Mandarin ke dalamnya agar mudah digabungkan.stopwords_hit_modified.txt
adalah daftar kata berhenti. Kata-kata seperti "sekarang", "berlangsung", dan "seolah-olah" (yang menurut saya) tidak memiliki arti sebenarnya tidak boleh dihitung dan harus langsung dihilangkan. Jika menurut Anda ada kata-kata yang tidak ingin Anda lihat di hasil yang dihasilkan, Anda dapat menambahkannya di sini.transformDict.txt
mengubah beberapa kata menjadi kata lain. Sinonim seperti "melihat", "melihat", "melihat", dan "melihat" dapat dihitung secara terpisah. Kita tidak perlu menggabungkannya menjadi satu kata "melihat". Caranya cukup isi kata asli dan kata hasil konversi pada dua kolom. Perhatikan bahwa kedua kolom dipisahkan oleh karakter tab .usreDict
dapat menambahkan kata-kata yang tidak ada dalam kamus tradisional, seperti "e人", "i人", "Tencent Conference", dll. Jika Anda tidak menambahkan kata-kata ini sendiri, konsekuensinya adalah kata-kata tersebut dapat terpecah menjadi kata-kata seperti "e", "i", "people", "Tencent", dan "meeting", yang bukan itu yang ingin kita lihat. . ValueError: ketidakcocokan bentuk: objek tidak dapat disiarkan ke satu bentuk
ValueError: Jumlah lokasi FixedLocator (5), biasanya dari panggilan ke set_ticks, tidak sesuai dengan jumlah label centang (1).
Kemungkinan alasan : Ketika dua kesalahan di atas terjadi, mungkin karena top_k atau min_count pada posisi terkait disetel terlalu besar, dan jumlah rekaman obrolan terlalu kecil, sehingga tidak banyak kata yang perlu ditarik.
Solusi : Dengan mengingat hal ini, saya mencetak nilai parameter maksimum yang diperbolehkan untuk ditetapkan ketika setiap bagian kecil dari program dijalankan. Jika garis horizontal ganda tercetak, berarti parameter bagian ini diatur dengan benar dan program berhasil dijalankan. Anda dapat memeriksa apakah parameter pada posisi terkait disetel terlalu besar, lalu menguranginya dengan tepat.
parse.py
membaca file di input_data/
dan melakukan segmentasi kata. Hasilkan keywords.csv
dan masukkan ke dalam temp_files/
, yang menambahkan dua kolom berdasarkan data asli. Satu kolom adalah kata-kata yang dipisahkan, dan kolom lainnya adalah emotikon WeChat yang diekstraksi.word_cloud.py
menghitung frekuensi kata, menghasilkan file acar keyword_count.pkl
dan memasukkannya ke dalam temp_files/
, dan juga membuat kata cloud dan memasukkannya ke dalam figs/
.figs/
.emoji_count.pkl
dan masukkan ke temp_files/
dan hitung kekhususan emotikon. Gambar ditempatkan ke dalam figs/
.figs/
.figs/
.figs/
. Ingatlah bahwa Anda mengirimkan kata tertentu
Eksklusif berarti Anda sering mengatakan sesuatu, tetapi orang lain tidak sering mengatakannya (begitu pula sebaliknya). Pertimbangan saya tentang eksklusivitas adalah ini. Misalkan ada tiga kata A, B, dan C.
kata | frekuensi sendiri x | Frekuensi pihak lain y |
---|---|---|
A | 4 | 0 |
B | 100 | 96 |
C | 1 | 0 |
Bagi saya sendiri, jelas eksklusivitas A harus menjadi yang tertinggi. Sedangkan untuk kata B, meskipun kedua orang tersebut berbeda sebanyak 4 kali, namun bilangan dasarnya relatif besar. Tidak ada perbedaan yang jelas antara 4 kali tersebut. Dalam kasus C, angka dasarnya terlalu kecil. Mengatakan bahwa C adalah kosakata eksklusifnya sendiri tidaklah dapat diandalkan.
Biarkan ukuran spesifisitasnya menjadi
Bagaimana jika kita mengalikannya dengan basis? Basisnya adalah jumlah total kali
Jadi dalam implementasi saya, alih-alih mengalikannya dengan jumlah frekuensi suku, saya mengalikannya dengan nilai maksimum frekuensi suku, yaitu $$ alpha_i=dfrac{x_i-y_i}{x_i+y_i}cdotmathrm{max} (x_i ,y_i) $$ Hal ini dapat memastikan bahwa kekhususan kata A adalah yang tertinggi.
Berbagi menandakan bahwa dua orang sering mengucapkan sepatah kata pun. Jadi pertama-tama hilangkan kata-kata yang tidak pernah diucapkan oleh salah satu pihak . Untuk melakukan ini, pertama-tama ambil titik temu dari kata-kata yang diucapkan oleh kedua belah pihak.
Sekarang kita masih berasumsi ada tiga kata A, B, dan C.
kata | frekuensi sendiri x | Frekuensi pihak lain y |
---|---|---|
A | 50 | 50 |
B | 1000 | 1 |
C | 1 | 1 |
Kata B lebih sering diucapkan oleh saya sendiri dibandingkan oleh orang lain, jadi kesamaannya jelas sangat rendah. Meskipun kedua belah pihak telah mengucapkan kata C dengan frekuensi yang hampir sama, angka dasarnya terlalu kecil untuk menarik kesimpulan yang dapat diandalkan. Oleh karena itu, kata A memiliki kesamaan tertinggi. Bagaimana cara menghitungnya?
Komunitas adalah kebalikan dari eksklusivitas, jadi bisakah kita menggunakan kebalikan dari eksklusivitas? Saya merasa tidak enak, sebagian karena penyebutnya
Untuk melakukan ini, saya menggunakan mean harmonik: $$ beta=dfrac{2}{1/x+1/y} $$ Mengapa menggunakan mean harmonik di sini daripada cara lain, karena mean harmoniknya adalah yang dengan angka terkecil di antara empat rata-rata, “kesamaan” menekankan bahwa kedua orang harus sering berbicara, dan yang satu tidak bisa begitu saja mengatakannya sementara pihak lain tidak. Artinya, seberapa banyak salah satu pihak berbicara, dampaknya terhadap kesamaan akan tetap sama juga sangat kecil, seperti kata B (1000,1).
Penggunaan mean harmonik dapat memastikan bahwa kata A memiliki kesamaan terbesar.
Tanpa basa-basi lagi silahkan lihat source codenya.
Proyek ini tidak mengintegrasikan fungsi meninggalkan jejak. Jika fungsi mengekstraksi data dari jejak ditambahkan, operasi proses yang lebih sederhana dapat dicapai. Namun karena keterbatasan kemampuan dan waktu penulis, ide tersebut belum dapat dilaksanakan saat ini. Untuk fungsi lain yang kurang dan dapat ditingkatkan, Anda juga dapat meninggalkan pesan di GitHub atau latar belakang akun resmi. Orang-orang yang berpikiran sama dipersilakan untuk bergabung dengan tim pengembang, dan mari bersama-sama mengembangkan Visualisasi Wechat yang lebih baik!