如何衡量两个任意文件之间的相似性?

时间:2017-05-31 10:21:43

标签: git

我有两个任意文件。 Git不会将它们视为一个重命名的文件。是否有可能测量它们之间的相似性(百分比)?

2 个答案:

答案 0 :(得分:0)

可能会对行进行计数并将其与diff中的行数进行比较:

#!/bin/bash
SIZE1=`wc -l "$1" | cut -d' ' -f1`
SIZE2=`wc -l "$2" | cut -d' ' -f1`

#choose bigger file
SIZEMAX=$(($SIZE1>$SIZE2?$SIZE1:$SIZE2))

SIZEDIFF=`diff -u1 "$1" "$2" | wc -l | cut -d' ' -f1`

#divide second result halved by first result is the amount of change
#1 - amount of change is the similarity

perl -e "print (1.0 - ($SIZEDIFF/2.0) / $SIZEMAX)"

将代码放入similarity.sh并使用您要比较的文件调用./similarity.sh x.txt y.txt

答案 1 :(得分:0)

可以使用git diff -M来检测重命名。

来自git diff手册页:

  

-M [], - find-renames [=]              检测重命名。如果指定n,则它是相似性指数的阈值(即,与文件大小相比的添加/删除量)。例如,-M90%表示Git应该将删除/添加对视为a              如果文件的90%以上未更改,请重命名。如果没有%符号,则该数字将作为分数读取,并在其前面加上小数点。即,-M5变为0.5,因此与-M50%相同。同样,-M05是              与-M5%相同。要将检测限制为精确重命名,请使用-M100%。默认相似性指数为50%。