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

8 投票
1 回答
3707 浏览
提问于 2025-04-17 10:09

我在寻找一种算法,可以从较长的字符串生成一个短的(比如16个字符,具体长度不重要)哈希码或摘要。

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

比如这两封几乎相同的邮件:

嗨,马丁。这是一些...垃圾邮件给你。祝好,XYZ。

> AAAA AAAA AAAA AAAA

嗨,博。这是一些...垃圾邮件给你。祝好,EFG。

> AAAA AAAA AAAA AAAA

这两封邮件返回的摘要是相同的(或者几乎相同),而另一封不同的邮件:

你好,芬。这是一封测试邮件。

> CCCC CCCC CCCC CCCC

则会返回一个不同的摘要。

这个算法将用于垃圾邮件过滤器。过滤器会记住那些它确定是垃圾邮件的邮件摘要。如果在一些不确定的邮件中出现了相同的摘要,这个相同的摘要会导致过滤器增加垃圾邮件的评分。

我知道Levenshtein算法,但它需要我事先知道字符串。在这种情况下,我没有这些信息。我可能会有这些信息,但那样的话,过滤器就需要存储所有的垃圾邮件并逐一检查,这样会非常慢。

也许可以尝试一些松散的压缩算法,再结合计算两个字符串之间的Levenshtein距离。

任何建议都非常感谢。

1 个回答

11

看起来你想要了解局部敏感哈希。可以考虑使用MinHash或者分片技术。Rajaraman和Ullman的书中有很好的解释,书名是挖掘海量数据集。你可以在网上搜索这些关键词,找到很多简短的Python实现。

似乎还有其他方法(我对这些了解不多),但可能会对你有帮助,因为它们特别针对垃圾信息,尤其是nilsimsa哈希:

撰写回答