用于字符串相似性的Python摘要/哈希

时间:2012-01-13 10:22:08

标签: python algorithm similarity

我正在寻找一种能够从更长的字符串生成短(fx 16个字符(不重要)哈希码/摘要的算法。

主要要求是几乎相同的字符串应该产生相同的摘要。

Fx 2几乎相同的邮件:

嗨马丁。这里有一些...垃圾邮件给你。关心XYZ。 => AAAA AAAA AAAA AAAA

嗨博。这里有一些...垃圾邮件给你。关心EFG。 => AAAA AAAA AAAA AAAA

返回相同的消化(或几乎相同),作为不同的邮件:

你好Finn。这是一封测试邮件。 => CCCC CCCC CCCC CCCC

将返回不同的摘要。

此算法将成为垃圾邮件过滤器的一部分。过滤器将记住邮件中的摘要,它肯定是垃圾邮件。如果相同的摘要显示在有疑问的邮件中,相同的摘要将导致过滤器增加spamscore。

我知道Levenshtein,但它要求我先了解弦乐。在这种情况下,我没有这方面的信息。我可以获得这些信息,但这需要过滤器来存储所有垃圾邮件并检查每个邮件,这将是一个非常缓慢的过程。

也许一些松散的压缩算法加上两者之间Levenshtein距离的计算可以起作用。

任何指示赞赏。

1 个答案:

答案 0 :(得分:10)

看起来你想要locality-sensitive hashing。考虑使用minhash或shingling。拉贾拉曼和拉贾拉曼都有很好的解释。厄尔曼的书,Mining Massive Datasets。你可以在python搜索博客中找到许多简短的实现,用于上面的关键字。

似乎还有其他方法(我不太了解),但您可能会感兴趣,因为它们是专为垃圾邮件定制的,特别是nilsimsa哈希: