Boilerpipe似乎工作得很好,但我意识到我不仅需要主要内容,因为许多页面没有文章,只有一些简短的描述链接到整个文本(这在新闻中很常见)门户网站)我不想丢弃这些短文。
因此,如果API执行此操作,请获取不同的文本部分/块以不同于单个文本的方式分割每个部分(仅在一个文本中无效),请报告。
我从随机网站下载了一些页面,现在我想分析页面的文本内容。
问题是网页上有很多内容,如菜单,宣传,横幅等。
我想尝试排除与页面内容无关的所有内容。
以此页面为例,我不希望上面的菜单既不是页脚中的链接。
重要提示:所有网页都是HTML,是来自不同网站的网页。我需要建议如何排除这些内容。
目前,我认为从HTML中删除“menu”和“banner”类中的内容以及看起来像正确名称的连续单词(第一个大写字母)。
解决方案可以基于文本内容(不含HTML标记),也可以基于HTML内容(使用HTML标记)
编辑:我想在我的Java代码中执行此操作,而不是外部应用程序(如果可以的话)。
我尝试了解析此问题中描述的HTML内容的方法:https://stackoverflow.com/questions/7035150/how-to-traverse-the-dom-tree-using-jsoup-doing-some-content-filtering
答案 0 :(得分:22)
看看Boilerpipe。它旨在完全按照您的要求进行操作,删除网页主要文本内容周围多余的“混乱”(样板,模板)。
有几种方法可以将HTML提供给Boilerpipe并提取HTML。
你可以use a URL:
ArticleExtractor.INSTANCE.getText(url);
你可以use a String:
ArticleExtractor.INSTANCE.getText(myHtml);
还有use a Reader的选项,可以打开大量选项。
答案 1 :(得分:7)
您还可以使用boilerpipe 将文本分段为全文/非全文块,而不是只返回其中一个(实际上,首先是samppipe段,然后返回一个String)。
假设您可以从java.io.Reader访问HTML,只需让samppipe对HTML进行细分并为您分类:
Reader reader = ...
InputSource is = new InputSource(reader);
// parse the document into boilerpipe's internal data structure
TextDocument doc = new BoilerpipeSAXInput(is).getTextDocument();
// perform the extraction/classification process on "doc"
ArticleExtractor.INSTANCE.process(doc);
// iterate over all blocks (= segments as "ArticleExtractor" sees them)
for (TextBlock block : getTextBlocks()) {
// block.isContent() tells you if it's likely to be content or not
// block.getText() gives you the block's text
}
TextBlock
有一些更令人兴奋的方法,随意玩!
答案 2 :(得分:5)
Boilerpipe似乎可能存在问题。为什么? 好吧,它似乎适用于某些类型的网页,例如具有单一内容的网页。
因此,人们可以粗略地将网页分为三种类型的Boilerpipe:
Boilerpipe适用于案例#1。但如果一个人正在进行大量的自动文本处理,那么他们的软件如何知道"它正在处理什么样的网页?如果网页本身可以归类为这三个桶中的一个,那么Boilerpipe可以应用于案例#1。案例#2是一个问题,案例#3也是一个问题 - 它可能需要一组相关的网页来确定什么是混乱和什么不是。
答案 3 :(得分:1)
您可以使用goose之类的某些库。它最适用于文章/新闻。 您还可以使用readability bookmarklet
检查与goose进行类似提取的javascript代码答案 4 :(得分:1)
我的第一直觉是使用您使用Jsoup的初始方法。至少可以使用选择器并仅检索所需的元素(即Elements posts = doc.select("p");
,而不必担心具有随机内容的其他元素。
关于你的另一篇文章,误报的问题是你偏离Jsoup的唯一理由吗?如果是这样,你不能只调整MIN_WORDS_SEQUENCE的数量或者选择器的选择性更强(即不检索div元素)
答案 5 :(得分:1)
http://kapowsoftware.com/products/kapow-katalyst-platform/robo-server.php
专有软件,但它可以很容易地从网页中提取并与java很好地集成。
您使用提供的应用程序设计roboserver api读取的xml文件以解析网页。 xml文件是通过分析您希望在提供的应用程序中解析的页面(相当简单)并应用收集数据的规则(通常,网站遵循相同的模式)构建的。您可以使用提供的Java API设置调度,运行和数据库集成。
如果您反对使用软件并自行完成,我建议不要尝试将1规则应用于所有网站。找到一种分隔标签然后构建每个站点的方法
答案 6 :(得分:0)
答案 7 :(得分:0)
您可以过滤html垃圾,然后解析所需的详细信息或使用现有网站的api。 请参考以下链接过滤html,我希望它有所帮助。 http://thewiredguy.com/wordpress/index.php/2011/07/dont-have-an-apirip-dat-off-the-page/
答案 8 :(得分:0)
您可以使用textracto api,它会提取主要文章'文本,还有机会提取所有其他文本内容。通过减去'这些文本可以从主要文本内容中分割导航文本,预览文本等。