前言

    最近做了新闻去重算法的工作,mark下
    两个应用场景:1. 重复新闻整体检测、去重   2. 从非重复的新闻中寻找重复的句子,依次判断两篇新闻是否存在同一个话题的不同观点(多方观点提取)
     本人不负责爬虫,爬虫的同事只做了简单的新闻title重复的检测、去重。 我提供内容的检测算法

一 通用网页去重算法框架

二 simhash算法

简单一查网页去重,就知道google的simhash算法。 来自于GoogleMoses Charikar发表的一篇论文“detecting near-duplicates for web crawling”中提出了simhash算法,专门用来解决亿万级别的网页的去重任务。

simhash作为locality sensitive hash(局部敏感哈希)的一种

流程

simhash算法分为5个步骤:分词、hash、加权、合并、降维,具体过程如下所述:

  • 分词

    • 给定一段语句,进行分词,得到有效的特征向量,然后为每一个特征向量设置1-5等5个级别的权重(如果是给定一个文本,那么特征向量可以是文本中的词,其权重可以是这个词出现的次数)。例如给定一段语句:“CSDN博客结构之法算法之道的作者July”,分词后为:“CSDN 博客 结构 之 法 算法 之 道 的 作者 July”,然后为每个特征向量赋予权值:CSDN(4) 博客(5) 结构(3) 之(1) 法(2) 算法(3) 之(1) 道(2) 的(1) 作者(5) July(5),其中括号里的数字代表这个单词在整条语句中的重要程度,数字越大代表越重要。
  • hash
    • 通过hash函数计算各个特征向量的hash值,hash值为二进制数01组成的n-bit签名。比如“CSDN”的hash值Hash(CSDN)为100101,“博客”的hash值Hash(博客)为“101011”。就这样,字符串就变成了一系列数字。
  • 加权
    • 在hash值的基础上,给所有特征向量进行加权,即W = Hash * weight,且遇到1则hash值和权值正相乘,遇到0则hash值和权值负相乘。例如给“CSDN”的hash值“100101”加权得到:W(CSDN) = 100101 4 = 4 -4 -4 4 -4 4,给“博客”的hash值“101011”加权得到:W(博客)=101011 5 = 5 -5 5 -5 5 5,其余特征向量类似此般操作。
  • 合并
    • 将上述各个特征向量的加权结果累加,变成只有一个序列串。拿前两个特征向量举例,例如“CSDN”的“4 -4 -4 4 -4 4”和“博客”的“5 -5 5 -5 5 5”进行累加,得到“4+5 -4+-5 -4+5 4+-5 -4+5 4+5”,得到“9 -9 1 -1 1”。
  • 降维
    • 对于n-bit签名的累加结果,如果大于0则置1,否则置0,从而得到该语句的simhash值,最后我们便可以根据不同语句simhash的海明距离来判断它们的相似度。例如把上面计算出来的“9 -9 1 -1 1 9”降维(某位大于0记为1,小于0记为0),得到的01串为:“1 0 1 0 1 1”,从而形成它们的simhash签名。
流程图:
    
>>> bin(2305843056189898754)
'0b10000000000000000000000000101011110000000000000000000000000010'
>>> bin(2305843034715062278)
'0b10000000000000000000000000010111110000000000000000000000000110'
>>> 2305843056189898754 & 2305843034715062278
2305843013240225794
>>> bin(2305843013240225794)
'0b10000000000000000000000000000011110000000000000000000000000010'
>>> 所以2305843056189898754和2305843034715062278的海明距离为6

三 建立索引

       在处理新闻重复检测时,由于我们只取两天内的新闻做比较,数据量小,所以直接采用了遍历的方法。
       但实现多放观点的算法时需要查询以往的所有新闻,高效的搜索是必须的。

四 要点说明

       要点1. 我们采用了谷歌的索引策略,将64位分4段。最初按照顺序取16,16,16,16,但是发现第一个16位存在大
量相等的情况,第二个16位也存在不小的重复。所以调整了分段办法,如下:
    fir = hash_bits & 0b11000000000000000000000000111111110000000000000000000000001111sec = hash_bits & 0b00111100000000000000001111000000001111000000000000000011110000thi = hash_bits & 0b00000011110000000011110000000000000000111100000000111100000000fou = hash_bits & 0b00000000001111111100000000000000000000000011111111000000000000

实际应用中,因为使用了数据库的索引,为了可以进一步缩小范围,项目中还另外建立了4段:fir2, sec2, thi2, fou2,这四段使用不同的

取位方法。这样满足条件的句子必定满足:前四段至少一个相同并且后四段至少一个相同。 这样可以极大的缩小有效氛围。
      要点2. 在数据库冲存放了四段的字段,利用数据库的索引而不用自己建索引
      要点3. 涉及到句子的simhash,短文本simhash不是十分准确,测试效果来看,去除停用词、特殊词性的词后效果
明显提升。 可以参考http://www.cnblogs.com/zhengyun_ustc/archive/2012/06/12/sim.html
      要点4.  由索引找到hash值上相似的句子后,为了避免hash策略可能带来的冲突问题,可以直接使用cos距离或者直接
