Pregunta

Estoy tratando de analizar (en Java) Wikimedia marcado como se encuentra en la Wikipedia. Hay una serie de paquetes existentes que hay para esta tarea, pero no he encontrado ninguna para adaptarse a mis necesidades muy bien. El mejor paquete que he trabajado es el Mathclipse Bliki analizador , que hace un trabajo decente en la mayoría páginas.

Este analizador es incompleta, sin embargo, y no puede analizar ciertas páginas o analiza incorrectamente a los demás. Por desgracia, el código es más bien complicado y fijando así los problemas en este motor de análisis está consumiendo mucho tiempo y propenso a errores.

En el intento de encontrar un mejor motor de análisis que he investigado utilizando un analizador basado en EBNF para esta tarea (en concreto antlr). Después de algunos intentos sin embargo, parece que este enfoque no es especialmente adecuado para esta tarea, como el marcado Wikimedia es relativamente relajado y por lo tanto no puede ser fácilmente encajar en una gramática estructurada.

Mi experiencia con antlr y analizadores similares es muy limitado, sin embargo, lo que puede ser mi inexperiencia que está causando problemas en lugar de tales analizadores son inherentemente poco adecuados para esta tarea. ¿Puede alguien con más experiencia en estos temas pesan aquí?

@Stobor: He mencionado que yo he mirado en varios motores de análisis, incluyendo los devueltos por la consulta Google. El mejor que he encontrado hasta ahora es el motor Bliki. El problema es que la fijación de los problemas con este tipo de programas de análisis se vuelve increíblemente tedioso, ya que son todos esencialmente largas cadenas de condicionales y expresiones regulares, lo que resulta en código espagueti. Busco algo más parecido al método EBNF del análisis sintáctico, como el método es mucho más claro y conciso, y por lo tanto más fácil de entender y evolucionar. He visto los MediaWiki enlazan informados, y parece confirmar mis sospechas de que EBNF fuera de la caja es poco adecuado para esta tarea. Por lo tanto estoy en busca de un motor de análisis que es clara y comprensible como EBNF, sino también capaz de manejar la sintaxis desordenada de código wiki.

¿Fue útil?

Solución

Analizar contenido de MediaWiki en un sentido genérico es prácticamente imposible con MediaWiki corta en sí. Con el fin de analizar lo que necesita para poder totalmente analizar HTML y CSS (ya que pueden ser incrustados), y tratan la ejecución completa de la plantilla y de expansión, así como cualquier analizador Además el contenido relevante puede haber estado usando. Instancias de plantilla que es equivalente a un preprocesador.

Es en algunos sentidos similar a analizar C ++ excepto el analizador también manejar la entrada con formato incorrecto y adiciones de sintaxis arbitrarias hechas por extensiones del analizador. La implementación real MediaWiki es muy similar a Perl 5, la aplicación original no era tan malo porque todos los casos extremos simplemente se caen sin embargo las cosas están unidas entre sí, pero en realidad conseguir el curso dado a hacer la misma cosa es realmente complicado, sobre todo porque el comportamientos son a menudo emergente y no documentada, que no está diseñado.

Si usted no necesita el 100% de las páginas para trabajar o para ser capaz de extraer todo el contenido que podría ser capaz de improvisar algo juntos que funcione para usted, y como se ha observado que hay algunos paquetes que hacen eso. A falta de conocer sus necesidades reales precisas dudo que alguien le puede dar una respuesta sustancialmente mejor sobre cómo analizarlo. Si tiene que ser capaz de trabajar en todas las páginas y analizar correctamente todo lo que tenga mejor un equipo bastante grande y varios años de trabajar, e incluso entonces usted todavía tiene un montón de casos extremos pequeños.

Así que en resumen, hay una gramática EBNF no es muy adecuado para el análisis de marcado MediaWiki, pero nada realmente es ...

Otros consejos

Tiene razón Wikimedia no se presta a EBNF programadores bien definidos.

Usted tendrá que mirar a herramientas que dar marcha atrás para poder analizar Wiki

btyacc que es un yacc backtracking. http://www.siber.com/btyacc/

Usted podría mirar acento. Mejor que Yacc http://accent.compilertools.net/

O usted puede tener a la ruptura y aprender un poco de sabor de prólogo y rollo es el propietario. Cualquier cosa que usted tiene un período de aprendizaje interesante por delante de usted.

Buena suerte

Una vez intenté escribir un parser para Boost.Quickbook , que es esencialmente el mismo que el wiki de texto utilizado por Wikipedia.

Fue un proceso muy tedioso sólo para obtener algunos conceptos básicos de trabajo, pero creo que con el tiempo sería posible escribir la gramática EBNF para ello. Si está interesado, mi analizador parcial está disponible en línea (la gramática está incrustado en el doc-strings).

Esta respuesta es un poco por ahí, pero ¿qué pasa con la representación del texto y luego analizar el DOM HTML con el fin de averiguar diferentes componentes wiki.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top