Error del analizador al utilizar el módulo Perl XML :: DOM, & # 8220; referencia al número de carácter no válido & # 8221;

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

  •  11-07-2019
  •  | 
  •  

Pregunta

Soy un completo perl newb, pero estoy seguro de que aprender Perl será más fácil que descubrir cómo analizar XML en awk. Me gustaría analizar los archivos .sgm de este conjunto de datos:

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

Esta es una colección de 20,000 artículos de Reuters de Newswire de hace una década, y es un conjunto de prueba estándar para ciertos tipos de procesamiento de texto. Para simplificar mi prueba de perl, tomé los primeros cientos de líneas del primer archivo e hice test.sgm hasta que mi script funcionó correctamente en eso. Comienza así:

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

Utilicé un script perl de http: // www. xml.com/pub/a/2001/05/16/perlxml.html como ejemplo, y terminé con esto, 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";

y obtengo este resultado:

> 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 no ayuda (el éxito principal parece ser una página que está experimentando el mismo error que yo) y mi amigo pirata informático de Perl todavía está colgado de Blackhat en Las Vegas. ¿Alguna idea de lo que estoy haciendo mal o cómo puedo limpiar el archivo? Supongo que la maldad está sucediendo dentro de eso "Desconocido" etiqueta, que ni siquiera necesito. Realmente solo quiero extraer el texto de cada artículo. Si necesita más información, hágamelo saber.

¿Fue útil?

Solución

La referencia de caracteres numéricos " & amp; # 5; " no es legal en documentos XML válidos. Le remito a la sección 4.1 Referencias de caracteres y entidades en el XML recomendación:

  

Los caracteres a los que se hace referencia utilizando referencias de personajes DEBEN coincidir con la producción de Char.

Ahora, si seguimos el enlace y miramos la producción para Char :

  

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

vemos que hay algunos caracteres que no pueden aparecer literalmente ni como referencia de caracteres numéricos en un documento XML válido.

Una rareza que; Hoy aprendí algo sobre XML :).

Vea esta conversación en caracteres de control ASCII en XML para una posible solución alternativa.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top