1

ここにある joksnet のプログラムの助けを借りて、探している平文のウィキペディアの記事を取得することができました。

返されるテキストには見出しの Wiki マークアップが含まれているため、たとえば、Albert Einstein の記事のセクションは次のように返されます。

==Biography==

===Early life and education===
blah blah blah

私が本当にやりたいことは、取得したテキストを関数にフィードし、次のようにすべての最上位セクションを太字の html タグでラップし、第 2 レベルのセクションをイタリック体でラップすることです。

<b>Biography</b>

<i>Early life and education</i>
blah blah blah

しかし、少なくとも関数を危険なほど素朴にしない限り、どうやって始めればいいのかわからないのではないかと心配しています。正規表現を使用する必要がありますか? どんな提案でも大歓迎です。

PS「解析」が私がここでやろうとしていることに対して強すぎる言葉である場合は申し訳ありません。

4

3 に答える 3

2

ここでの最善の方法は、MediaWiki に解析を任せることだと思います。私はあなたが使用しているライブラリを知りませんが、基本的にこれは

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=Albert%20Einstein&rvprop=content

生のウィキテキストを返し、

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=Albert%20Einstein&rvprop=content&rvparse

解析された HTML を返します。

于 2013-05-28T13:07:56.930 に答える
1

私はこれをやってしまった:

def parseWikiTitles(x):
    counter = 1

    while '===' in x:
        if counter == 1:
            x = x.replace('===','<i>',1)
            counter = 2

        else:
            x = x.replace('===',r'</i>',1)
            counter = 1

    counter = 1

    while '==' in x:
        if counter == 1:
            x = x.replace('==','<b>',1)
            counter = 2

        else:
            x = x.replace('==',r'</b>',1)
            counter = 1


    x = x.replace('<b> ', '<b>', 50)
    x = x.replace(r' </b>', r'</b>', 50)
    x = x.replace('<i> ', '<i>', 50)
    x = x.replace(r' </i>', r'<i>', 50)

    return x

wiki のタイトルを含むテキストの文字列をその関数に渡すと、同じテキストが返され、== と === が太字と斜体の HTML タグに置き換えられます。最後に、タイトルの前後のスペースを削除します。たとえば、の代わりに== title ==変換されます<b>title</b><b> title </b>

これまでのところ問題なく動作しています。

助けてくれてありがとう、アレックス

于 2013-05-28T21:14:53.800 に答える