Frage

Ich bin ein komplettes Perl -Neuling, aber ich bin sicher, dass das Lernen einfacher sein wird, als herauszufinden, wie XML in awk analysiert werden kann. Ich möchte die .sgm -Dateien aus diesem Datensatz analysieren:

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

Dies ist eine Sammlung von 20.000 Reuters -Artikeln von Newswire vor einem Jahrzehnt und ist ein Standard -Testsatz für bestimmte Arten der Textverarbeitung. Um meine Perl -Tests zu vereinfachen, schnappte ich mich die ersten paar hundert Zeilen aus der ersten Datei und machte test.sgm, bis mein Skript richtig funktioniert. Es beginnt so:

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

Ich habe ein Perl -Skript von verwendet http://www.xml.com/pub/a/2001/05/16/perlxml.html als Beispiel und endete damit, extrahieren.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";

Und ich bekomme diese Ausgabe:

> 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 hilft nicht (der obere Treffer scheint eine Seite zu sein, die den gleichen Fehler aufweist, den ich bin), und mein Perl Hacker -Freund ist immer noch von Blackhat in Vegas übernommen. Irgendwelche Ideen, was ich falsch mache oder wie ich die Datei reinigen kann? Ich gehe davon aus, dass die Schlechtigkeit in diesem "unbekannten" Tag geschieht, das ich nicht einmal brauche. Ich möchte den Text wirklich nur aus jedem Artikel extrahieren. Wenn Sie weitere Informationen benötigen, lassen Sie es mich bitte wissen.

War es hilfreich?

Lösung

Die numerische Zeichenreferenz "" ist in gültigen XML -Dokumenten nicht legal. Ich verweise Sie auf den Abschnitt 4.1 Charakter- und Entitätsreferenzen In der XML -Empfehlung:

Charaktere, die auf Zeichenreferenzen verwiesen werden, müssen mit der Produktion für char übereinstimmen.

Wenn wir nun dem Link folgen und das betrachten Produktion für Char:

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

Wir sehen, dass es einige Zeichen gibt, die weder wörtlich noch als numerische Zeichenreferenz in einem gültigen XML -Dokument erscheinen können.

Eine Kuriosität; Ich habe heute etwas über XML gelernt :).

Sehen Sie sich dieses Gespräch an ASCII -Steuerzeichen in XML für eine mögliche Problemumgehung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top