Ich versuche, (in Java) Wikimedia Markup wie auf Wikipedia zu analysieren. Es gibt eine Reihe existierender Pakete für diese Aufgabe, aber ich habe keine gefunden, die meinen Anforderungen besonders gut entsprechen. Das beste Paket, mit dem ich gearbeitet habe, ist das Mathclipse Bliki parser, das auf den meisten Seiten einen ordentlichen Job macht.Parsing von Wikimedia Markup - sind EBNF-basierte Parser schlecht geeignet?
Dieser Parser ist jedoch unvollständig und kann bestimmte Seiten oder Parsing für andere nicht korrekt analysieren. Leider ist der Code ziemlich chaotisch und das Reparieren der Probleme in dieser Parsing-Engine ist sehr zeitaufwendig und fehleranfällig.
Beim Versuch, eine bessere Parsing-Engine zu finden, habe ich untersucht, einen EBNF-basierten Parser für diese Aufgabe (speziell ANTLR). Nach einigen Versuchen scheint dieser Ansatz für diese Aufgabe jedoch nicht besonders geeignet zu sein, da das Wikimedia-Markup relativ entspannt ist und daher nicht einfach in eine strukturierte Grammatik eingepasst werden kann.
Meine Erfahrung mit ANTLR und ähnlichen Parsern ist jedoch sehr begrenzt, so dass es eher meine Unerfahrenheit sein kann, die Probleme verursacht, als solche Parser, die von Natur aus schlecht für diese Aufgabe geeignet sind. Kann hier jemand mit mehr Erfahrung zu diesen Themen einsteigen?
@Stobor: Ich habe erwähnt, dass ich verschiedene Analyse-Engines untersucht habe, einschließlich der von der Google-Abfrage zurückgegebenen. Das Beste, was ich bis jetzt gefunden habe, ist die Bliki-Engine. Das Problem ist, dass die Behebung von Problemen mit solchen Parsern unglaublich mühsam wird, da es sich bei ihnen im Wesentlichen um lange Ketten von Bedingungen und regulären Ausdrücken handelt, was zu Spaghetti-Code führt. Ich suche nach etwas, das der EBNF-Methode des Parsens ähnlicher ist, da diese Methode viel klarer und prägnanter ist und somit leichter zu verstehen und zu entwickeln ist. Ich habe den von dir geposteten Link zu einem MediaWiki gesehen und es scheint meinen Verdacht zu bestätigen, dass EBNF out of the box für diese Aufgabe schlecht geeignet ist. Daher suche ich nach einer Parsing-Engine, die klar und verständlich ist wie EBNF, aber auch in der Lage ist, die unordentliche Syntax von Wiki-Markup zu verarbeiten.
Es wäre schön, wenn Sie ein paar Bedürfnisse hinweisen könnten, die nicht erfüllt werden die Top-Hits auf http://google.com/search?q=wikipedia+java+parser, damit wir bessere Antworten anbieten konnten ... – Stobor
auch: http://www.mediawiki.org/wiki/Markup_spec/BNF – Stobor