Erro do analisador usando o módulo Perl XML :: DOM, “Referência ao número de caracteres inválidos”

StackOverflow https://stackoverflow.com/questions/1223391

  •  11-07-2019
  •  | 
  •  

Pergunta

Sou um Perl Newb completo, mas tenho certeza de que o aprendizado do Perl será mais fácil do que descobrir como analisar XML no AWK. Eu gostaria de analisar os arquivos .sgm deste conjunto de dados:

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

Esta é uma coleção de 20.000 artigos da Reuters de Newswire de uma década atrás e é um conjunto de testes padrão para certos tipos de processamento de texto. Para simplificar meus testes Perl, peguei as primeiras centenas de linhas do primeiro arquivo e fiz testar.sgm até que meu script funcionasse corretamente. Começa assim:

<!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,...

Eu usei um script perl de http://www.xml.com/pub/a/2001/05/16/perlxml.html Como exemplo, e acabou com isso, extrair.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";

E eu recebo esta saída:

> 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
>

O Google não ajuda (o sucesso superior parece ser uma página que está experimentando o mesmo erro que eu sou) e meu amigo Hacker Perl ainda está pendurado em Blackhat em Las Vegas. Alguma idéia do que estou fazendo de errado ou como posso limpar o arquivo? Suponho que a maldade está acontecendo dentro dessa tag "desconhecida", que eu nem preciso. Eu realmente só quero extrair o texto de cada artigo. Se você precisar de mais informações, por favor me avise.

Foi útil?

Solução

A referência numérica do caractere "" não é legal em documentos XML válidos. Eu o refiro à seção 4.1 Referências de caráter e entidade Na recomendação XML:

Os caracteres referidos no uso de referências de caracteres devem corresponder à produção para char.

Agora, se seguirmos o link e olharmos para o produção para char:

Char :: = #x9 | #xa | #xd | [#x20-#xd7ff] | [#xe000-#xfffd] | [#x10000-#x10ffff

Vemos que existem alguns caracteres que não podem aparecer literalmente, nem como uma referência numérica de caracteres em um documento XML válido.

Uma estranheza que; Eu aprendi algo sobre XML hoje :).

Veja esta conversa em Caracteres de controle ASCII em XML Para uma possível solução alternativa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top