【发布时间】: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