代码之家  ›  专栏  ›  技术社区  ›  torger

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

  •  10
  • torger  · 技术社区  · 16 年前

    Source Mediawiki markup

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

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

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

    例如:

    • 将所有标题提取到 字典,用它来散列 部分。
    • 获取所有Interwiki链接,以及 把它们列在清单上(我知道
      这可以通过API完成,但我会 而是只有一个API调用
      减少带宽使用)。
    • 提取所有图像名称并使用哈希 其截面

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

    这里是 mediawiki unofficial specification (我找不到他们的官员 specification 非常有用。

    4 回复  |  直到 11 年前
        1
  •  8
  •   Eugene Yokota    11 年前

    mwlib-Mediawiki分析程序和实用程序库

    pediapress/mwlib :

    mwlib提供了一个库,用于分析Mediawiki文章并将其转换为不同的输出格式。wikipedia的“打印/导出”功能使用mwlib从wikipedia文章生成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 更多信息。

        2
  •  4
  •   cburgmer    14 年前

    这个问题很古老,但对于其他来这里的人来说:有一个 mediawiki parser written in Python on github . 把文章转换成纯纯文本似乎很容易,如果我记得正确的话,以前用mwlib无法解决这个问题。

        3
  •  2
  •   Abhinav Gauniyal DarzVader    11 年前

    我在寻找类似的解决方案来解析某些wiki,偶然发现 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.
    
        4
  •  0
  •   PlinyTheElder    11 年前

    Wiki Parser 解析维基百科转储到保存所有内容和文章结构的XML中。使用它,然后用Python程序处理结果XML。

    推荐文章