12

来源 Mediawiki 标记

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

这几乎不是最好的方法,因为必须制作的案例数量很大。

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

示例是:

  • 将所有标题提取到字典中,并与其部分进行散列。
  • 获取所有跨维基链接,并将它们粘贴到一个列表中(我知道
    这可以通过 API 完成,但我宁愿只调用一个 API 来
    减少带宽使用)。
  • 提取所有图像名称并将它们与它们的部分一起散列

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

这是mediawiki 非官方规范(我不认为他们的官方规范有用)。

4

3 回答 3

9

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

pediapress/mw​​lib

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

我正在寻找类似的解决方案来解析某些 wiki,并偶然发现了Pandoc,它采用多种输入格式并生成多种格式。

从网站:

Pandoc - 通用文档转换器

如果您需要将文件从一种标记格式转换为另一种标记格式,pandoc 就是您的瑞士军刀。Pandoc 可以将 markdown、reStructuredText、textile、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 手册页、Haddock 标记页面布局格式:InDesign ICML 大纲格式:OPML TeX 格式:LaTeX、ConTeXt、LaTeX Beamer 通过 LaTeX 幻灯片 PDF 轻量级标记格式:Markdown(包括 CommonMark)、reStructuredText、AsciiDoc、MediaWiki 标记、DokuWiki 标记、

于 2015-05-29T05:08:15.780 回答