Парсинг Wiki XML Dumps ver0.4 только стал жестким - PullRequest
4 голосов
/ 05 июня 2010

Я пытаюсь проанализировать XML-дамп Википедии, используя Parse-MediaWikiDump-1.0.4 вместе со скриптом Wikiprep.pl. Я полагаю, что этот сценарий хорошо работает с дампами Wiki XML ver0.3, но не с последними дампами ver0.4. Я получаю следующую ошибку.

Невозможно найти метод объекта "page" через пакет "Parse :: MediaWikiDump :: Pages" в строке wikiprep.pl 390.

Кроме того, в соответствии с документацией «Parse-MediaWikiDump-1.0.4» @ http://search.cpan.org/~triddle/Parse-MediaWikiDump-1.0.4/lib/Parse/MediaWikiDump/Pages.pm, I read «LIMITATIONS Version 0.4 Этот класс был обновлен для поддержки файлов дампа версии 0.4 из экземпляра MediaWiki, но в настоящее время он не поддерживает любую новую информацию, доступную в этих файлах. "

Любой обходной путь поможет мне перейти на следующий уровень.

Примечание: можно задаться вопросом, почему мы не можем вместо этого напрямую использовать парсер SAX или STAX, дамп Википедии - это 25 ГБ плюс один файл, проблемы со стеком / памятью очевидны. Следовательно, вышеуказанный Perl-скрипт решает эту проблему, но в настоящее время я застрял с этой версией проблемы.

Ответы [ 3 ]

2 голосов
/ 05 июня 2010

Любой потоковый парсер должен работать нормально (парсер DOM взорвется). Попробуйте XML::Twig, просто не забудьте сбросить (если вы хотите распечатать XML) или очистить (если вам не нужен XML) после каждой основной записи.

Или просто используйте XML::Parser напрямую. Это то, что XML::Twig и Parse::MediaWikiDump используют под капотом для анализа XML.

1 голос
/ 26 января 2011

Замените «$ pages-> page» (что в сценарии встречается дважды) на «$ pages-> next». Это своего рода сделал свое дело; для меня он закончил файлы XXX.hgw.xml, XXX.anchor_text и XXX.related_links, но затем застрял в цикле ...

Исправление: глядя на конец моего файла XXX.hgw.xml, он остановился на середине слова ...

0 голосов
/ 01 сентября 2011

Используйте MediaWiki::DumpFile::Compat вместо устаревшего Parse::MediaWikiDump. Для получения дополнительной информации см. Здесь .

И да, используйте

$pages->next

в соответствии с предложением Иисуса Навина. Работал на меня ...

...