2011-12-24 11 views
3

私は構造化された方法で特定のWikipediaのコンテンツを解析しようとしています。ここでは例のページです:PHPでWikipediaのマークアップを解析する最良の方法は何ですか?

http://en.wikipedia.org/wiki/Polar_bear

私はいくつかの成功を持っています。私はこのページが "specie"ページであることを知ることができ、Taxobox(右側)の情報を構造体に解析することもできます。ここまでは順調ですね。

しかし、私はまた、テキストの段落を解析しようとしています。これらはWiki形式またはHTML形式でAPIによって返されますが、私は現在Wiki形式で作業しています。

私はこれらの段落を読むことができますが、私は最終的に私のアプリにそれを表示する必要があり、Wikiマークアップの意味がないので、それらを特定の方法で "クリーン"したいと思います。たとえば、すべての画像を削除したいとします。これは[[Image:]]ブロックを除外することでかなり簡単です。このブロック全体は、文を破る取り外し

- | | {略称=}に680 | |キロ| 350 {変換}

:まだ私は単にような、削除することができないブロックも存在します。特別な意味を持つこのような表記法は数十種類あります。私はこのすべてを処理するために100個の正規表現を書くことを避け、これをよりスマートな方法でどのように解析できるかを見ていきたいと思います。

私のジレンマは以下の通りです:

  • 私は が不要な要素を削除する作業の多くを持っているだけでなく、やる テンプレートを「まねる」のだ半構造解析の私の現在のパスを続けることができますレンダリングする必要があります。
  • それとも、私がレンダリングされたHTML出力を開始し、それを解析し、私の心配は、それが理想的に構造化された方法で

を解析するために、同じように壊れやすく、複雑だということである可能性があり、この問題を解決するためのライブラリーもありますしかし、私はまだこの仕事までのものは見つけていません。私はDBPediaのような構造化Wikipediaデータベースも見てきましたが、それらは既に私が持っているものと同じ構造をしているだけで、Wikiテキスト自体に構造を提供していません。

+0

http://stackoverflow.com/questions/4839938/how-to-parse-wikipedia-xml-with-php – sjngm

+0

の複製である可能性があります。mediawikiパーサーの仕組みを確認してください。http:// svn.wikimedia.org/svnroot/mediawiki/trunk/phase3/includes/parser/Parser.php – Maerlyn

+0

@sjngm。重複ではありません。私はウィキペディアのページの構造化されたデータを解析する方法を知っていますが、私は構造化されていない部分について話しています。 – Ferdy

答えて

3

テンプレートが多すぎるため、すべてのテンプレートを手作業で再実装する必要があり、テンプレートは常に変更されます。したがって、すべてのテンプレートを処理できるwiki構文の実際のパーサーが必要になります。

そして、wikiのsyxtaxは非常に複雑で、たくさんの癖があり、正式な仕様はありません。これは、独自のパーサーを作成することはあまりにも多くの作業を行うことを意味します。MediaWikiでこれを使用する必要があります。

このため、私はthe MediaWiki APIで解析されたHTMLを取得するのが最善の策だと思います。

wikiマークアップから解析するほうが簡単なことの1つは、infoboxesなので、特殊なケースにする必要があります。

+0

ありがとうございました、私は今、混在したアプローチを取っています。 1)元のwiki形式を取得し、実行可能なinfoxboxを解析します。 2)action = expandtemplatesを使って残りのwikitextを変換する。3)残っているブロックを解析して変換する。今のところかなりうまくいきます。 – Ferdy

+0

MediaWiki APIは、すべてのメタリンクなどを追加します。非常に面倒です。あるいは、間違った関数を使っているかもしれません:http://dont-starve-game.wikia.com/api.php?action=query&titles=Monster%20Meat&prop=revisions&rvprop=content&rvparse=1&format=txt – Rudie

関連する問題