7

私は完全なPerl初心者ですが、awkでXMLを解析する方法を理解するよりも、Perlを学ぶ方が簡単だと確信しています。このデータセットから.sgmファイルを解析したいと思います。

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

これは、10年前のニュースワイヤーからの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> 
&#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,...

例として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
>

グーグルは助けにならず(トップヒットは私と同じエラーを経験しているページのようです)、私のPerlハッカーの友人はまだラスベガスのブラックハットから二日酔いしています。私が間違っていること、またはファイルをクリーンアップする方法について何かアイデアはありますか?その「不明」タグの内部で悪が起こっていると思いますが、それは私も必要ありません。私は本当にすべての記事からテキストを抽出したいだけです。さらに詳しい情報が必要な場合はお知らせください。

4

1 に答える 1

7

数字参照「&#5;」有効なXMLドキュメントでは無効です。XML推奨のセクション4.1文字とエンティティの参照を参照してください。

文字参照を使用して参照される文字は、Charの生成と一致する必要があります。

リンクをたどってCharのプロダクションを見ると:

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

文字通りにも、有効なXMLドキュメント内の数値文字参照としても表示できない文字がいくつかあることがわかります。

その奇妙な; 今日、XMLについて何かを学びました:)。

考えられる回避策については、XMLのASCII制御文字に関するこの会話を参照してください。

于 2009-08-03T18:09:57.353 に答える