o que pode ser feito
Usado para visualizar registros de bate-papo do WeChat.
As seguintes imagens podem ser geradas automaticamente:
O que não fazer
Usando o software Liuhen , o Github tem 22,8 mil estrelas e o software foi iterado para a versão 1.1.1. É um software muito maduro e confiável.
Endereço GitHub: LC044/WeChatMsg: Extraia registros de bate-papo do WeChat, exporte-os para documentos HTML, Word e CSV para armazenamento permanente, analise os registros de bate-papo e gere relatórios anuais de bate-papo (github.com)
Site do software: https://memotrace.lc044.love/
Basta baixar o exe e instalá-lo.
Acredito que os registros de bate-papo da maioria das pessoas estão em seus celulares e os registros de bate-papo em seus computadores estão incompletos. Portanto, primeiro sincronize o histórico de bate-papo do celular com o computador. Você pode ter experimentado isso ao trocar de celular: WeChat - Configurações - Bate-papo - Migração do histórico de bate-papo e Backup - Migração. Aguarde alguns minutos, dependendo do tamanho do seu histórico de bate-papo.
Descriptografia 2: Insira informações pessoais e obtenha informações. Em seguida, descriptografe: comece a inicializar!
Depois você pode exportar o histórico de bate-papo entre amigos. Para reduzir caracteres ilegíveis, não verifique fotos, vídeos e emoticons. A exportação não inclui fotos/vídeos/arquivos !
Quando a exportação for concluída, saia do Trace. Haverá um diretório de dados no mesmo diretório do software. Clique nele e haverá um arquivo csv em data/聊天记录/
. Provavelmente é assim:
Copie este arquivo csv para input_data/
do WechatVisualization.
Nota: Ao usar o Trace, você pode descobrir que ele também integra a função de análise + visualização de exportação de um relatório anual. No entanto, se você olhar mais de perto o relatório anual que ele produz, verá que as palavras são muito grosseiras. no diagrama de nuvem de palavras são confusos e não são feitos, é por isso que quero desenvolvê-los sozinho. Porém, se você acha que o relatório sobre Trace Production já é muito bom, não precisa ler o conteúdo abaixo.
Os usuários precisam ter conhecimento básico de Python (como executar código) e Anaconda ou Python (versão >= 3.7) instalado no computador. Se estiver usando o Anaconda, é melhor criar um novo ambiente.
Instale as bibliotecas de terceiros necessárias em sequência:
Bibliotecas de terceiros | Função |
---|---|
pandas | Processamento de formulário |
matplotlib | Desenhar gráfico de barras |
pyyaml | Ler arquivo de configuração |
jieba | Segmentação de palavras chinesas |
tqd | Imprimir barra de progresso |
gráficos de dados | Desenhar nuvem de palavras |
Método de instalação com um clique:
pip install -r requirements.txt
O método de instalação não é o foco deste artigo. É basicamente pip install
. Se você encontrar problemas, procure soluções online.
O arquivo de configuração é config.yml
, que pode ser aberto com o Bloco de Notas. Claro, é melhor usar um editor de código porque o realce de sintaxe está disponível.
O conteúdo que pode ser definido por você inclui
# 输入数据
# 下面这些文件都放在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
Você pode executar main.py
diretamente no editor de código ou pode executar python main.py
na linha de comando (primeiro ative o ambiente criado anteriormente).
Uma execução bem-sucedida deve exibir as seguintes informações:
As imagens geradas podem ser encontradas na pasta figs
do diretório atual.
Verifique a imagem gerada. Você pode descobrir que algumas palavras não são o que você deseja ou que algumas palavras que você deseja foram divididas. Nesse caso, basta ir ao diretório input_data/
e modificar cada arquivo. Este é um processo continuamente iterativo, ou seja, limpeza de dados, que é relativamente demorado. Mas não há outra maneira. Se você deseja resultados de qualidade relativamente alta, apenas seja paciente, faça isso com cuidado e limpe os dados.
emoji.txt
é a versão em chinês e inglês dos emoticons do WeChat. Os emoticons do WeChat são apresentados na forma de [facepalm] ou [Facepalm] nos registros de bate-papo. Existem [xxx] em chinês e inglês no meu histórico de bate-papo, então criei uma tabela de comparação e substituí todas as palavras em inglês por chinês. Se você achar que alguns emoticons ainda estão em inglês, você pode adicionar chinês a eles para mesclar.stopwords_hit_modified.txt
é uma lista de palavras irrelevantes. Palavras como “agora”, “acontecendo” e “como se” (o que penso) não terem nenhum significado real não devem ser contadas e devem ser eliminadas diretamente. Se você acha que há palavras que não deseja ver nos resultados gerados, você pode adicioná-las aqui.transformDict.txt
converte algumas palavras em outras palavras. Sinônimos como “ver”, “ver”, “olhar” e “olhar” podem ser contados separadamente, mas não é necessário fundi-los em uma palavra “olhar”. Para isso, basta preencher a palavra original e a palavra convertida em duas colunas. Observe que as duas colunas são separadas por caracteres de tabulação .usreDict
pode adicionar palavras que não estão nos dicionários tradicionais, como "e人", "i人", "Conferência Tencent", etc. Se você não adicionar essas palavras, a consequência é que elas podem ser divididas em palavras como "e", "i", "pessoas", "Tencent" e "reunião", o que não é o que queremos ver . ValueError: incompatibilidade de forma: os objetos não podem ser transmitidos para uma única forma
ValueError: O número de locais do FixedLocator (5), geralmente de uma chamada para set_ticks, não corresponde ao número de ticklabels (1).
Possíveis razões : Quando os dois erros acima ocorrem, pode ser porque top_k ou min_count na posição correspondente está definido muito grande e a quantidade de registros de bate-papo é muito pequena, resultando em poucas palavras para desenhar.
Solução : Com isso em mente, imprimi o valor máximo do parâmetro que pode ser definido quando cada pequena seção do programa foi executada. Se forem impressas linhas horizontais duplas, significa que os parâmetros desta seção estão configurados corretamente e o programa é executado com sucesso. Você pode verificar se o parâmetro na posição correspondente está definido muito grande e, em seguida, reduzi-lo adequadamente.
parse.py
lê os arquivos em input_data/
e realiza a segmentação de palavras. Gere keywords.csv
e coloque-o em temp_files/
, que adiciona duas colunas com base nos dados originais. Uma coluna são as palavras divididas e a outra são os emoticons WeChat extraídos.word_cloud.py
calcula a frequência da palavra, gera o arquivo pickle keyword_count.pkl
e o coloca em temp_files/
, e também cria uma nuvem de palavras e a coloca em figs/
.figs/
.emoji_count.pkl
e coloque-o em temp_files/
e calcule a especificidade do emoticon. As imagens são colocadas em figs/
.figs/
.figs/
.figs/
. Lembre-se que você enviou uma determinada palavra
Exclusividade significa que você diz algo com frequência, mas a outra pessoa não diz isso com frequência (e vice-versa). Minha consideração de exclusividade é esta. Suponha que haja três palavras A, B e C.
palavra | frequência própria x | Frequência da outra parte y |
---|---|---|
UM | 4 | 0 |
B | 100 | 96 |
C | 1 | 0 |
Para mim, é óbvio que a exclusividade de A deveria ser máxima. Quanto à palavra B, embora as duas pessoas tenham diferido 4 vezes, o número base é relativamente grande. Não há contraste óbvio entre as 4 vezes. Quanto a C, o número base é muito pequeno. Dizer que C é seu próprio vocabulário exclusivo não é muito confiável.
Seja a medida de especificidade
E se multiplicarmos pela base? A base é o número total de vezes
Portanto, em minha implementação, em vez de multiplicar pela soma das frequências dos termos, multiplico pelo valor máximo das frequências dos termos, ou seja, $$ alpha_i=dfrac{x_i-y_i}{x_i+y_i}cdotmathrm{max} (x_i, y_i) $$ Isso pode garantir que a especificidade da palavra A seja a mais alta.
Compartilhar indica que duas pessoas costumam dizer uma palavra. Portanto, primeiro elimine aquelas palavras que uma das partes nunca disse . Para fazer isso, primeiro faça o cruzamento das palavras faladas por ambas as partes.
Agora ainda assumimos que existem três palavras A, B e C.
palavra | frequência própria x | Frequência da outra parte y |
---|---|---|
UM | 50 | 50 |
B | 1000 | 1 |
C | 1 | 1 |
A palavra B foi dita por mim muito mais vezes do que pela outra pessoa, então a semelhança é obviamente muito baixa. Embora ambas as partes tenham dito a palavra C quase o mesmo número de vezes, o número base é muito pequeno para tirar conclusões confiáveis. Portanto, a palavra A tem a maior semelhança. Como calcular isso?
A comunalidade é o oposto da exclusividade, então podemos usar a recíproca da exclusividade? Sinto-me mal, em parte porque o denominador é
Para isso, usei a média harmônica: $$ beta=dfrac{2}{1/x+1/y} $$ Por que usar a média harmônica aqui em vez de outras médias, porque a média harmônica é aquela com o menor número entre as quatro médias, "comunalidade" enfatiza que ambas as pessoas devem falar com frequência, e uma não pode simplesmente dizer isso enquanto a outra não o faz. Ou seja, não importa o quanto uma das partes fale, o impacto sobre a comunidade será. também muito pequeno, como a palavra B (1000,1).
Usar a média harmônica pode garantir que a palavra A tenha maior semelhança.
Se você não quiser terminar, consulte o código-fonte.
Este projeto não integra a função de deixar rastros. Se a função de extrair dados de rastros for adicionada, uma operação de processo mais simples pode ser alcançada. No entanto, devido à capacidade do autor e às limitações de tempo, esta ideia não pode ser implementada no momento. Para outras funções que são insuficientes e podem ser melhoradas, você também pode deixar mensagens no GitHub ou no histórico oficial da conta. Pessoas com ideias semelhantes são bem-vindas para se juntar à equipe de desenvolvedores e vamos desenvolver uma melhor visualização do Wechat juntos!