Telegram超级群组消息去重的SimHash汉明距离
4 个回答
SimHash算汉明距离确实可以做消息去重,关键在于把文章变成固定长度的指纹,然后比较两指纹的差异数。
重点:
1. 文本标准化(统一大小写、去标点)
2. 指纹长度:8~16位最为常用,Telegram场景建议12位起
3. 1/4的指纹长度作为汉明距离阈值较为合理
Python推荐使用datasketch库,Go推荐使用go-simhash包。注意要预留扩展字段存储原始消息ID。
SimHash算汉明距离可以去重,核心是把文本转成固定长度的指纹,汉明距离小就去重。有Python的datasketch库,常见Telegram爬虫+SimHash组合拳。注意调参,阈值低点。代码逻辑不难,文本预处理很关键。偷懒可以直接用Redis的Bloom Filter过滤明显重复。做过几亿级消息量的项目,可行。
SimHash+汉明距离适合做消重,原理是将文本转化为hash值,然后对比差异位数,距离小于3基本就是重复了。现成工具推荐Python的datasketch库,里面有SimHash的实现方法,记得预处理的时候过滤掉无意义的符号。
SimHash适合Telegram消息去重,基于消息文本特征,汉明距离小于3即为重复,Python有simhash库,记得预处理去掉无效字符。建议部署时加入缓存提升效率,大消息可切分后合并SimHash。