【发布时间】: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 是否构成句子的有效部分。