0

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

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

感谢您的帮助.. 只是不知道我将如何做到这一点,也许一些伪代码也会有所帮助。

4

2 回答 2

3

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

我认为您最好检查一些Locality-sensitive 散列算法,例如MinHash,正如他们在这个问题中推荐的那样。

于 2012-11-09T02:26:20.433 回答
1

任何正常含义的散列都会对大量信息松散,以使相似性比较有意义。加密哈希(MD5、SHA1/SHA256、...)几乎可以保证对于此类比较毫无用处,因为它们从相似的输入中显式地产生非常不同的值。

您需要构造一些特殊的“哈希”。即使用已知单词的索引列表(如“house”、“door”、“window”)作为哈希。比查看您计划比较的 2 个文件是否具有相似的单词列表(检查两个单词索引列表是否都已排序会非常便宜)。

于 2012-11-09T02:23:25.040 回答