2010-06-05 35 views
4

我试图用“解析 - MediaWikiDump-1.0.4”与“Wikiprep.pl”脚本一起解析XML维基百科转储。我猜这个脚本可以在ver0.3 Wiki XML Dumps中正常工作,但不能与最新的ver0.4 Dump一起使用。我收到以下错误。解析XML维基转储ver0.4刚韧

通过包无法找到对象的方法“页”,“解析:: MediaWikiDump ::网页”,wikiprep.pl线390

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

任何变通,会帮我去一个新的水平。

注:一个可能想知道为什么我们不能直接使用SAX或STAX解析器代替,维基百科转储是25GB加上单个文件,堆/内存问题是显而易见的。因此,上面的Perl脚本解决了这个问题,但目前我坚持这个版本问题。

回答

2

任何流解析器应该工作得很好(DOM解析器会炸毁)。尝试XML::Twig,只记得在每个主要记录后刷新(如果你想打印出XML)或清除(如果你不关心XML)。

或者只是使用XML::Parser直接。这就是XML::TwigParse::MediaWikiDump正在使用的底层解析XML。

+0

非常感谢...这个信息将是非常有益的,我很感激。 – syed 2010-06-05 23:15:55

1

替换 “$ pages->页面”(它在脚本中出现了两次)以 “$ pages->下一步”。那有点诀窍;对我来说,它完成了XXX.hgw.xml,XXX.anchor_text和XXX.related_links文件,但后来陷入了循环...

纠正:看着我的XXX.hgw.xml文件的结尾,它停止中等字...

0

使用MediaWiki::DumpFile::Compat,而不是过时的Parse::MediaWikiDump。欲了解更多信息,请致电see here

是的,使用

$pages->next 

约书亚的建议。为我工作...

+0

我知道这是一个很老的讨论。但我试图让Wikiprep.pl开始维基百科的最新转储。 我将“use Parse :: MediaWikiDump”替换为“使用MediaWiki :: DumpFile :: Compat”,“ - > page”替换为“ - > next”。那是你所暗示的一切吗?它仍然不适合我,所以我想也许有一些明显的我失踪了。 – 2013-04-05 05:05:12