【问题标题】:Detecting similar web pages检测相似网页
【发布时间】:2017-02-03 19:08:02
【问题描述】:

我有一个抓取网络并截取网页截图的系统。目前我只是简单地散列图像文件(存储为 png )。但是,这不适用于博客文章中包含 cmets 计数的页面。或查看次数。

所以我的问题是检测这些变化的最佳方法是什么?哪种算法效果最好?

【问题讨论】:

  • 不清楚你真正想要做什么......在大多数情况下,比较页面的文本标记比图像处理要简单得多。
  • html 标记可以非常不同,但生成相同的页面。例如。页面上的链接可能非常不同。正如我提到的,我想检测相似的页面,以便我可以将其作为一个登录页面而不是多个看起来相同的页面显示给用户。
  • "如果你能推荐完美的 java 库。" - 要求图书馆推荐与 SO 无关。我建议您编辑该行,因为它会吸引密切投票。
  • @samgak,我在其中添加了 Java,因为人们可能会给我提供的解决方案不是我需要的语言。但是我现在已经删除了它。

标签: java algorithm image-processing


【解决方案1】:

一个幼稚但非常容易实现的方法是清除每个页面中的所有数字字符并仅比较它们的字符内容。

【讨论】:

  • 我不是在寻找一个易于实施的解决方案,而是在寻找解决问题的最佳方法。最简单的实现方法实际上是逐个像素地检查,并检查特定百分比的像素是否相同。然而这可能不是最好的解决方案,这就是我想问这个问题的原因。
  • 如果你更喜欢hard方式,谷歌搜索“文本相似性度量”,这是一个例子:citeseerx.ist.psu.edu/viewdoc/…
【解决方案2】:

所以首先我们要检测发生变化的区域。一个简单的好方法是只取两个图像之间的差异,然后寻找差异大于零的所有区域。 之后,我们会查看每组点并查看原始图像中的这些点,并尝试使用一些 OCR 软件检测数字。

通用算法:

  1. 差异 = Im1 - Im2
  2. 阈值 Diff 得到阈值图像 ThIm,即如果 Diff(x,y) > 0 = ThIm(x,y) = 1 否则 ThIm(x,y) = 0。
  3. 在 ThIm 中查找连通分量
  4. 为每个连接的组件找到它周围的边界框。
  5. 使用边界框裁剪原始图像
  6. 在裁剪区域运行 OCR 并检查是否找到数字

【讨论】:

    猜你喜欢
    • 2014-10-03
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 2017-11-09
    相关资源
    最近更新 更多