Frage

Ich versuche, (in Java) Wikimedia Markup zu analysieren, wie auf Wikipedia gefunden. Es gibt eine Reihe von bestehenden Paketen gibt für diese Aufgabe, aber ich habe jedes meine Bedürfnisse nicht gefunden besonders gut passen. Das beste Paket, das ich gearbeitet habe ist der Mathclipse Bliki Parser , das macht einen guten Job bei den meisten Seiten.

Dieser Parser ist jedoch unvollständig und nicht bestimmte Seiten zu analysieren oder falsch analysiert auf anderen. Leider ist der Code eher chaotisch und damit die Probleme in dieser Parsing-Engine Fixierung ist sehr zeitaufwendig und fehleranfällig.

Bei dem Versuch, eine bessere Parsing-Engine finden ich untersucht habe einen EBNF-basierten Parser für diese Aufgabe mit (speziell ANTLR). aber nach einigen Versuchen scheint es, dass dieser Ansatz für diese Aufgabe nicht besonders gut geeignet ist, da die Wikimedia-Markup relativ entspannt ist und somit nicht so leicht in eine strukturierte Grammatik fit sein kann.

Meine Erfahrung mit ANTLR und ähnlichen Parsern ist jedoch sehr begrenzt, so kann es meine Unerfahrenheit sein, die Probleme eher als solche Parser sind von Natur aus schlecht geeignet für diese Aufgabe verursacht. Kann jemand mit mehr Erfahrung zu diesen Themen wiegt hier?

@Stobor: Ich habe erwähnt, dass ich bei verschiedenen Parsing-Motoren haben gesucht, einschließlich der von der Google-Abfrage zurückgegeben diejenigen. Das Beste, was ich bisher gefunden habe ist der Bliki Motor. Das Problem ist, dass Probleme mit solchen Parser wird unglaublich langweilig Fixierung, weil sie alle wesentlichen langen Ketten von conditionals und reguläre Ausdrücke sind, was zu einem Spaghetti-Code. Ich bin auf der Suche nach etwas mehr verwandt mit der EBNF Methode der Analyse, wie das Verfahren viel klarer und prägnanter ist, und somit leichter zu verstehen und zu entwickeln. Ich habe die Mediawiki gesehen verlinken Sie auf dem Laufenden, und es scheint, meinen Verdacht zu bestätigen, die aus dem Kasten EBNF schlecht für diese Aufgabe geeignet ist. So bin ich für einen Parsing-Engine suchen, klar und verständlich wie EBNF ist, sondern auch in der Lage die chaotische Syntax von Wiki-Markup Handhabung.

War es hilfreich?

Lösung

mediawiki Inhalt in jedem allgemeinen Sinne Parsing ist ziemlich unmöglich kurze mediawiki selbst verwenden. Um es zu analysieren, müssen Sie in der Lage sein, vollständig HTML und CSS analysieren (da sie eingebettet werden können), und handhaben vollständige Vorlage Instanziierung und Expansion, sowie jeden Parser zusätzlich die relevanten Inhalte wurden verwendet, können. Die Template-Instantiierung entspricht einen Prä-Prozessor.

Es ist in gewissem Sinne ähnlich C ++ mit Ausnahme der Parser auch behandeln fehlerhafte Eingabe und beliebige Syntax Ergänzungen durch Parser Erweiterungen Parsen. Die tatsächliche mediawiki Implementierung ist ein viel wie Perl 5, die ursprüngliche Implementierung nicht so schlimm war, weil alle Grenzfälle fallen aus nur jedoch Dinge miteinander verbunden sind, sondern tatsächlich eine nachträgliche Implementierung immer die gleiche Sache zu tun wirklich kompliziert ist, zumal die Verhaltensweisen sind oft auftauchende und ohne Papiere, nicht ausgelegt ist.

Wenn Sie nicht 100% der Seiten arbeiten müssen oder in der Lage sein, alle Inhalte zu extrahieren Sie etwas schustern vielleicht in der Lage zusammen, die für Sie arbeitet, und wie Sie haben festgestellt, gibt es einige Pakete sind, die das tun. Kurze Ihrer tatsächlichen genauen Bedürfnisse zu wissen, bezweifle ich, jemand, den Sie eine wesentlich bessere Antwort auf, wie es zu analysieren, geben kann. Wenn Sie in der Lage sein müssen, auf jeder Seite zu arbeiten und alles richtig analysieren Sie besser ein ziemlich großes Team haben und mehrere Jahre zu arbeiten, und selbst dann noch Sie viele kleine Grenzfälle haben.

kurzum also nicht eine EBNF grammer zum Parsen von Mediawiki-Markup nicht gut geeignet ist, aber nichts wirklich ist ...

Andere Tipps

Sie sind richtig Wikimedia eignet sich nicht gut definiert Programmierer EBNF.

Du musst bei Tool suchen, die Wiki wird Rückzieher in der Lage sein zu analysieren

btyacc, die ein Rückzieher yacc ist. http://www.siber.com/btyacc/

Sie könnten bei Accent aussehen. Besser als Yacc http://accent.compilertools.net/

Oder Sie können zum Zusammenbruch haben und einige Geschmack von prolog lernen und rollen Sie besitzen. Was auch immer Sie tun, Sie haben eine interessante Lernphase vor Ihnen.

Viel Glück

Ich habe einmal versucht, einen Parser für Boost.Quickbook zu schreiben , die im wesentlichen die gleiche wie die Wiki-Text von Wikipedia verwendet wird.

Es war ein sehr langwieriger Prozess nur einige Grundlagen zum Laufen zu bringen, aber ich denke, es ist schließlich möglich wäre EBNF Grammatik für sie zu schreiben. Wenn Sie interessiert sind, mein Teil-Parser ist online verfügbar (die Grammatik wird in doc-Strings eingebettet).

Diese Antwort ist ein wenig gibt, aber was ist mit dem Text-Rendering und dann, um den HTML-Dom Parsen verschiedene Wiki-Komponenten zu verstehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top