计算校验和相似度

时间:2012-11-09 02:04:15

标签: c# .net

我周六发布关于计算2个文件之间差异的百分比的相似性,使用1中出现的单词数而不是其他单词...这是一个糟糕的工作方式所以我认为更好的方法是制作两个文件的MD5或CRC校验和并使用它来计算差异..使得校验和是容易的部分,但我不确定如何确定差异,我知道百分比是这样的: / p>

    double sameWordPercentage = (1.0 * n / m) * 100;
    Console.WriteLine(Math.Round(sameWordPercentage, 2)  + "% Similar");

感谢您的帮助..我没有清楚的图像,我将如何做到这一点,也许一些伪代码也会有所帮助。

2 个答案:

答案 0 :(得分:3)

MD5和CRC都是散列算法,它们为类似的输入输出非常不同的结果(这是设计的)。

我认为您最好检查Locality-sensitive hashing之类的MinHash算法,正如他们在this question中所推荐的那样。

答案 1 :(得分:1)

任何正常意义上的散列都会松散大量信息,使相似性比较变得有意义。加密哈希值(MD5,SHA1 / SHA256,...)几乎可以保证对这种比较无用,因为它们明确地从类似的输入产生非常不同的值。

你需要构建一些特殊的“哈希”。即使用已知单词的索引列表(如“house”,“door”,“window”)作为哈希。然后看看你计划比较的2个文件是否有类似的单词列表(如果两个单词索引列表都被排序,那么检查是非常便宜的)。