2009-02-14 19 views
6

¿Alguien sabe de un analizador sintáctico que puede tomar el texto con formato Wiki como entrada y producir un árbol de entidades, de la misma manera que un analizador XML produce un árbol de entidades? Para aclarar, yo estoy buscando algo que llevaría texto como:¿Qué Wiki Parser?

-Intro- 
Textual stuff in ''italics'' 
--Subhead-- 
Yet more text 

y producir un árbol con raíz en Intro con tres nodos hijos uno de los cuales (subtítulo) en sí tiene un niño. Estoy buscando algo que pueda entender el formato wiki "simple" que se describe en http://meta.wikimedia.org/wiki/Help:Wikitext.

Conozco varios lexers para texto Wiki, pero no hay analizadores de árbol. Estoy buscando algo de código abierto y escrito en C o C++.

Respuesta

2

No puede hacerlo directamente desde una página con formato wiki porque el formato wiki no tiene información completa. En cambio, el texto del formato wiki se traduce básicamente por un conjunto de reglas de expresión regular e insertadas en un marco de página predefinido en HTML o XHTML.

La manera más fácil de hacer lo que desea es encontrar un formateador apropiado para un formato de texto liviano (como textil o criollo), pasarlo para generar XHTML, y luego analizar el XHTML usando cualquier analizador normal.

2

Lo que yo haría es

  1. Escribir una sintaxis BNF para que el lenguaje wiki. Como es simple, el BNF también será simple.
  2. Use The Spirit Framework para crear un analizador para ello. Es realmente simple (por esas cosas simples), y la sintaxis de BNF se traduce a C++ de forma muy natural.
2

He escrito un programa de análisis, que internamente crea un árbol de este tipo en Java: Java Wikipedia API

Tal vez usted puede obtener algunas ideas para su aplicación C o C++?

El HTMLConverter class toma el árbol de nodos interno para convertirlo a marcado HTML.

2

Es posible que desee echar un vistazo a Mylyn WikiText, que es un analizador que utiliza el patrón de diseño del generador para convertir el marcado wiki a varios formatos XML. Se envía con constructores para HTML, Eclipse Help, DITA y DocBook. Puede usar su propio generador para personalizar la salida.

El analizador puede manejar Textile, MediaWiki, TracWiki, TWiki y el etiquetado Confluence. Es extensible para que pueda agregar nuevos idiomas si lo desea.

El libary es Java

0

Wiki Parser hace exactamente lo que necesita: que traduce la sintaxis XML medios wiki para regular. Conserva prácticamente toda la estructura de la página y maneja plantillas, galerías de imágenes, redirecciones y más.

También es mucho más rápido que otros analizadores sintéticos, tardando aproximadamente 2-3 horas en analizar los 55 GB de la Wikipedia en inglés actual.