Использование кипера для извлечения неанглийских статей - PullRequest
6 голосов
/ 13 февраля 2012

Я пытаюсь использовать кипятильник Java-библиотеку для извлечения новостных статей из набора веб-сайтов.Он отлично работает для текстов на английском языке, но для текста со специальными символами, например, слов с символами ударения (História), эти специальные символы не извлекаются правильно.Я думаю, что это проблема кодирования.

В faq на шаблоне написано «Если вы извлекаете текст не на английском языке, вам может потребоваться изменить некоторые параметры», а затем ссылается на бумагу .Я не нашел решения в этой статье.

Мой вопрос: есть ли какие-либо параметры при использовании патрубка, где я могу указать кодировку?Есть ли способ обойти и правильно получить текст?

Как я использую библиотеку: (первая попытка на основе URL):

URL url = new URL(link);
String article = ArticleExtractor.INSTANCE.getText(url);

(вторая на HTLMисходный код)

String article = ArticleExtractor.INSTANCE.getText(html_page_as_string);

Ответы [ 6 ]

2 голосов
/ 05 июня 2012

Вам не нужно изменять внутренние Boilerpipe классы.

Просто передайте InputSource объект методу ArticleExtractor.INSTANCE.getText() и принудительно закодируйте этот объект.Например:

URL url = new URL("http://some-page-with-utf8-encodeing.tld");

InputSource is = new InputSource();
is.setEncoding("UTF-8");
is.setByteStream(url.openStream());

String text = ArticleExtractor.INSTANCE.getText(is);

С уважением!

1 голос
/ 27 июля 2014

Java:

import java.net.URL;

import org.xml.sax.InputSource;

import de.l3s.boilerpipe.extractors.ArticleExtractor;

public class Boilerpipe {

    public static void main(String[] args) {
        try{
            URL url = new URL("http://www.azeri.ru/az/traditions/kuraj_pehlevanov/");

            InputSource is = new InputSource();
            is.setEncoding("UTF-8");
            is.setByteStream(url.openStream());

            String text = ArticleExtractor.INSTANCE.getText(is);
            System.out.println(text);
        }catch(Exception e){
            e.printStackTrace();
        }
    }

}

Затмение: Выполнить> Выполнить настройки> Общие вкладка.Установите кодировку «Другое» (UTF-8), затем нажмите «Выполнить».

enter image description here

1 голос
/ 07 февраля 2014

ArticleExtractor Boilerpipe использует некоторые алгоритмы, которые были специально адаптированы для английского языка - измерение количества слов в средних фразах и т. Д. На любом языке, который является более или менее многословным, чем английский (то есть: любой другой язык), эти алгоритмы будут менее точными.

Кроме того, библиотека использует некоторые английские фразы, чтобы попытаться найти конец статьи (комментарии, оставить комментарий, высказать свое мнение и т. Д.), Которые явно не будут работать на других языках.

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

1 голос
/ 06 марта 2012

Хорошо, есть решение. Как сказал Андрей, мне пришлось изменить класс HTMLFecther, который находится в пакете de.l3s.boilerpipe.sax Что я сделал, так это конвертировал весь полученный текст в UTF-8. В конце функции извлечения мне пришлось добавить две строки и изменить последнюю:

final byte[] data = bos.toByteArray(); //stays the same
byte[] utf8 = new String(data, cs.displayName()).getBytes("UTF-8"); //new one (convertion)
cs = Charset.forName("UTF-8"); //set the charset to UFT-8
return new HTMLDocument(utf8, cs); // edited line
1 голос
/ 13 февраля 2012

Ну, из того, что я вижу, когда вы используете его таким образом, библиотека автоматически выберет, какую кодировку использовать.Из источника HTMLFetcher:

public static HTMLDocument fetch(final URL url) throws IOException {
    final URLConnection conn = url.openConnection();
    final String ct = conn.getContentType();

    Charset cs = Charset.forName("Cp1252");
    if (ct != null) {
        Matcher m = PAT_CHARSET.matcher(ct);
        if(m.find()) {
            final String charset = m.group(1);
            try {
                cs = Charset.forName(charset);
            } catch (UnsupportedCharsetException e) {
                // keep default
            }
        }
    }

Попробуйте немного отладить их код, начиная с ArticleExtractor.getText(URL), и посмотрите, сможете ли вы переопределить кодировку

0 голосов
/ 02 июня 2013

У меня была какая-то проблема; Решение cnr прекрасно работает. Просто измените кодировку UTF-8 на ISO-8859-1. Спасибо в

URL url = new URL("http://some-page-with-utf8-encodeing.tld");
InputSource is = new InputSource();
is.setEncoding("ISO-8859-1");
is.setByteStream(url.openStream());

String text = ArticleExtractor.INSTANCE.getText(is);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...