判断相同词比例来更精确的判断两个句子是否相等。 我采用了后一种方法。
       还可以自建hash索引http://www.lanceyan.com/tech/arch/simhash_hamming_distance_similarity2-html.html, 消耗内存

五 去重策略------后补充

前面讲的主要是simhash算法,用于检测相同的文本。
那重复的新闻如何选择丢掉哪一篇呢? 实际项目中,需要考虑的是新闻的评分机制,正在进行,初步选定LR来做,等项目
完成再做补充

新闻内容去重算法simhash实践相关推荐

  1. 基于扩散模型的3D智能创作引擎与内容投放算法最新实践

    3D模型在智能设计领域以其可塑性,可编辑性有着属于自己的独特优势,扩展了2D设计的上限.但是其目前存在的局限性也是显而易见的:建模的效率,模型的数量,以及3D设计的成本. 背景 在商品展示侧,围绕人- ...

  2. 网页去重||SimHash(高效的文本相似度去重算法)——适合大批量文档的相似度计算

    网页去重 之前我们对下载的url地址进行了去重操作,避免同样的url下载多次.其实不光url需要去重,我们对下载的内容也需要去重. 在网上我们可以找到许多内容相似的文章.但是实际我们只需要其中一个即可 ...

  3. 海量数据去重之SimHash算法简介和应用

    SimHash是什么 SimHash是Google在2007年发表的论文<Detecting Near-Duplicates for Web Crawling >中提到的一种指纹生成算法或 ...

  4. [转] 文本相似性算法Simhash原理及实践

    simhash(局部敏感哈希)的原理 simhash的背景 simhash广泛的用于搜索领域中,也许在面试时你会经常遇到这样的问题,如果对抓取的网页进行排重,如何对搜索结果进行排重等等.随着信息膨胀时 ...

  5. [转]文档去重算法:SimHash和MinHash

    simhash与重复信息识别 来源: http://grunt1223.iteye.com/blog/964564 在工作学习中,我往往感叹数学奇迹般的解决一些貌似不可能完成的任务,并且十分希望将这种 ...

  6. 移动端的人脸检测及去重算法实践

    由于移动嵌入式设备本身硬件的性能的限制,在运行上需要优化检测.去重等算法,保证APP运行流畅.影响人脸检测运行速度因素主要在输入图片大小,神经网络模型选择和训练模型的数据量等. 人脸检测中使用caff ...

  7. python知网查重_用Python写了个检测抄袭/文章去重算法(nshash)

    中国人有句话叫"天下文章一大抄",但是在正规场合下"抄"是要付出代价的,比如考试.写论文是不能抄的,一旦被发现后果相当严重.在互联网出现之前,"抄&q ...

  8. python文章抄袭检测_用Python写了个检测文章抄袭,详谈去重算法原理

    在互联网出现之前,"抄"很不方便,一是"源"少,而是发布渠道少:而在互联网出现之后,"抄"变得很简单,铺天盖地的"源"源 ...

  9. Python检测文章抄袭,谈谈去重算法原理

    中文内容新闻网站的"转载"(其实就是抄)现象非常严重,这种"转载"几乎是全文照抄,或改下标题,或是改下编辑姓名,或是文字个别字修改.所以,对新闻网页的去重很有必 ...

最新文章

  1. 关于Javascript的内存泄漏问题的整理稿
  2. 解决GET请求时中文乱码的问题
  3. 开发日记:接口开发设计
  4. Acey.ExcelX4.2版本发布
  5. servlet容器开发要点
  6. 快、准、狠!秒杀Excel的报表工具,十分钟教你做好数据填报
  7. Fiddler使用AutoResponder进行本地文件和线上文件的映射
  8. Oracle安装基本步骤
  9. python入侵个人电脑的步骤图解台式_入侵渗透专用的python小脚本脚本安全 -电脑资料...
  10. 惠普打印机驱动下载安装后不能使用,驱动人生解决方案
  11. 无线局域网和蜂窝移动网络_干货!无线AP覆盖系统解决方案
  12. 电脑重装系统后c盘数据能恢复吗?
  13. 历年数学界菲尔兹奖及其得主简介
  14. R语言McSpatial_R语言天气可视化应用
  15. 利用python查询电脑配置_干货|利用Python将地址转换为经纬度坐标
  16. 几行代码解决百度云视频变成 8秒净网公告问题(滑稽)
  17. 程序员最新面试谈薪指南
  18. 铁道部正在研究高铁月票 重申上座率120%准确可靠
  19. Vue-过滤器的使用
  20. BZOJ 1116 [POI2008]CLO 并查集

热门文章

  1. 推荐几个好用的在线代码编译器
  2. java jacob下载_jacob-1.18_src jacob开发包网站下载的 - 下载 - 搜珍网
  3. NLP实战1--词典、停用词、问答对的准备
  4. webrtc c++(二) webrtc音频操作麦克风录音与播放,声音控制
  5. 转:intellij idea如何右键新建文件中添加jsp格式的文件【初学者适用】
  6. 在这个浮躁的年代,多读点书吧
  7. 商务风个人职业生涯规划管理PPT模板
  8. ubuntu和Windows双系统安装
  9. 湖北省孝感市谷歌高清卫星地图下载
  10. 【自考】-操作系统概论