如何从维基百科的巨大xml文件中提取Perl中的<text> </text>标签之间的内容(它可以是任何XML)?

时间:2015-10-12 09:34:31

标签: xml perl

如何从维基百科中的perl中的<text></text>标签之间提取内容?

我想处理utf-8 大文件 - 无法加载到内存中。文件包含每个页面的<text>.*?</text> - 这可以加载到内存中 - 它应该加载到某个变量中以进行进一步处理:

      <text xml:space="preserve">Some text without &lt; or &lt; ....
... more text ...
... more text ...</text>

考虑到文本不是开始行而不是结束行 - 重要内容介于<text></text>之间。我想提取它并改进为nlp机器学习生成一些文本文件。

可以使用以下文件下载文件:

wget http://dumps.wikimedia.org/plwiki/latest/plwiki-latest-pages-articles.xml.bz2

文件可以转换为stdin管道:

bzip2 -c -d plwiki-latest-pages-articles.xml.bz2 | perl something > data.txt

我在Perl中不是很好,也不能编写好的代码。不知道如何学习匹配位置,做微状态机或做移动窗口。

欢迎任何建议。

1 个答案:

答案 0 :(得分:1)

这样的事情会做到:

#!/usr/bin/perl
use strict;
use warnings;
use XML::Twig; 

sub text_handler {
    my ( $twig, $text_elt ) = @_; 
    print $text_elt -> text; 
    $twig -> purge; 
}

my $twig = XML::Twig -> new ( twig_handlers => { 'text' => \&text_handler } ) ->  parsefile ( 'your_xml');

请注意这里的技巧是purge丢弃以前处理过的XML。如果'text'节点之间有很多东西,你也可以在其他元素上设置清除。