【问题标题】:Extract text from MediaWiki XML dump without installation/API无需安装/API 从 MediaWiki XML 转储中提取文本
【发布时间】:2014-07-14 08:43:57
【问题描述】:

背景

假设我想从 MediaWiki 中提取所有页面/修订的已解析内容文本。让我们考虑一下庞大的英文维基百科。

我可以通过下载所需的数据、设置我自己的 MediaWiki 安装并运行一个循环来调用类似的东西来做到这一点:

http://localhost/mediawiki/api.php?uselang=en&format=xml&action=query&prop=extracts&exintro=&explaintext=&titles=

这使用了 TextExtracts (https://github.com/wikimedia/mediawiki-extensions-TextExtracts) 扩展,它在内部实际上做了类似的事情:

http://localhost/mediawiki/api.php?uselang=en&format=xml&action=parse&prop=text&title=

问题

现在,我确实想使用带有 MySQL 数据库的 MediaWiki 安装和所有这些。但我想使用 MediaWiki XML 数据转储(巨大的英语维基百科 XML 转储 - enwiki-latest-pages-articles.xml.bz2)来完成我所描述的操作。关于如何解决这个问题的任何想法?

看起来所有调用 WikiPage->getContent 的解析逻辑都在 MediaWiki PHP 类中 - 它们耦合太紧密,我无法将它们取出(除非我想花几周时间)并自己编写处理转储的脚本。是否有任何脚本可以让我这样做?我的首选语言是 Java,但我愿意选择。

【问题讨论】:

  • 我认为由于模板问题,这样的事情可能永远不可能发生。 ://
  • 你是对的,你可能需要 MediaWiki,或者至少一个alternative parser,来处理 wikitext -> HTML 转换和模板。如果您不喜欢 MySQL 依赖项,请注意 MediaWiki 还支持 SQLite,它不需要像 MySQL 那样单独的数据库服务器进程。
  • 这与数据库无关。我没有完全解释我的整个用例。如果我想使用 Hadoop 或其他东西对整个转储进行分布式处理,那么在集群上的每台机器上运行一个 DB 服务器 + MediaWiki 实例是一件麻烦事。并且只在一台机器上使用它们会严重影响 I/O,并且与解决我的问题相反。
  • 您确定不能对原始维基文本进行处理吗?这会容易得多,因为您可以直接从垃圾场运行它。或者,您可以在单台机器(或几台机器,如果转换速度有问题)上运行一次 wikitext -> HTML 转换,构建您自己的 HTML-in-XML 转储,并将其保存以供以后处理。跨度>
  • @IlmariKaronen 是的,我实际上需要在完整的模板扩展 HTML 版本上运行我的操作,就像您在正在运行的实例上看到的一样。但是,嘿,我可以尝试一下——在单台机器上运行 wikitext->HTML 转换(我想避免在多台机器上安装 MW 和 DB 的麻烦),保存转储以进行并行处理。不确定性能平衡是否会向我的优势倾斜,当我尝试时会知道。谢谢!

标签: php xml mediawiki mediawiki-api mediawiki-extensions


【解决方案1】:

2005 年左右,我编写了一些 Python 代码将 MW XML 转换为 Dict,不确定它是否仍然有效,但可以用来检查您是否喜欢 Python:wik2dict

去年,我编写了一些 CoffeeScript 代码来将 XML 转储转换为 Meteor 应用程序(最后是 Phonegap 应用程序)。 mediawikixml2meteor2phonegap。这个在英文维基百科上失败了,因为它的大小,但它在较小的维基上运行正常,比如Hitchwiki

这两个项目都远非完美,但它们能够处理大多数情况。

【讨论】:

    猜你喜欢
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多