Ren*_*ani 19 html java information-retrieval jsoup
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
Kur*_*lor 22
看看Boilerpipe.它旨在完全按照您的要求进行操作,删除网页主要文本内容周围的多余"杂乱"(样板,模板).
有几种方法可以将HTML提供给Boilerpipe并提取HTML.
您可以使用以下网址:
ArticleExtractor.INSTANCE.getText(url);
Run Code Online (Sandbox Code Playgroud)
你可以使用一个字符串:
ArticleExtractor.INSTANCE.getText(myHtml);
Run Code Online (Sandbox Code Playgroud)
还有使用Reader的选项,这会打开大量选项.
您还可以使用boilerpipe到段文成全文/非全文本块,而不是只返回他们中的一个(基本上,boilerpipe段第一,然后返回一个字符串).
假设您可以从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
}
Run Code Online (Sandbox Code Playgroud)
TextBlock
有一些更令人兴奋的方法,随意玩!
小智 5
Boilerpipe似乎存在问题.为什么?好吧,它似乎适用于某些类型的网页,例如具有单一内容的网页.
因此,人们可以粗略地将网页分类为Boilerpipe三种:
Boilerpipe适用于案例#1.但是,如果一个人正在进行大量的自动文本处理,那么一个人的软件如何"知道"它正在处理什么样的网页?如果网页本身可以归类为这三个桶中的一个,那么Boilerpipe可以应用于案例#1.案例#2是一个问题,案例#3也是一个问题 - 它可能需要一组相关的网页来确定什么是混乱和什么不是.
归档时间: |
|
查看次数: |
17605 次 |
最近记录: |