私は完全なPerlのnewbですが、Perlの学習はawkのXML解析方法を理解するよりも簡単です。私は、このデータセットから.sgmファイルを解析したいと思います:Perl XML :: DOMモジュールを使用したパーサーエラー、「無効な文字番号への参照」
http://kdd.ics.uci.edu/databases/reuters21578/reuters21578.html
これは十年前からのニュースワイヤー〜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>
C T
f0704reute
u f BC-BAHIA-COCOA-REVIEW 02-26 0105</UNKNOWN>
<TEXT>
<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,...
私は、一例としてhttp://www.xml.com/pub/a/2001/05/16/perlxml.htmlからperlスクリプトを使用し、これで終わった、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のハッカーの友人はまだVegasのBlackhatからハングアップしています。私が間違ってやっているアイデアや、ファイルをきれいにする方法は?私は、私が必要としていない「不明な」タグの中で悪いことが起こっていると思います。私は本当にすべての記事からテキストを抽出したいだけです。詳細が必要な場合はお知らせください。
それでは。私は間違って何もしていないようだ。私はXMLを作成するのではなく、有用なものに無効な文字を使用しているわけではありません。 sed "s /&#/ bad/g" cleantest.sgm このトリックを行うようです。さて、「72行目の文書要素の後の迷惑行為」についてはまだ不平を言っていますが、それは無関係です。 私のためにそのXMLアーカイブを追跡してくれてありがとう。 –
PlexLuthor