现在我正在使用各种正则表达式将mediawiki标记中的数据“解析”为列表/词典,以便可以使用文章中的元素。
这不是最好的方法,因为必须进行的案件数量很大。
如何将文章的mediawiki标记解析为各种python对象,以便可以使用其中的数据?
示例:
各种正则表达式可以实现上述目标,但我发现我必须做出相当大的数字。
这是mediawiki unofficial specification(我发现他们的官方specification没有用)。
答案 0 :(得分:8)
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 spec和Alternative 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。