我正在寻找一种算法,该算法可以从较长的字符串生成较短的(fx 16个字符(不重要)哈希码/摘要)。
主要要求是几乎相同的字符串应产生相同的摘要。
Fx 2几乎相同的邮件:
嗨,马丁。这是一些…垃圾邮件给您。关于XYZ。=> AAAA AAAA AAAA AAAA
嗨,波 这是一些…垃圾邮件给您。关于EFG。=> AAAA AAAA AAAA AAAA
返回相同的数字(或几乎相同),其中作为不同的邮件:
你好,芬恩。这是一封测试邮件。=> CCCC CCCC CCCC CCCC
将返回不同的摘要。
该算法将成为垃圾邮件过滤器的一部分。过滤器将记住确定为垃圾邮件的邮件摘要。如果在有疑问的邮件中显示相同的摘要,则相同的摘要将导致过滤器增加垃圾邮件分数。
我知道Levenshtein,但是这需要我预先了解琴弦。在这种情况下,我没有此信息。我可能有此信息,但是这将需要过滤器来存储所有垃圾邮件,并对照每一封进行检查,这将是一个非常缓慢的过程。
也许一些松散的压缩算法加上两者之间的Levenshtein距离的计算可能会起作用。
任何指针表示赞赏。
看起来您想要局部敏感的散列。考虑使用minhash或shingling。Rajaraman和Ullman的著作 Mining Massive Datasets 都有很好的解释。您会在python搜索博客中找到上述关键字的众多简短实现。
似乎还有其他方法(我不太了解),但是您可能会感兴趣,因为它们是专门针对垃圾邮件而设计的,尤其是nilsimsa哈希: