12

ソースMediawikiマークアップ

現在、さまざまな正規表現を使用して、mediawikiマークアップのデータをリスト/辞書に「解析」し、記事内の要素を使用できるようにしています。

作成しなければならないケースの数が多いため、これは最善の方法とは言えません。

記事のmediawikiマークアップをさまざまなPythonオブジェクトに解析して、その中のデータを使用できるようにするにはどうすればよいでしょうか。

例:

  • すべての見出しを辞書に抽出し、そのセクションでハッシュします。
  • すべてのインターウィキリンクを取得し、それらをリストに貼り付けます(これは、APIから実行できることはわかっていますが 、帯域幅の使用を減らすため
    にAPI呼び出しを1つだけにしたいです)。
  • すべての画像名を抽出し、それらをセクションでハッシュします

さまざまな正規表現で上記を実現できますが、作成する必要のある数をかなり多くしています。

これがmediawikiの非公式仕様です(私は彼らの公式仕様が有用だとは思いません)。

4

3 に答える 3

9

mwlib-MediaWikiパーサーとユーティリティライブラリ

pediapress / mwlib

mwlibは、MediaWikiの記事を解析し、それらをさまざまな出力形式に変換するためのライブラリを提供します。mwlibは、ウィキペディアの記事からPDFドキュメントを生成するために、ウィキペディアの「印刷/エクスポート」機能によって使用されます。

これがドキュメントページです。使用されている古いドキュメントページには、ワンライナーの例があります。

from mwlib.uparser import simpleparse
simpleparse("=h1=\n*item 1\n*item2\n==h2==\nsome [[Link|caption]] there\n")

実際の動作を確認したい場合は、コードに付属のテストケースを参照してください。(gitリポジトリからのmwlib / tests / test_parser.py):

from mwlib import parser, expander, uparser
from mwlib.expander import DictDB
from mwlib.xfail import xfail
from mwlib.dummydb import DummyDB
from mwlib.refine import util, core

parse = uparser.simpleparse

def test_headings():
    r=parse(u"""
= 1 =
== 2 ==
= 3 =
""")

    sections = [x.children[0].asText().strip() for x in r.children if isinstance(x, parser.Section)]
    assert sections == [u"1", u"3"]

詳細については、マークアップ仕様代替パーサーも参照してください。

于 2009-12-28T05:47:56.910 に答える
4

この質問は古いですが、ここに来る他の人のために:githubにPythonで書かれたmediawikiパーサーがあります。記事を純粋なプレーンテキストに変換するのは非常に簡単なようです。これは、私が正しく覚えていれば、過去にmwlibでは解決できなかったことです。

于 2012-04-13T16:40:38.627 に答える
2

私は特定のウィキを解析するための同様のソリューションを探していましたが、複数の入力形式を取り、複数を生成するPandocに出くわしました。

サイトから:

Pandoc-ユニバーサルドキュメントコンバーター

ファイルをあるマークアップ形式から別の形式に変換する必要がある場合、pandocはスイスアーミーナイフです。Pandocは、マークダウン、reStructuredText、テキスタイル、HTML、DocBook、LaTeX、MediaWikiマークアップ、TWikiマークアップ、OPML、Emacs Org-Mode、Txt2Tags、Microsoft Word docx、EPUB、またはHaddockマークアップのドキュメントをHTML形式(XHTML、HTML5、およびSlidy、reveal.js、Slideous、S5、またはDZSlidesを使用したHTMLスライドショー。ワードプロセッサ形式:Microsoft Word docx、OpenOffice / LibreOffice ODT、OpenDocument XML電子ブック:EPUBバージョン2または3、FictionBook2ドキュメント形式:DocBook、GNU TexInfo、Groff manページ、Haddockマークアップページレイアウト形式:InDesign ICMLアウトライン形式:OPMLTeX形式:LaTeX、ConTeXt、LaTeX BeamerはLaTeXを介してPDFをスライドします軽量マークアップ形式:マークダウン(CommonMarkを含む)、reStructuredText、AsciiDoc、MediaWikiマークアップ、DokuWikiマークアップ、

于 2015-05-29T05:08:15.780 に答える