当前位置: 首页 > news >正文

短文本合并重复(去重)的简单有效做法

不大合适的SimHash

前些日子看了Charikar SimHash的介绍《Simhash算法原理和网页查重应用》,核心思想是用一个f位的hash值来表示文件的特征值,然后使用hash值之间的Hamming距离来衡量相似性。输入的是一个文档的特征集合,输出的是f位的二进制数S。

于是用来测试短文本(长度在8个中文字符~45个中文字符之间)相似性,做法很简单:

1.将短文本做分词,得到分词数组,数组每一个元素都转为hash字符串。

2.利用simhash算法来计算分词数组的simhash值。

3.利用simhash的similarity算法计算simhash1和simhash2的相似度。

这种做法的缺点是:

1.误判率高。

如下图所示,

 http://images.cnblogs.com/cnblogs_com/zhengyun_ustc/255879/o_Simhash%E8%BF%91%E4%BC%BC%E6%9F%A5%E9%87%8D%E7%B2%BE%E5%BA%A6%E5%B9%B6%E4%B8%8D%E9%AB%98.png

SimHash可能不适合做这种短标题的重复度判断,虽然SimHash在空间消耗和计算复杂性方面相对Shingle和BloomFilter占优。

 

介绍一下2009年2月份我们做Twitter锐推榜时是如何做的

Twitter中对于热门事件的中文表达多种多样,转发时又往往会追加很多格式的各种内容,造成了相似内容的短文本的信息指纹不同,在这种情况下,段国成认为需要先为短文本抽取标签,再通过标签来计算相似度进行锐推合并。

1.短文本抽取标签的方法:

1.1. 剔除所有英文、数字、标点字符;

1.2. 剔除所有Twitter用户名;

1.3.分词,并标注词性,仅保留实体词性,如名词、动词;(技巧一!)

1.4.过滤掉常用实体词(常用实体词是通过对历史锐推训练而得,即建立自己的停止词表);(技巧二!)

1.5.计算保留实体词的词频,并以此为权重,选择权重大的词语作为标签;

1.6.标签数组长度大于一个阈值(如3),才认为是有信息量的锐推,否则忽略。(技巧三!)

 

2.合并相似短文本(即我们所说的Retweet)方法:

2.1.以每个标签作为Shingle特征(即核心思想还是“一个数据段分成若干Shingle,每个Shingle计算出一个hash值,然后组成一个以hash值为元素的数组,以此作为特征值或叫信息指纹来表示这个数据段”);

2.2.以网页去重领域中改进的Shingle方法来进行计算近期内(目的:缩小计算范围)锐推的相似度(Shingle算法的核心思想是将文本相似性问题转换为集合的相似性问题,改进的Shingle方法的时间复杂度近似于线性);

2.3.对相似程度大于一定阈值的、不同信息指纹的热门锐推,再次扫描出来,将它们的热度进行合并。

 

以上结果就构成了 @rtmeme 的运算机制。它特别适合处理十几个、几十个汉字的短文本合并重复,适用于微博领域。

 

也看到有人这么做:先Shingle再SimHash,不知道是否适合海量短文本合并重复,回头试试看。

@郑昀 于北京

 

 

推荐阅读:

1、

『我认为腾讯目前的O2O产品其实是没任何借鉴意义的,因为真的做得比较差。但我们也有一点做好的决心。……所以尽管我们在局部解决了闭环的问题,但实际上整个O2O的闭环仍然是遥遥无期的事情。』——《戴志康:让我焦躁并痛苦着的O2O》http://t.cn/zOFL5Cc

2、

#O2O是个伪概念#:知乎O2O系列问答:http://t.cn/SzuEjr ;清科投资集团对O2O的解读:http://t.cn/zOgcikN ;黄绍麟:O2O和无线电子商务是伪概念 http://t.cn/zOfodfZ

3、

推荐阅读:『而Google的#simhash#算法产生的签名,可以用来比较原始内容的相似度时,便很想了解这种神奇的算法的原理。出人意料,这个算法并不深奥,其思想是非常清澈美妙的。』——《Simhash算法原理和网页查重应用》http://t.cn/zOrhqUb

4、

旧文推荐阅读:『我的团长我的团中,学生李梁对龙文章说,我相信你们能战胜日本人,但问题仍然存在。李鸿章们不遗余力地修铁路、办实业,但问题依然存在。 器物上的改变是不会解决问题的。』http://t.cn/zOlg0Kg

 

赠图一枚:

http://ww4.sinaimg.cn/large/70a90346gw1dtjk9sv096j.jpg  

相关文章:

  • css布局,左右固定中间自适应实现
  • 写给兔小白的js教程(4)
  • 锐捷网络:让“店商”感知“大数据”的力量
  • 未来已来,4K激活字库产业新世代
  • Hadoop家族学习路线图
  • 让Ubuntu和Android同时运行(Ubuntu on Android)
  • 二叉树的创建和操作
  • 再谈java乱码:GBK和UTF-8互转尾部乱码问题分析
  • 1.ubuntu网络配置
  • 戴尔软件调查结果显示中型企业正积极实施大数据项目
  • C#基础知识整理:C#类和结构(4)
  • bzoj 1692: [Usaco2007 Dec]队列变换 ——二分+hash
  • Android 快捷小工具
  • linux find命令详解
  • 自动化测试基础篇--Selenium简介
  • AngularJS指令开发(1)——参数详解
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • gf框架之分页模块(五) - 自定义分页
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • PHP的类修饰符与访问修饰符
  • Quartz初级教程
  • rc-form之最单纯情况
  • SOFAMosn配置模型
  • tab.js分享及浏览器兼容性问题汇总
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 关于Java中分层中遇到的一些问题
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 记一次和乔布斯合作最难忘的经历
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 限制Java线程池运行线程以及等待线程数量的策略
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • #NOIP 2014# day.2 T2 寻找道路
  • $.proxy和$.extend
  • (1)(1.13) SiK无线电高级配置(六)
  • (pojstep1.3.1)1017(构造法模拟)
  • (SpringBoot)第二章:Spring创建和使用
  • (WSI分类)WSI分类文献小综述 2024
  • (一)基于IDEA的JAVA基础1
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)linux下的时间函数使用
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • . Flume面试题
  • .NET CLR基本术语
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .net中的Queue和Stack
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • ?php echo ?,?php echo Hello world!;?
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——
  • [AIGC] 开源流程引擎哪个好,如何选型?
  • [ai笔记3] ai春晚观后感-谈谈ai与艺术
  • [Asp.net MVC]Asp.net MVC5系列——Razor语法