что можно сделать
Используется для визуализации записей чата WeChat.
Следующие изображения могут быть созданы автоматически:
Чего не следует делать
Используя программное обеспечение Liuhen , Github имеет 22,8 тыс. звезд, и программное обеспечение было обновлено до версии 1.1.1. Это очень зрелое программное обеспечение, заслуживающее доверия.
Адрес GitHub: LC044/WeChatMsg: извлекайте записи чата WeChat, экспортируйте их в документы HTML, Word и CSV для постоянного хранения, анализируйте записи чата и создавайте годовые отчеты о чате (github.com).
Веб-сайт программного обеспечения: https://memotrace.lc044.love/
Просто скачайте exe и установите его.
Я считаю, что записи чатов большинства людей хранятся на их мобильных телефонах, а записи чатов на их компьютерах неполны. Поэтому сначала синхронизируйте историю чатов мобильного телефона с компьютером. Возможно, вы сталкивались с этим при смене мобильного телефона: WeChat — Настройки — Чат — Миграция и резервное копирование истории чата — Миграция. Подождите несколько минут, в зависимости от размера вашей истории чата.
Расшифровка 2: Введите личную информацию и получите информацию. Затем расшифруйте: Начать загрузку!
Затем вы можете экспортировать историю чатов среди друзей. Чтобы уменьшить искажение символов, не проверяйте изображения, видео и смайлы. Экспорт не включает изображения/видео/файлы !
По завершении экспорта выйдите из Trace. В том же каталоге программного обеспечения будет каталог данных. Щелкните его, и в разделе data/聊天记录/
появится файл csv. Вероятно, это выглядит так:
Скопируйте этот CSV-файл в каталог input_data/
WechatVisualization.
Примечание. При использовании 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
преобразует одни слова в другие слова. Такие синонимы, как «видеть», «видеть», «смотреть», «смотреть» можно считать отдельно. Вовсе не обязательно объединять их в одно слово «смотреть». Для этого достаточно заполнить исходное слово и преобразованное слово в две колонки. Обратите внимание, что эти два столбца разделены символами табуляции .usreDict
может добавлять слова, которых нет в традиционных словарях, например «e人», «i人», «Tencent Conference» и т. д. Если вы не добавите эти слова самостоятельно, они могут быть разделены на такие слова, как «e», «i», «люди», «Tencent» и «встреча», а это не то, что мы хотим видеть. . ValueError: несоответствие формы: объекты не могут быть преобразованы в одну форму.
ValueError: количество местоположений фиксированного локатора (5), обычно в результате вызова set_ticks, не соответствует количеству меток меток (1).
Возможные причины : две вышеупомянутые ошибки могут возникнуть из-за того, что top_k или min_count в соответствующей позиции установлены слишком большими, а количество записей чата слишком мало, в результате чего не так много слов для рисования.
Решение : Имея это в виду, я напечатал максимальное значение параметра, которое можно установить при запуске каждого небольшого раздела программы. Если напечатаны двойные горизонтальные линии, это означает, что параметры этого раздела установлены правильно и программа работает успешно. Вы можете проверить, не установлен ли параметр в соответствующей позиции слишком большим, а затем уменьшить его соответствующим образом.
parse.py
читает файлы в input_data/
и выполняет сегментацию слов. Создайте keywords.csv
и поместите его в temp_files/
, который добавит два столбца на основе исходных данных. Один столбец — это разделенные слова, а другой — извлеченные смайлы WeChat.word_cloud.py
вычисляет частоту слов, генерирует файл Pickle keyword_count.pkl
и помещает его в temp_files/
, а также создает облако слов и помещает его в figs/
.figs/
.emoji_count.pkl
, поместите его в temp_files/
и рассчитайте специфичность смайлов. Картинки помещаются в figs/
.figs/
.figs/
.figs/
. Помните, что вы отправили определенное слово
Эксклюзивность означает, что вы часто что-то говорите, а другой человек говорит это нечасто (и наоборот). Я рассматриваю исключительность так: Предположим, есть три слова A, B и C.
слово | собственная частота х | Частота другой стороны y |
---|---|---|
А | 4 | 0 |
Б | 100 | 96 |
С | 1 | 0 |
Для меня очевидно, что эксклюзивность А должна быть высочайшей. Что касается слова 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.
слово | собственная частота х | Частота другой стороны y |
---|---|---|
А | 50 | 50 |
Б | 1000 | 1 |
С | 1 | 1 |
Слово Б было произнесено мною гораздо больше раз, чем другим человеком, поэтому общность, очевидно, очень низкая. Хотя обе стороны произнесли слово C примерно одинаковое количество раз, базовое число слишком мало, чтобы сделать надежные выводы. Следовательно, слово А имеет наибольшую общность. Как это рассчитать?
Общность — это противоположность исключительности, так можем ли мы использовать обратную исключительность? Мне плохо, отчасти потому, что знаменатель
Для этого я использовал среднее гармоническое: $$ beta=dfrac{2}{1/x+1/y} $$ Зачем использовать здесь среднее гармоническое вместо других средств, потому что среднее гармоническое - это то, у которого наименьшее число среди четырех средних значений, «общность» подчеркивает, что оба человека должны говорить часто, и один не может просто говорить это, а другой нет. То есть, независимо от того, сколько говорит одна сторона, влияние на общность будет таким. также очень мал, например слово B (1000,1).
Использование среднего гармонического значения может гарантировать, что слово А будет иметь наибольшую общность.
Без лишних слов, пожалуйста, посмотрите исходный код.
В этом проекте не интегрирована функция оставления следов. Если добавить функцию извлечения данных из следов, можно добиться более простой операции процесса. Однако из-за способностей автора и ограниченности времени эта идея в настоящее время не может быть реализована. Что касается других функций, которые недостаточны и могут быть улучшены, вы также можете оставлять сообщения на GitHub или в официальном аккаунте. Единомышленники могут присоединиться к команде разработчиков, и давайте вместе развивать WechatVisualization лучше!