7

Я ищу, чтобы сравнить два текстовых файла. Обычно я могу использовать diff для сравнения двух файлов, чтобы увидеть различия. Это здорово, за исключением того, что меня больше беспокоит разница в процентах между двумя файлами.

Например:

File A:
    banana
    TESTING

File B:
    TESTING

В этом случае результатом будет разница в 50%. Я взглянул на wdiff , и он в основном работает, за исключением того, что он рассматривает элементы слово за словом (на самом деле, я могу получить приведенный выше результат, выполнив wdiff -s filea fileb).

Существует ли инструмент, обеспечивающий разницу в процентах файлов на уровне символов / байтов?

3 ответа3

4

Посимвольное сравнение двух текстовых файлов фактически является вычислением расстояния Левенштейна . В Linux нет обычной автономной программы, которая бы выполняла эти вычисления, но есть некоторые библиотечные функции (я знаю, что в PHP она есть) и множество примеров кода в Интернете для этого вычисления.

Еще одно маленькое предостережение заключается в том, что расстояние Левенштейна является строго числом изменений между двумя строками, поэтому, если вы ищете процент, вам нужно нормализовать рассчитанное расстояние. Деление на среднее значение длин двух строк (размеров текстовых файлов) является широко используемой нормализацией.

0

Попробуйте передать вывод, если diff, к команде wc . Есть несколько вариантов, но -l , скорее всего, подсчитает количество измененных строк. Поскольку diff выводит строки до и после вместе с некоторым другим форматированием, вам, возможно, придется разделить результат на этот коэффициент, а затем поместить его на результат всей длины файла в строках. wc -l

0

У меня была похожая проблема с двумя наборами транскрибированных файлов. Я использовал расстояние Левенштейна, как было предложено в ответе с наибольшим количеством голосов, но нашел использование Python лучшим вариантом

pip install python-Levenshtein

и код будет таким:

import sys

from Levenshtein import *

txt1 = open(sys.argv[1]).read()
txt2 = open(sys.argv[2]).read()

print("distance:", distance(txt1,txt2)

использовать:

python distance.py file1 file2

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .