ウィキメディアマークアップの解析 - EBNFベースのパーサはあまり適していませんか?

StackOverflow https://stackoverflow.com/questions/1093036

質問

私は、Wikipediaで見られるようウィキメディアマークアップ(Javaで)解析しようとしています。そこ既存のパッケージの数は、このタスクのためにそこにいるが、私は特によく私のニーズに合わせていずれかを発見していません。私が働いている最高のパッケージがほとんどでまともな仕事をしていません Mathclipse Blikiパーサに、ありますページ。

このパーサはしかし、不完全であり、かつ特定のページを解析するために失敗した場合や、他人に間違って解析します。残念ながら、コードはかなり面倒であり、従って、この解析エンジンに問題を修正することは非常に時間がかかり、エラーが発生しやすくなります。

優れた構文解析エンジンを見つけようと、私は、このタスク(特にANTLR)のためのEBNFベースのパーサを使用して検討しました。いくつかの試みの後、しかし、それは、ウィキメディアマークアップが比較的緩和され、容易に構造化された文法に適合することができないとして、このアプローチは、この作業のために特に適していないようです。

ANTLRと同様のパーサとの私の経験では、しかし、非常に限られているので、それはむしろ、そのようなパーサは、このタスクのために、本質的にはあまり適さないことよりも、問題を引き起こしている私の経験不足かもしれません。これらのトピックのより多くの経験を持つ誰もがここで重量を量ることはできますか?

@Stobor:私は、私はGoogleのクエリによって返されたものを含め、様々な解析エンジン、見てきたことを述べました。私がこれまでに見つけた最高のBlikiエンジンです。問題は、彼らがスパゲッティコードで、その結果、すべての条件分岐や正規表現の本質的に長い鎖であるので、そのようなパーサの問題を修正することは、信じられないほど退屈になることです。その方法がより明確にし、より簡潔であり、したがって、理解し、進化しやすいように私は、構文解析のEBNF方法により類似の何かを探しています。私はあなたが投稿MediaWikiのリンクを見てきた、そして箱から出しEBNFは、この作業のためにあまり適していないというのが私の疑いを確認しているようです。したがって、私ははっきりと理解しやすいEBNFのような、だけでなく、wikiマークアップの厄介な構文を処理することが可能である解析エンジンを探しています。

役に立ちましたか?

解決

任意の一般的な意味での

解析のMediaWikiの内容は、mediawikiの自分自身を使用して、短いほとんど不可能です。それを解析するためには、完全にreleventコンテンツが使用されている可能性が(彼らは埋め込むことができるので)HTMLとCSSを解析し、完全なテンプレートのインスタンス化と拡大、ならびに任意のパーサの追加を扱うことができるようにする必要があります。そのテンプレートのインスタンスは、プリプロセッサに相当します。

これは、パーサを除くC ++の構文解析に似いくつかの意味であるにも不正な形式の入力およびパーサの拡張によって作られた任意の構文の追加を扱います。実際のMediaWikiの実装は、多くのPerl 5のようであるものが一緒にリンクされているが、すべてのエッジケースがちょうど落ちるので、元の実装はそんなに悪くありませんでしたが、実際には同じことを行うために、後続の実装は、特に以来、本当に複雑であるばかり行動は、多くの場合、緊急かつ文書化されていないです設計されていません。

あなたが作業するか、あなたはあなたのために働くこと、一緒に何かを考え出すことができるかもしれないすべてのコンテンツを抽出することができるように、そしてあなたがそれを行う、いくつかのパッケージがあります指摘しているとして、ページの100%を必要としない場合。私は誰もがあなたにそれを解析する方法については、実質的により良い答えを与えることができます疑うあなたの実際の正確なニーズを知る短いです。あなたはすべてをすべてのページ上で動作し、正しく解析できるようにする必要がある場合は、より良い仕事をする、かなり大規模なチームと数年を持っている、とさえ、あなたはまだ小さいエッジケースをたくさん持ってます。

要するに、無EBNF文法は、MediaWikiのマークアップを解析するには適していませんが、何も本当にありません...

だから

他のヒント

あなたはウィキメディアは、明確に定義されたグラマをEBNFに自分自身を貸すしません正しいです。

あなたはウィキを解析することができるように引き返すなツールを見てする必要があります。

バックトラックyaccのあるbtyacc。 http://www.siber.com/btyacc/する

あなたはアクセントで見ることができます。 Yaccのより良いです http://accent.compilertools.net/する

それとも、破壊を持っているとあなたが所有プロローグとロールのいくつかのフレーバーを学ぶことがあります。どのようなあなたがあなたの前に興味深い学習期間を持っています。

幸運

私はかつて Boost.Quickbookためのパーサを書き込もうとしました基本的にウィキペディアで使用ウィキテキストと同じであるに、。

これは非常に退屈なプロセスはいくつかの基本が働いてもらうことだったが、私は最終的にそれのためのEBNF文法を記述することが可能であろうと思います。あなたが興味を持っている場合は、私の部分のパーサーには、オンラインで入手可能です(文法はDOC-文字列に埋め込まれている)。

この答えが少し出ているが、どのようなテキストをレンダリングし、別のWikiコンポーネントを把握するために、HTML DOMを解析に関するます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top