如何从维基百科中的perl中的<text></text>
标签之间提取内容?
我想处理utf-8
大文件 - 无法加载到内存中。文件包含每个页面的<text>.*?</text>
- 这可以加载到内存中 - 它应该加载到某个变量中以进行进一步处理:
<text xml:space="preserve">Some text without < or < ....
... 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中不是很好,也不能编写好的代码。不知道如何学习匹配位置,做微状态机或做移动窗口。
欢迎任何建议。
答案 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'节点之间有很多东西,你也可以在其他元素上设置清除。