如何通过python从mediawiki标记的文章中解析/提取数据

时间:2009-12-28 05:44:48

标签: python api parsing mediawiki extraction

Source Mediawiki markup

现在我正在使用各种正则表达式将mediawiki标记中的数据“解析”为列表/词典,以便可以使用文章中的元素。

这不是最好的方法,因为必须进行的案件数量很大。

如何将文章的mediawiki标记解析为各种python对象,以便可以使用其中的数据?

示例:

  • 将所有标题提取到a 字典,用它来哈希 部分。
  • 抓住所有interwiki链接,并且 把它们列入清单(我知道了 这可以从API完成,但我会 而只有一个API调用 减少带宽使用)。
  • 提取所有图像名称并使用哈希表达 他们的部分

各种正则表达式可以实现上述目标,但我发现我必须做出相当大的数字。

这是mediawiki unofficial specification(我发现他们的官方specification没有用)。

4 个答案:

答案 0 :(得分:8)

mwlib - MediaWiki解析器和实用程序库

pediapress/mwlib

  

mwlib提供了一个库,用于解析MediaWiki文章并将它们转换为不同的输出格式。维基百科的“打印/导出”功能使用mwlib来生成维基百科文章中的PDF文档。

这是documentation页面。使用的旧文档页面有一个单行示例:

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

如果您想了解它的运行方式,请参阅代码附带的测试用例。 (mwlib/tests/test_parser.py from git repository):

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"]

另请参阅Markup specAlternative parsers了解详情。

答案 1 :(得分:4)

这个问题已经过时了,但对于其他人来说:有mediawiki parser written in Python on github。将文章转换为纯文本似乎很容易,如果我没记错的话,我在过去用mwlib无法解决这个问题。

答案 2 :(得分:2)

我正在搜索simillar解决方案以解析某些wiki,偶然发现了Pandoc,它采用多种输入格式并生成多个。

来自网站:

  

Pandoc - 通用文档转换器

     

如果您需要将文件从一种标记格式转换为另一种标记格式,那么pandoc就是您的瑞士军刀。 Pandoc可以将markdown,reStructuredText,textile,HTML,DocBook,LaTeX,MediaWiki标记,TWiki标记,OPML,Emacs组织模式,Txt2Tags,Microsoft Word docx,EPUB或Haddock标记中的文档转换为

HTML formats: XHTML, HTML5, and HTML slide shows using Slidy, reveal.js, Slideous, S5, or DZSlides.
Word processor formats: Microsoft Word docx, OpenOffice/LibreOffice ODT, OpenDocument XML
Ebooks: EPUB version 2 or 3, FictionBook2
Documentation formats: DocBook, GNU TexInfo, Groff man pages, Haddock markup
Page layout formats: InDesign ICML
Outline formats: OPML
TeX formats: LaTeX, ConTeXt, LaTeX Beamer slides
PDF via LaTeX
Lightweight markup formats: Markdown (including CommonMark), reStructuredText, AsciiDoc, MediaWiki markup, DokuWiki markup, Emacs Org-Mode, Textile
Custom formats: custom writers can be written in lua.

答案 3 :(得分:0)

Wiki Parser将Wikipedia转储解析为XML,保留所有内容和文章结构。使用它,然后使用python程序处理生成的XML。