Compare dois documentos, encontre sentenças similares

1

Estou tentando comparar dois documentos de arquivos de texto (40 páginas +) que parecem ter frases semelhantes espalhadas por eles. Eu gostaria de detectar essas semelhanças de alguma forma. A primeira ideia que surgiu na minha cabeça foi procurar três palavras consecutivas que existem em ambos os arquivos (sem distinção entre maiúsculas e minúsculas). Infelizmente, não sou um mestre em Linux. Existe algum roteiro que identifique isso para mim?

    
por Error404 25.09.2016 / 18:22

1 resposta

1

Como extrair três palavras consecutivas para cada frase:

Suponha que os dois arquivos sejam chamados de file1.txt e file2.txt . Converta todos os finais de linha em um espaço usando tr e, em seguida, extraia linhas com três palavras consecutivas em cada usando sgrep (você provavelmente precisará instalar isto, muitas distribuições o oferecem como um pacote):

cat file1.txt | tr '[\n]' ' ' | sgrep -o '%r\n' '" "_." ".." "._" "' > file1.words
cat file2.txt | tr '[\n]' ' ' | sgrep -o '%r\n' '" "_." ".." "._" "' > file2.words

Certifique-se de inserir um espaço ou uma nova linha antes da primeira e depois da última palavra em file1.txt ou file2.txt , ou não funcionará na primeira vez. últimas três palavras. Isso mantém a pontuação e faz parte de uma palavra, você pode se livrar da pontuação, inserindo um adicional

... | tr -d '[,.;:()]' | ...

após o primeiro tr (o caractere | constrói "pipes" entre os comandos, então o próximo comando usa a saída do anterior).

Em seguida, encontre repetições das três palavras:

sort file1.words file2.words | uniq -d

Isso imprimirá qualquer conjunto de três palavras que ocorrerem várias vezes, seja no mesmo arquivo ou em file1.txt e file2.txt . Você precisará inspecionar manualmente cada ocorrência (usando a pesquisa em um editor de texto) para descobrir qual, mas você vai querer fazer isso de qualquer maneira para julgar a similaridade.

Esta ainda é uma aproximação muito grosseira da correspondência de similaridade, mas não conheço nenhuma ferramenta de linha de comando que ofereça algo como Medidas de distância Levenshtein em pares de linhas.

    
por 26.09.2016 / 07:52