10

我不确定如何定义它,但基本上我想从给定的 URL 中检索相关的图像和文本摘要。

例如 - 当用户将链接粘贴到 Facebook 上的共享框时,它会立即从文章本身和相关图像中获取文章标题和/或短文本块。它永远不会得到错误的图像,例如网站的徽标或文章本身周围的文字......

Google+ 和其他类似的社交网络或服务也是如此。

我首先假设我需要使用以下代码阅读页面内容,我如何确定哪个图像是相关的(来自文章正文)以及哪个文本是文章文本?

URL oracle = new URL("http://www.oracle.com/");
BufferedReader in = new BufferedReader(
    new InputStreamReader(oracle.openStream()));

String inputLine;
while ((inputLine = in.readLine()) != null)
    System.out.println(inputLine);

in.close();

我当然不是在这里要求代码(除非有人例如有一个片段并且愿意分享),而是更多关于如何处理这个......我从哪里开始?

任何帮助将不胜感激!

4

1 回答 1

9

我可以推荐Boilerpipe来提取原始文本,它使用一些高级算法来查找相关文本并删除它周围的样板(如菜单、页脚等)。

关于图像,除了使用评论中已经建议的元标记外,您还可以使用 html 解析器(如htmlparser)提取所有“img”标签,然后使用一些启发式方法来选择最好的。我正在使用一些启发式方法,例如:

  • 没有小于 30 像素的图片,它们通常是图标或广告跟踪图片
  • 平方越好,这避免了尺子和类似的东西
  • 没有标准的已知横幅尺寸
  • 页面越高越好
  • 样板提取的近似内容(这很难)

一段时间以来,我一直在生产中使用这些启发式方法进行页面抓取,并且它们给出了很好的结果。

但是,要正确应用这些规则,您可能需要下载图像以获取它们的大小和/或解析样式属性。

如果您打算将此服务器端作为页面抓取服务运行,那么没关系。如果您打算在 Android 设备上即时执行此操作,则它可能太重了。

于 2012-07-24T18:21:09.783 回答