是否有一个工具可以测量文件差异百分比?

是否有一个工具可以测量文件差异百分比?

我想比较两个文本文件。通常,我只需diff比较两个文件即可查看差异。这很好,但我更关心两个文件的百分比差异。

例如:

File A:
    banana
    TESTING

File B:
    TESTING

在这种情况下,结果将有 50% 的差异。我查看了wdiff,它基本上有效,但例外是它逐字查看元素(事实上,我可以通过执行 获得上述结果wdiff -s filea fileb)。

是否存在一个工具可以提供按字符/字节级别的文件百分比差异?

答案1

对两个文本文件进行逐个字符的比较实际上是编辑距离计算。Linux 中没有一个常见的独立程序可以执行此计算,但有一些库函数(我知道 PHP 有一个)和大量在线示例代码可用于此计算。

另一个小警告是,Levenshtein 距离严格来说是两个字符串之间的变化次数,因此如果您要查找百分比,则需要对计算出的距离进行标准化。除以两个字符串长度(文本文件的大小)的平均值是一种广泛使用的标准化方法。

答案2

我在两组转录文件中遇到了类似的问题,我使用了 Levenshtein 距离,正如最多投票的答案中所建议的那样,但发现使用 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

答案3

尝试将 diff 的输出通过管道传输到wc命令。有多种选择,但-l可能会为您提供更改行数的合理计数。由于 diff 输出的是行前和行后以及其他格式,因此您可能需要将结果除以该因子,然后将其放在整个文件长度(以行为单位)的结果上。wc -l

答案4

我建议差异

❯ sdiff -B -b -s ~/temp/code_old.cpp ~/temp/code_new.cpp | wc
      47     366    3685
      ^^ ~~~ number of changed lines

然后:

❯ cat ~/temp/code_old.cpp | wc
     131     466    4388
     ^^^ ~~~ number of lines before change

然后:

❯ bc -l <<< "47./131.*100."

35.87786259541984732800

给出结果——代码改变了 35%。(计算行数)。

相关内容