Erreur d'analyse syntaxique lors de l'utilisation du module Perl XML :: DOM, & # 8220; référence au numéro de caractère non valide & # 8221;

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

  •  11-07-2019
  •  | 
  •  

Question

Je suis un newb Perl complet, mais je suis certain qu’apprendre à Perl sera plus facile que de savoir comment analyser XML dans awk. J'aimerais analyser les fichiers .sgm de cet ensemble de données:

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

Il s’agit d’un recueil de 20 000 articles de NewsWire publiés par Reuters il ya dix ans et qui constituent un ensemble de tests standard pour certains types de traitement de texte. Pour simplifier mes tests Perl, j'ai saisi les quelques centaines de lignes du premier fichier et ai créé test.sgm jusqu'à ce que mon script fonctionne correctement. Ça commence comme ça:

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

J'ai utilisé un script Perl de http: // www. xml.com/pub/a/2001/05/16/perlxml.html à titre d'exemple, avec pour résultat 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";

et j'obtiens cette sortie:

> 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 ne résout pas le problème (la première des critiques semble être une page qui rencontre la même erreur que moi) et mon ami pirate Perl est toujours accroché par Blackhat à Vegas. Des idées que je fais mal, ou comment je peux nettoyer le fichier? Je suppose que la méchanceté se passe à l'intérieur de cet " Unknown " tag, dont je n'ai même pas besoin. Je veux vraiment juste extraire le texte de chaque article. Si vous avez besoin de plus d’informations, faites-le moi savoir.

Était-ce utile?

La solution

Référence de caractère numérique "& amp; # 5;" n'est pas légal dans les documents XML valides. Je vous renvoie à la section 4.1 Références de caractères et d'entités dans XML recommandation:

  

Les caractères référencés à l'aide de références de caractère DOIVENT correspondre à la production du caractère.

Maintenant, si nous suivons le lien et regardons la production pour Caractère :

  

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

nous constatons que certains caractères ne peuvent apparaître ni littéralement, ni en tant que référence de caractère numérique dans un document XML valide.

Une bizarrerie qui J'ai appris quelque chose à propos de XML aujourd'hui:).

Voir cette conversation sur les caractères de contrôle ASCII en XML pour une solution de contournement possible.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top