2010-05-19 9 views
7

He descargado el volcado de wikipedia y ahora quiero eliminar el marcado de wikipedia en el contenido de cada página. Traté de escribir expresiones regulares, pero son demasiadas para manejar. Encontré una biblioteca de Python pero necesito una biblioteca de Java porque, quiero integrarla en mi código.Wikipedia: biblioteca de Java para eliminar la eliminación de texto de wikipedia

Gracias.

+0

Cloud ¿publica una muestra de una página que muestra las marcas que desea eliminar? – bakkal

Respuesta

9

hacerlo en dos pasos:

  1. dejar alguna herramienta existente convertir el MediaWiki margen de ganancia en HTML plano;
  2. convierte el HTML plano en texto.

La siguiente demostración:

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

produce:

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

¿Dónde se descargan los paquetes java que está importando? – jjxtra

+0

@JJC, inténtelo aquí: http://download.java.net/maven/2/net/java/textile-j/2.2/ –

+0

¡Lo intentaré, gracias! – jjxtra

1

Mylyn WikiText puede convertir varias sintaxis Wiki en HTML y otros formatos. También es compatible con la sintaxis de MediaWiki, que es lo que usa Wikipedia. Aunque Mylyn WikiText es principalmente un plugin de Eclipse, también es available as standalone library.

+0

Solo necesito una función que pueda eliminar el marcado de wiki del contenido. No estoy seguro de cómo usar mylyn para eliminar el marcado. ¿Puedes decirme cómo hacerlo? – Boolean

+0

@Algorist: Mylyn WikiText no elimina el marcado, sino que lo convierte a otros formatos. Lo siento, he leído mal tu pregunta. –

2

Si necesita texto sin formato, debe utilizar la biblioteca WikiClean https://github.com/lintool/wikiclean.

Tuve el mismo problema y parece que esta fue la única solución eficiente que funcionó para mí en Java.

Hay dos casos de uso:

1) Cuando se tiene el texto no en formato XML, entonces debería añadir etiquetas XML necesarios para realizar este procesamiento. Supongamos que está procesando un archivo XML anteriormente, y ahora tiene el contenido sin estructura XML, entonces simplemente agrega xmlStartTag y xmlEndTag como en el siguiente código, y lo procesa.

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) Cuando se está leyendo el archivo de volcado directamente Wikipedia (archivo XML), en ese caso sólo tiene que pasar a través del archivo y que pasa a través.

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

¡Bienvenido a Stack Overflow! La pregunta no está sobre el tema de Stack Overflow como se define en [ayuda]. Por favor no respondas tales preguntas; en su lugar, debe marcarlos para llamar su atención y se cerrarán o migrarán de forma adecuada. –

+3

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - [De la crítica] (/ review/low-quality-posts/18533404) – Bhuwan

+0

Gracias @Bhuwan. Actualicé mi respuesta según su sugerencia. –

Cuestiones relacionadas