如何计算类似字符串的相等哈希值?

时间:2013-03-13 04:23:44

标签: hash levenshtein-distance

我创建Antiplagiat。我用的是shingle方法。例如,我有以下带状疱疹:

  1. 我去看电影院
  2. 我去看电影院
  3. 我去电影院
  4. 有没有一种计算这些行的相等散列的方法?

    我知道Levenshtein距离的存在。但是,我不知道应该采取什么来源词。也许有比考虑Levenshtein距离更好的方法。

2 个答案:

答案 0 :(得分:0)

哈希的问题在于,从逻辑上讲,你会遇到2个字符串,这些字符串由一个散列为不同值的字符而不同。

小证明:

考虑所有可能的字符串 假设所有这些哈希值至少为2个不同的值 将任何2个字符串A和B取样为不同的值 你可以通过一次改变一个角色来显然从A到B. 因此,哈希会在某些时候发生变化 因此,此时哈希对于单个字符更改将是不同的。

我能想到的一些选项:

  • 散列字符串的多个部分并检查每个散列。由于单个字符遗漏会导致哈希值出现显着差异,因此可能效果不会太好。

  • 检查一系列哈希值。哈希是一维的,但字符串相似性不是,因此这可能也不起作用。

总而言之,哈希可能不是最佳选择。

答案 1 :(得分:0)

这个问题有点陈旧,但您可能会对AT& T的两名研究人员this paper感兴趣。他们采用了一种让人想起Nilsimsa散列的技术来检测何时在一个时间窗口中看到类似的sms消息是“异常”的次数。

听起来Locality Sensitive hashing也与您的问题有关。