【问题标题】:Difficulty in extracting main content from a news web page难以从新闻网页中提取主要内容
【发布时间】:2012-03-09 02:05:15
【问题描述】:

我需要从新闻网页中提取主要内容(不包括链接、广告等)。我已经在网上阅读过它并知道要做到这一点,我需要解析 html 页面,然后从 html 中选择内容标签。我编写了一个代码,它以一个 html 文件作为输入,并使用 java.swing.* 中提供的 Htmleditorkit 从网页中提取文本。

import java.io.IOException;
import java.io.FileReader;
import java.io.Reader;
import java.util.List;
import java.util.ArrayList;

import javax.swing.text.html.parser.ParserDelegator;
import javax.swing.text.html.HTMLEditorKit.ParserCallback;
import javax.swing.text.html.HTML.Tag;
import javax.swing.text.MutableAttributeSet;

public class HTMLUtils {
private HTMLUtils() {}

public static List<String> extractText(Reader reader) throws IOException {
final ArrayList<String> list = new ArrayList<String>();

ParserDelegator parserDelegator = new ParserDelegator();
ParserCallback parserCallback = new ParserCallback() {
        @Override
  public void handleText(final char[] data, final int pos) {
    list.add(new String(data));
  }
        @Override
  public void handleStartTag(Tag tag, MutableAttributeSet attribute, int pos) { }
        @Override
  public void handleEndTag(Tag t, final int pos) {  }
        @Override
  public void handleSimpleTag(Tag t, MutableAttributeSet a, final int pos) { }
        @Override
  public void handleComment(final char[] data, final int pos) { }
        @Override
  public void handleError(final java.lang.String errMsg, final int pos) { }
 };
 parserDelegator.parse(reader, parserCallback, true);
 return list;
}

public static void main(String[] args) throws Exception{
FileReader reader = new FileReader("C://Users//Mukul//Desktop//demo.html");
List<String> lines = HTMLUtils.extractText(reader);
for (String line : lines) {
  System.out.println(line);
}
}
}

但我的问题是我无法弄清楚如何只选择网页中的主要内容,就像新闻网页中的文章一样。

另外,我想知道我进行解析的方式很好,或者我应该使用一些开源库,如 Jsoup、Jtidy 等。同样的事情。

请帮助我并纠正我做错的地方。

【问题讨论】:

    标签: java html-parsing text-extraction web-mining


    【解决方案1】:

    你有两个问题,一个是获取页面内容(我猜是语法),为此我会使用以下成语:(并不是你发布的代码有什么严重错误,只是对我来说有点过于冗长味道)

    String text = new Scanner( new URL("C://Users//Mukul//Desktop//demo.html").openConnection().getInputStream()).useDelimiter("\\A").next();
    

    另一个是解释你刚刚读到的字符串(语义)。我认为没有一个正确的答案,但如果您每次都想解析它的一个页面,它应该有一些固定的布局。你必须找到一些模式来区分主要内容和广告、标题、链接等,然后也许你可以使用正则表达式来提取它。

    检查这个:http://code.google.com/p/boilerpipe/

    【讨论】:

      猜你喜欢
      • 2012-04-21
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      • 2016-10-10
      • 2011-02-14
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      相关资源
      最近更新 更多