2010-05-19 12 views
7

Ich heruntergeladen Wikipedia-Dump und möchte nun die Wikipedia-Markup in den Inhalt jeder Seite entfernen. Ich habe versucht, reguläre Ausdrücke zu schreiben, aber sie sind zu viele, um damit umzugehen. Ich habe eine Python-Bibliothek gefunden, aber ich brauche eine Java-Bibliothek, weil ich sie in meinen Code integrieren möchte.Wikipedia: Java-Bibliothek zum Entfernen von Wikipedia-Text Markup-Entfernung

Vielen Dank.

+0

Cloud Sie ein Beispiel für eine Seite mit den Markups, die Sie entfernen möchten? – bakkal

Antwort

9

Tun Sie es in zwei Schritten:

  1. lassen einige bestehende Tool konvertiert die MediaWiki Aufschlags in einfachem HTML;
  2. konvertieren Sie das einfache HTML in Text.

Die folgende Demo:

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); 
    } 
} 

produziert:

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 
+0

Wohin laden Sie die Java-Pakete, die Sie importieren? – jjxtra

+0

@JJC, versuchen Sie es hier: http://download.java.net/maven/2/net/java/textile-j/2.2/ –

+0

Ich werde das versuchen, danke! – jjxtra

1

Mylyn WikiText kann verschiedene Wiki-Syntax in HTML und andere Formate konvertieren. Es unterstützt auch die MediaWiki-Syntax, die von Wikipedia verwendet wird. Obwohl Mylyn WikiText in erster Linie ein Eclipse-Plugin ist, ist es auch available as standalone library.

+0

Ich brauche nur eine Funktion, die das Wiki-Markup aus dem Inhalt entfernen kann. Ich bin mir nicht sicher, wie man mylyn benutzt, um das Markup zu entfernen. Kannst du mir sagen, wie es geht? – Boolean

+0

@Algorist: Mylyn WikiText entfernt Markup nicht, es konvertiert in andere Formate. Es tut mir leid, ich habe deine Frage falsch gelesen. –

2

Wenn Sie einfachen Text benötigen, sollten Sie die WikiClean-Bibliothek https://github.com/lintool/wikiclean verwenden.

Ich hatte das gleiche Problem und es sieht so aus, als wäre dies die einzige effiziente Lösung, die für mich in Java funktioniert hat.

Es gibt zwei usecases:

1) Wenn Sie den Text nicht im XML-Format haben, dann sollten Sie XML-Tags hinzufügen nötig, um diese Verarbeitung zu tun. Angenommen, Sie verarbeiten die XML-Datei früher und haben nun den Inhalt ohne XML-Struktur, dann fügen Sie einfach xmlStartTag und xmlEndTag wie im folgenden Code hinzu und verarbeiten sie.

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) Wenn Sie die Wikipedia lesen Datei Dump direkt (xml-Datei), in diesem Fall, dass Sie es durch die Datei nur passieren und es geht.

WikiClean cleaner = new WikiClean.Builder().build(); 
String plainWikiText = cleaner.clean(XMLFileContents); 
+0

Willkommen bei Stack Overflow! Die Frage ist nicht Thema für Stack Overflow, wie in [Hilfe] definiert. Bitte beantworte solche Fragen nicht. Stattdessen sollten Sie sie aufmerksam machen und sie werden entsprechend geschlossen oder migriert. –

+3

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/18533404) – Bhuwan

+0

Danke @Bhuwan. Ich habe meine Antwort basierend auf Ihrem Vorschlag aktualisiert. –