【问题标题】:Given html file extract just meaningful text给定 html 文件只提取有意义的文本
【发布时间】:2015-03-31 11:49:59
【问题描述】:

给定一个包含 css 链接、图像链接等的标准 html 文件,如何才能提取有意义的文本?有意义的意思是与页面相关的文本。所以在 StackOverflow 的情况下,问题和答案文本。对于新闻网站,这将是故事的主体。

可能使用的一种算法是确定什么是句子:搜索开头包含大写字母且结尾包含句号的单词序列(粗略但只是入门的东西)。

有什么替代品?

更新:@Vanaja Jayaraman 建议的锅炉管似乎运作良好。我需要为锅炉管道添加以下 Maven 依赖项

<dependency>
    <groupId>xerces</groupId>
    <artifactId>xercesImpl</artifactId>
    <version>2.11.0</version>
</dependency>

<dependency>
    <groupId>net.sourceforge.nekohtml</groupId>
    <artifactId>nekohtml</artifactId>
    <version>1.9.21</version>
</dependency>

提取文本的代码(Scala):

  val source = scala.io.Source.fromFile("c:\\news1.html")
  val lines = source.mkString
  source.close()
println(de.l3s.boilerpipe.extractors.ArticleExtractor.INSTANCE.getText(lines));

【问题讨论】:

  • 有意义的文本因页面和您对特定页面的兴趣而异。我认为您需要以更精确的方式定义“有意义”以获得好的答案。要么以一般方式进行,使其成为页面的主要文本内容,要么以更具体的方式进行,以便您只需要来自 SO 页面的问答,如您的示例所示。
  • @Einar Sundgren 我定义的算法应该找到“正文内容”和“问答”。
  • 这会变得非常复杂,因为可以认为“有意义”的内容因读者而异。我建议您从一些有监督的机器学习开始,确定您/用户认为在“有意义”范围内的内容。从给定的训练集中,您可以确定未知集中每个用户的有意义的部分。训练集的参数也很广泛。可能是 html/css/js 标签与基本的 nlp 算法相结合,例如检查 n-gram 是否构成句子的有效部分。

标签: java algorithm nlp jsoup


【解决方案1】:

如果您输入的是新闻网站,您可以使用Boilerpipe 的文章提取器。 Boilerpipe 还提供其他一些提取器类型。

在JSoup中你可以使用选择器的概念。

【讨论】:

  • 谢谢,这很好用。我已经用一些附加信息更新了答案。
【解决方案2】:

您可以使用 HTML 选择器,例如 class、id、paragraph 等。您可以通过使用 .text() 获取文本,通过调用 .HTML 获取 HTML。我之前刮了一个网站,你可以看看here。这有点乱,但它会帮助你。

Here是不错的教程

【讨论】:

    猜你喜欢
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多