用于字符串相似性的 Python 摘要/哈希
Posted
技术标签:
【中文标题】用于字符串相似性的 Python 摘要/哈希【英文标题】:Python digest/hash for string similarity 【发布时间】:2012-01-13 10:22:07 【问题描述】:我正在寻找一种算法,它可以从较长的字符串生成一个短的(fx 16 字符(不重要)哈希码/摘要。
主要要求是几乎相同的字符串应该产生相同的摘要。
Fx 2 几乎相同的邮件:
嗨,马丁。这里有一些……给你的垃圾邮件。问候 XYZ。 => AAAA AAAA AAAA AAAA
嗨,博。这里有一些……给你的垃圾邮件。问候 EFG。 => AAAA AAAA AAAA AAAA
返回相同的摘要(或几乎相同),其中作为不同的邮件:
你好芬恩。这是一封测试邮件。 => 中交中交中交中交中交
将返回不同的摘要。
此算法将成为垃圾邮件过滤器的一部分。过滤器将记住来自确定为垃圾邮件的邮件的摘要。如果相同的摘要出现在有疑问的邮件中,则相同的摘要将导致过滤器增加垃圾邮件分数。
我知道 Levenshtein,但它要求我预先了解这些字符串。在这种情况下,我没有这些信息。我可以拥有这些信息,但这需要过滤器来存储所有垃圾邮件并检查每封邮件,这将是一个非常缓慢的过程。
也许一些松散的压缩算法加上计算两者之间的 Levenshtein 距离可以工作。
任何指针表示赞赏。
【问题讨论】:
对“相似字符串哈希”的简单搜索会返回该问题的重复分数。 【参考方案1】:看起来你想要locality-sensitive hashing。考虑使用minhash 或shingling。 Rajaraman & Ullman 的书Mining Massive Datasets 对两者都有很好的解释。您会在 python 搜索博客中找到许多简短的实现,以查找上述关键字。
似乎还有其他方法(我不太了解),但您可能会感兴趣,因为它们是专门为垃圾邮件量身定制的,尤其是 nilsimsa 哈希:
解释in that paper 其中有一个python port on pypi【讨论】:
那是pypi不是pypy,pypy是python解释器,pypi是python包索引。以上是关于用于字符串相似性的 Python 摘要/哈希的主要内容,如果未能解决你的问题,请参考以下文章