更新
Boilerpipe似乎工作得很好,但我意识到我不需要只需要主要内容,因为许多页面没有文章,而是只需要一些简短描述整个文本的链接(这在新闻门户网站中很常见),我不想丢弃这些简短文本。
因此,如果API做到了这一点,获取不同的文本部分/以某种不同于单个文本的方式拆分每个部分的块(只在一个文本中都没有用),请报告。
问题是
我从随机站点下载了一些页面,现在我想分析页面的文本内容。
问题是,一个网页有很多内容,比如菜单、宣传、横幅等。
我想尝试排除所有与页面内容无关的内容。
以这个页面为例,我既不想要上面的菜单,也不想要页脚中的链接。
要点:所有的页面都是超文本标记语言,并且是来自不同站点的页面。我需要如何排除这些内容的建议。
目前,我认为应该从HTML中排除"menu“和"banner”类中的内容,以及看起来像专有名称的连续单词(第一个大写字母)。
解决方案可以基于文本内容(没有HTML标记)或HTML内容(具有HTML标记)
我想在我的代码中做这件事,而不是在外部应用程序中(如果这是可能的话)。
我尝试了一种解析这个问题中描述的超文本标记语言内容的方法:https://stackoverflow.com/questions/7035150/how-to-traverse-the-dom-tree-using-jsoup-doing-some-content-filtering
发布于 2011-08-13 23:52:46
看看Boilerpipe吧。它的设计就是为了做你想做的事情,去除网页主要文本内容周围多余的“杂物”(样板,模板)。
有几种方法可以将HTML输入到BoilerPipe中并提取HTML。
你可以使用use a URL
ArticleExtractor.INSTANCE.getText(url);
你可以使用use a String
ArticleExtractor.INSTANCE.getText(myHtml);
也有use a Reader的选项,这打开了大量的选项。
发布于 2011-11-03 08:10:17
您还可以使用boilerpipe将文本分段()为全文/非全文块,而不是仅仅返回其中的一个(本质上,首先是boilerpipe段,然后返回一个字符串)。
假设你可以从java.io.Reader访问你的超文本标记语言,只需要让boilerpipe对超文本标记语言进行分段并为你分类:
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
有一些更令人兴奋的方法,请随意尝试!
发布于 2014-06-07 07:00:42
Boilerpipe可能存在问题。为什么?嗯,它似乎适用于某些类型的网页,比如只有一个正文内容的网页。
因此,我们可以粗略地将web页面分为三类:
Boilerpipe适用于第一种情况。但是,如果一个人正在做大量的自动化文本处理,那么一个人的软件如何“知道”它正在处理的是哪种类型的网页?如果网页本身可以归入这三个桶中的一个,那么Boilerpipe可以应用于情况#1。情况#2是一个问题,case#3也是一个问题-它可能需要相关网页的聚合来确定哪些是杂乱的,哪些不是。
https://stackoverflow.com/questions/7021260
复制相似问题