使用 Perl XML::DOM 模块的解析器错误,“引用无效字符数”

2024-01-02

我是一个彻头彻尾的 Perl 新手,但我确信学习 Perl 会比弄清楚如何在 awk 中解析 XML 更容易。我想解析此数据集中的 .sgm 文件:

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

这是 10 年前来自新闻专线的 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,...

我使用了一个 perl 脚本http://www.xml.com/pub/a/2001/05/16/perlxml.html http://www.xml.com/pub/a/2001/05/16/perlxml.html作为一个例子,最后得到的是 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
>

Google 没有帮助(最热门的页面似乎遇到了与我相同的错误),而我的 Perl 黑客朋友仍然对维加斯的 Blackhat 耿耿于怀。有什么想法我做错了吗,或者如何清理文件?我认为糟糕的情况发生在“未知”标签内,我什至不需要它。我真的只想从每篇文章中提取文本。如果您需要更多信息,请告诉我。


数字字符引用“”在有效的 XML 文档中不合法。我建议您参阅该部分4.1 字符和实体引用 http://www.w3.org/TR/REC-xml/#dt-charref在 XML 推荐中:

使用字符引用引用的字符必须与 Char 的产生式相匹配。

现在,如果我们点击链接并查看查尔生产 http://www.w3.org/TR/REC-xml/#NT-Char:

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

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

奇怪的是;我今天学到了一些有关 XML 的知识:)。

请参阅此对话XML 中的 ASCII 控制字符 http://lists.xml.org/archives/xml-dev/199804/msg00501.html寻找可能的解决方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Perl XML::DOM 模块的解析器错误,“引用无效字符数” 的相关文章

随机推荐