Википедия: библиотека Java для удаления разметки текста в Википедии - PullRequest
8 голосов
/ 19 мая 2010

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

Спасибо.

Ответы [ 4 ]

10 голосов
/ 19 мая 2010

Сделайте это в два этапа:

  1. позволяет существующему инструменту конвертировать разметку MediaWiki в обычный HTML;
  2. преобразовать обычный HTML в текст.

Следующая демка:

import net.java.textilej.parser.MarkupParser;
import net.java.textilej.parser.builder.HtmlDocumentBuilder;
import net.java.textilej.parser.markup.mediawiki.MediaWikiDialect;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.parser.ParserDelegator;
import java.io.StringReader;
import java.io.StringWriter;

public class Test {

    public static void main(String[] args) throws Exception {

        String markup = "This is ''italic'' and '''that''' is bold. \n"+
                "=Header 1=\n"+
                "a list: \n* item A \n* item B \n* item C";

        StringWriter writer = new StringWriter();

        HtmlDocumentBuilder builder = new HtmlDocumentBuilder(writer);
        builder.setEmitAsDocument(false);

        MarkupParser parser = new MarkupParser(new MediaWikiDialect());
        parser.setBuilder(builder);
        parser.parse(markup);

        final String html = writer.toString();
        final StringBuilder cleaned = new StringBuilder();

        HTMLEditorKit.ParserCallback callback = new HTMLEditorKit.ParserCallback() {
                public void handleText(char[] data, int pos) {
                    cleaned.append(new String(data)).append(' ');
                }
        };
        new ParserDelegator().parse(new StringReader(html), callback, false);

        System.out.println(markup);
        System.out.println("---------------------------");
        System.out.println(html);
        System.out.println("---------------------------");
        System.out.println(cleaned);
    }
}

производит:

This is ''italic'' and '''that''' is bold. 
=Header 1=
a list: 
* item A 
* item B 
* item C
---------------------------
<p>This is <i>italic</i> and <b>that</b> is bold. </p><h1 id="Header1">Header 1</h1><p>a list: </p><ul><li>item A </li><li>item B </li><li>item C</li></ul>
---------------------------
This is  italic  and  that  is bold. Header 1 a list: item A item B item C 

Где вы загружаете импортируемые вами java-пакеты?

Здесь: Ссылка на веб-архив download.java.net/maven/2/net/java/textile-j/2.2

2 голосов
/ 16 января 2018

Если вам нужен простой текст, используйте библиотеку WikiClean https://github.com/lintool/wikiclean.

У меня была такая же проблема, и похоже, что это было единственное эффективное решение, которое работало для меня в Java.

Существует два варианта использования:

1) Если у вас есть текст не в формате XML, вы должны добавить теги xml, необходимые для этой обработки. Предположим, что вы обрабатываете файл XML ранее, и теперь у вас есть содержимое без структуры XML, затем вы просто добавляете xmlStartTag и xmlEndTag, как показано в коде ниже, и он обрабатывает его.

String xmlStartTag = "<text xml:space=\"preserve\">";
String xmlEndTag = "</text>";
String articleWithXml = xmlStartTag + article.getText() + xmlEndTag;
WikiClean cleaner = new WikiClean.Builder().build();
String plainWikiText = cleaner.clean(articleWithXml);

2) Когда вы читаете файл дампа Википедии напрямую (файл xml), в этом случае вы просто пропускаете его через файл, и он проходит.

WikiClean cleaner = new WikiClean.Builder().build();
String plainWikiText = cleaner.clean(XMLFileContents);
1 голос
/ 19 мая 2010

Попробуйте подход Mediawiki к обычному тексту . Возможно, вам придется улучшить класс PlainTextConverter для ваших нужд. В сочетании с примером для преобразования текстов Википедии в HTML вы можете включать содержимое шаблона.

1 голос
/ 19 мая 2010

Mylyn WikiText может конвертировать различные синтаксисы вики в HTML и другие форматы. Он также поддерживает синтаксис MediaWiki, который используется в Википедии. Хотя Mylyn WikiText в первую очередь является плагином Eclipse, он также доступен в виде отдельной библиотеки .

...