4

我正在尝试使用“Parse-MediaWikiDump-1.0.4”和“Wikiprep.pl”脚本来解析 Wikipedia XML Dump。我猜这个脚本适用于ver0.3 Wiki XML Dumps,但不适用于最新的ver0.4 Dumps。我收到以下错误。

无法通过 wikiprep.pl 第 390 行的包“Parse::MediaWikiDump::Pages”定位对象方法“page”。

此外,在“Parse-MediaWikiDump-1.0.4”文档@ http://search.cpan.org/~triddle/Parse-MediaWikiDump-1.0.4/lib/Parse/MediaWikiDump/Pages.pm下,我阅读了“LIMITATIONS 0.4 版 此类已更新以支持来自 MediaWiki 实例的 0.4 版转储文件,但目前不支持这些文件中可用的任何新信息。”

任何解决方法都将帮助我更上一层楼。

注意:有人可能想知道为什么我们不能直接使用 SAX 或 STAX 解析器,wikipedia dump 是 25GB 加上单个文件,堆栈/内存问题很明显。因此,上面的 perl 脚本解决了这个问题,但目前我遇到了这个版本问题。

4

3 回答 3

2

任何流解析器都应该可以正常工作(DOM 解析器会崩溃)。尝试XML::Twig,只要记住在每条主要记录之后刷新(如果您想打印出 XML)或清除(如果您不关心 XML)。

或者直接使用XML::Parser。这就是两者在XML::Twig底层Parse::MediaWikiDump使用的解析 XML 的方法。

于 2010-06-05T19:05:31.613 回答
1

将“$pages->page”(在脚本中出现两次)替换为“$pages->next”。这有点成功。对我来说,它完成了 XXX.hgw.xml、XXX.anchor_text 和 XXX.related_links 文件,但随后陷入了循环……

更正:查看我的 XXX.hgw.xml 文件的末尾,它在单词中间停止了......

于 2011-01-26T20:27:10.343 回答
0

使用MediaWiki::DumpFile::Compat而不是弃用的Parse::MediaWikiDump. 有关详细信息,请参阅此处

是的,使用

$pages->next

正如约书亚所建议的那样。为我工作...

于 2011-09-01T00:56:46.493 回答