Сложность в извлечении основного контента из новостной веб-страницы - PullRequest
1 голос
/ 17 февраля 2012

Мне нужно извлечь основное содержимое (исключая ссылки, рекламу и т. Д.) С веб-страницы новостей. Я прочитал об этом в Интернете и узнал, что для этого мне нужно проанализировать html-страницу и затем выбрать содержимое из html. теги. Я написал код, который принимает HTML-файл в качестве входных данных и извлекает текст с веб-страницы, используя Htmleditorkit, доступный в java.swing. *.

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 и т. Д. за то же самое.

Пожалуйста, помогите мне и поправьте меня, где я делаю неправильно.

1 Ответ

0 голосов
/ 17 февраля 2012

ну, у вас есть две проблемы, одна из них - получение содержимого страницы (я думаю, синтаксический), для которого я бы использовал следующую идиому: (не то, что есть что-то ужасно неправильное с кодом, который вы разместили, просто слишком многословно для моего вкус)

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

, а другой интерпретирует только что прочитанную строку (семантическую). Я не думаю, что есть единственный правильный ответ, но если его единственную страницу, которую вы хотите анализировать каждый раз, он должен иметь некоторую фиксированную разметку. вам нужно будет найти какой-то шаблон, чтобы отличить основной контент от рекламы, заголовков, ссылок и т. д., а затем, возможно, вы сможете извлечь его с помощью регулярных выражений.

Проверьте это: http://code.google.com/p/boilerpipe/

...