生成标识字符串的值并查找重复/几乎重复的值

时间:2010-03-09 09:28:04

标签: c# .net

我需要一个包含文件信息的表,以及一个标识此文件内容的值。文件类型主要是pdf,我有逻辑从文件中提取内容。

现在我创建内容的哈希值并将其放在表中。有了这个值,我就能找到重复的文件。但是,客户还希望识别几乎相同的文件。例如,如果版权信息发生变化 - 或者其他一些小的变化。将会对此结果进行人工审核,因此我不需要100%的命中率。

我想到的第一件事是创建一个包含50个最流行单词的表,并将它们与id相关联。我可以使用它并在每个文档中进行单词计数。结果将是这样的字符串(其中单词1被击中20次,单词2被击中12次)“1:20-2:12 ......”

任何人都有一个更好的建议,如何创建一个可以识别几乎相同的文件/字符串的值?

2 个答案:

答案 0 :(得分:1)

您可以查看用于比较序列之间相似性的Levenshtein distance,这里是C#中的sample implementation

答案 1 :(得分:0)

我想到了两种解决方案:
1.有许多diff工具可以比较文本,比如WinMerge,它也可以比较整个文件夹。您可以将pdf内容提取到文本文件,然后从程序内部调用该工具并计算差异的数量,这应该告诉您文件的不同。
2.您可能正在计算md5或sha1哈希值,这些哈希值在输入的微小变化时会发生剧烈变化。尝试找到(或创建)不会更改散列的算法。你可能会遇到很多碰撞,但这应该很容易解决。