使用计算开销小的Python哈希算法检测转发

2 投票
7 回答
837 浏览
提问于 2025-04-15 11:22

为了能够检测某条推文的转发情况,我打算把每条格式化的推文的哈希值存储在数据库里。

我应该使用什么样的哈希算法呢?其实不需要太复杂,简单一点就行,主要是要能把数据存储成一种可以比较是否相同的形式,而且要高效。

我第一次尝试使用的是md5哈希算法。但我发现其实还有一些更高效的哈希算法,因为我并不需要考虑安全性。

7 个回答

4

我对Python不太熟悉(抱歉,我是个Ruby爱好者),不过你可以试试以下几种方法。

假设: 你可能会随着时间存储成千上万条推文,所以把一个哈希值和表里的“每一条记录”进行比较会很低效。而且,转发的推文不一定是原始推文的完全复制品。毕竟,原作者的名字通常会被包含在内,这也占用了140个字符的限制。所以,也许你可以用一种比“简单哈希”更准确的解决方案呢?

  1. 标记和索引

    以标准的方式对消息的组成部分进行标记和索引。这可以包括将哈希的#....、以@开头的@....和网址字符串视为“标签”。在去掉一些无关的词和标点符号后,你也可以把剩下的单词当作标签。

  2. 快速搜索

    数据库在快速查找多个组成员时表现得很糟糕(我假设你使用的是Mysql或Postgresql,这两者在这方面都不太好)。不如试试一些免费的文本引擎,比如Sphinx Search。它们在处理多个组成员时非常非常快(也就是检查关键词是否存在)。

    使用Sphinx或类似的工具,我们可以在提取的所有“标签”上进行搜索。这可能会返回一小部分“潜在的原始推文”。然后,使用相似度匹配算法逐一进行比较(这里有一个Python的例子 http://code.google.com/p/pylevenshtein/)。

现在,让我热烈欢迎你进入文本挖掘的世界。

祝你好运!

6

你真的有必要进行哈希处理吗?Twitter上的消息很短(而且存储空间也便宜),所以直接存储整个消息可能比花时间去哈希处理更好。

0

你是想给一个字符串生成哈希值,对吧?内置的数据类型可以直接进行哈希处理,只需要用 hash("some string") 这个命令,就能得到一个整数。这和Python在字典中使用的函数是一样的,所以这是一个很不错的选择。

撰写回答