加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

使用Perl XML :: DOM模块的分析器错误,“对无效字符编号的引用”

发布时间:2020-12-15 21:57:08 所属栏目:大数据 来源:网络整理
导读:我是一个完整的Perl newb,但我确信学习Perl比在awk中解析如何解析 XML更容易.我想解析这个数据集中的.sgm文件: http://kdd.ics.uci.edu/databases/reuters21578/reuters21578.html 这是十多年前来自newswire的20,000条路透社文章的集合,是某些类型文本处理
我是一个完整的Perl newb,但我确信学习Perl比在awk中解析如何解析 XML更容易.我想解析这个数据集中的.sgm文件:

http://kdd.ics.uci.edu/databases/reuters21578/reuters21578.html

这是十多年前来自newswire的20,000条路透社文章的集合,是某些类型文本处理的标准测试集.为了简化我的perl测试,我从第一个文件中抓取了前几百行并制作了test.sgm,直到我的脚本正常工作.它开头是这样的:

<!DOCTYPE lewis SYSTEM "lewis.dtd">
<REUTERS TOPICS="YES" LEWISSPLIT="TRAIN" CGISPLIT="TRAINING-SET" OLDID="5544" NEWID="1">
<DATE>26-FEB-1987 15:01:01.79</DATE>
<TOPICS><D>cocoa</D></TOPICS>
<PLACES><D>el-salvador</D><D>usa</D><D>uruguay</D></PLACES>
<PEOPLE></PEOPLE>
<ORGS></ORGS>
<EXCHANGES></EXCHANGES>
<COMPANIES></COMPANIES>
<UNKNOWN> 
&#5;&#5;&#5;C T
&#22;&#22;&#1;f0704&#31;reute
u f BC-BAHIA-COCOA-REVIEW   02-26 0105</UNKNOWN>
<TEXT>&#2;
<TITLE>BAHIA COCOA REVIEW</TITLE>
<DATELINE>    SALVADOR,Feb 26 - </DATELINE><BODY>Showers continued throughout the week in
the Bahia cocoa zone,alleviating the drought since early
January and improving prospects for the coming temporao,...

我使用了http://www.xml.com/pub/a/2001/05/16/perlxml.html的perl脚本作为示例,最后得到了这个,extract.pl:

use XML::DOM;

my $file = $ARGV[0];

my $parser = XML::DOM::Parser->new();
my $doc = $parser->parsefile($file);

#print $doc->getElementsByTagName('DATE');

print "n";

我得到这个输出:

> perl extract.pl test.sgm

reference to invalid character number at line 11,column 0,byte 343 at /usr/lib64/perl5/vendor_perl/5.8.5/x86_64-linux-thread-multi/XML/Parser.pm line 187
>

谷歌没有帮助(最热门的搜索似乎是一个我遇到同样错误的页面),我的Perl黑客朋友仍然在拉斯维加斯的Blackhat中徘徊.我有什么想法,或者我如何清理文件?我认为在“未知”标签内发生了不良情况,我甚至都不需要.我真的只想从每篇文章中提取文本.如果您需要更多信息,请告诉我.

解决方法

数字字符引用“&#5;”在有效的XML文档中不合法.我引用了XML建议中的 4.1 Character and Entity References节:

Characters referred to using character references MUST match the production for Char.

现在,如果我们按照链接查看production for Char

Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

我们看到有些字符既不能在字面上出现,也不能在有效的XML文档中作为数字字符引用出现.

奇怪的是;我今天学到了一些关于XML的东西:).

有关可能的解决方法,请参阅ASCII control characters in XML上的此对话.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读