A pouco empo atrás um colega me perguntou como ele poderia fazer para verificar se um dado arquivo texto era igual a outro. A primeira resposta que me veio a cabeça foi de fazer um programa que comparasse linha a linha. A segunda solução ( esta não foi uma ideia minha) era de utilizar a assinatura MD5 de cada arquivo e comparar. As duas soluções o atenderiam perfeitamente, onde a primeira iria precisar de um certo desenvolvimento e a segunda, ele poderia usar o md5sum e/ou outros softwares já existentes.
A questão que me surgiu, e uma ideia para uma ferramenta, era o que aconteceria se os dois arquivos tivessem os mesmos dados (textos por exemplo) porém um tivesse uma linha em branco a mais ou se num deles faltasse uma linha ? Possivelmente a verificação com os métodos acima falharia (apesar de achar que o md5 ignora espaços em branco, imagina se colocasse um comentário a mais). Não seria interessante uma ferramenta que dissesse o quanto dois arquivos são semelhantes? Algo do tipo : “O arquivos A e B possuem 80% de similaridade”
Mas como seria possível fazer isso?
Bem, para aqueles que lêem este blog a um certo tempo (caso não seja seu caso dá uma olhada nos post antigos), sabe que tenho lido e estudo muito a questão de algoritmos de inteligência artificial para processamento de conhecimento coletivo. Num dos livros do assunto, “Programando Inteligência Coletiva” do Toby Segaran, logo nos primeiros capítulos ele ensina algumas técnica para que construa algoritmos de agrupamento de blogs, por exemplo. Tais algoritmos verificam o grau de similaridade das fontes e os agrega por proximidade.
Diante disso, se funciona para Blogs, logo isso funciona também para arquivos, ainda mais arquivos textos ou rtf (doc, odt, etc). Por isso penso, usando as dicas do livro, fazer uma ferramenta que lerá os arquivos e diagnosticará o grau de semelhança.
Prometo que assim que tiver algo coloco no github para a galera mexer, contribuir e usar. Aguardem.
http://blogblogs.com.br/
Interessante o exercício.
Mas se o objetivo fosse simplesmente comparar os arquivos vc poderia usar o gnu wdiff (Word Diff) disponível em http://www.gnu.org/software/wdiff/
[]‘s, HB
O exercicio seria tentar criar algo que desse um grau de similaridade. Textos iguais seriam 100 %, mas arquivos que falem de um mesmo tema seria semelhante 70 % por exemplo.
Seria legal para ver se dois arquivos falam sobre algo parecido, etc. Depois poderia expandir isso para uma ferramenta de indexação que deixar os arquivos que falam da mesma coisa agrupados para uma funcionalidade de sugestão.