Não será fácil limpar o lixo eletrônico dos e-mails, porque os clientes e as pessoas de software de e-mail identificam as partes de e-mail de maneira conveniente, mas para limpar as mensagens, eu começaria:
As respostas podem ter o texto misturado com aspas, antes, depois ou misturado com citações em bloco. Em alguns casos, como você mencionou, vários elementos podem ser limpos diretamente:
- cabeçalhos ocultos;
- encaminhar e responder cabeçalhos dos principais clientes de email
- blockquotes dos principais clientes de email
Não é muito, mas é um começo.
Você pode melhorar isso encadeando as mensagens por thread e usando um algoritmo diff de maneira semelhante ao git para o código-fonte
As mensagens de email têm cabeçalhos ocultos que podem ser usados para encadear as respostas e encaminhar juntas. Usando isso, você pode montar um gráfico direcionado de conversas. Não sei o quanto isso é confiável, mas suspeito que agrupe muitas conversas. Muitos servidores de lista têm navegação por "thread" que funciona bem e eu suspeito que eles encadearam as mensagens dessa maneira.
Você pode melhorar isso comparando diretamente os e-mails da mesma fonte para isolar assinaturas
Assinaturas automatizadas estão presentes na maioria dos emails da mesma fonte. Não apenas isso, mas slogans e outras decorações frequentemente usadas por um autor. Ao comparar vários e-mails da mesma pessoa, essas decorações podem ser encontradas e esmaecidas, não sendo significativas para o conteúdo. Minha intuição me diz que será necessário algum ajuste para isolar a decoração no início e no final do email e evitar expressões comuns no texto usado pelo autor.
Você pode melhorar isso comparando diretamente o email com um banco de dados de email para encontrar textos semelhantes
Isso será difícil de desenvolver, mas pode ser uma ferramenta de auditoria fantástica.
Minha intuição é que, ao agrupar uma mensagem, encontrar as mensagens com as mesmas palavras e compará-las, será possível usar uma pesquisa de texto completo do banco de dados PostgreSQL para fornecer um desempenho razoável nisso.
[chunk 1][chunk 3][chunk 5][chunk 7]
[chunk 2][chunk 4][chunk 6]
chunk 1: 0-50; chunk 2: 25-75; chunk 3: 50-100 ...
A idéia é listar as palavras em um pedaço, identificar as que são menos usadas e consultar no banco de dados os e-mails que as contêm. Em seguida, compare os e-mails através de um algoritmo diff para ver quais partes são iguais.
Isso permitirá ir além do encadeamento direto pelo ID das mensagens. Por exemplo, ele reconhecerá copiar e colar.
No entanto, alguns ajustes serão necessários aqui
Você pode melhorar a correspondência por meio de técnicas de mineração de texto
A mineração de texto padrão (como descrito em muitas teses) inclui uma etapa de limpeza onde o texto é simplificado. Os conectivos são removidos do texto (a, é, e, ou, etc.) e as palavras são transformadas como (por exemplo: alterado, alterável para alterar). Este texto convertido não é legível, mas a correspondência de texto é boa.
Uma limpeza como essa isolará os problemas correspondentes que normalmente acontecem quando a pessoa reformata o email ou o email é convertido de html de / para texto sem formatação. Isso também evitará correções simples de ortografia para quebrar a corrente.
Conclusão
Este é um problema interessante. Minha sugestão é puramente baseada na intuição, não testada e especulativa na melhor das hipóteses. É o caminho inicial que eu começaria a pesquisar se apresentasse um problema como esse. Acredito que será difícil desenvolver, mas pode ser uma poderosa ferramenta de comunicação e auditoria.
Uma solução como essa provavelmente criará um bom arquivo de email. Ao encadear as mensagens e armazenar apenas os diffs e chunks, você provavelmente terá um enorme fator de compactação além de qualquer coisa que um zip possa fazer.
Além disso, isso seria uma poderosa ferramenta de auditoria. Tornaria evidente quando uma pessoa forjou uma citação em bloco, uma resposta ou um encaminhamento. A citação em bloco modificada será identificada como texto original e não será limpa pela solução.