Tôi là một newb Perl hoàn chỉnh, nhưng tôi chắc chắn rằng việc học Perl sẽ dễ dàng hơn việc tìm ra cách phân tích cú pháp XML. Tôi muốn phân tích các tập tin .sgm từ tập dữ liệu này:Lỗi trình phân tích cú pháp bằng cách sử dụng Perl XML :: Mô-đun DOM, "tham chiếu đến số ký tự không hợp lệ"
http://kdd.ics.uci.edu/databases/reuters21578/reuters21578.html
Đây là một bộ sưu tập của 20.000 bài báo của Reuters từ mạng tin từ một thập kỷ trước, và là một thử nghiệm bộ tiêu chuẩn cho một số loại xử lý văn bản. Để đơn giản hóa thử nghiệm perl của tôi, tôi đã lấy vài trăm dòng đầu tiên từ tệp đầu tiên và tạo test.sgm cho đến khi kịch bản của tôi hoạt động chính xác trên đó. Nó bắt đầu ra như thế này:
<!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,...
tôi đã sử dụng một kịch bản perl từ http://www.xml.com/pub/a/2001/05/16/perlxml.html làm ví dụ, và kết thúc với điều này, 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";
và tôi nhận được kết quả này:
> 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 không trợ giúp (lần truy cập hàng đầu dường như là trang đang gặp lỗi tương tự như tôi) và người bạn tin tặc Perl của tôi vẫn bị treo từ Blackhat in Vegas. Bất kỳ ý tưởng gì tôi đang làm sai, hoặc làm thế nào tôi có thể làm sạch các tập tin? Tôi cho rằng cái xấu đang xảy ra bên trong cái thẻ "Không biết" mà tôi thậm chí không cần. Tôi thực sự chỉ muốn trích xuất văn bản từ mọi bài viết. Nếu bạn cần thêm thông tin, vui lòng cho tôi biết.
Vậy thì. Có vẻ như tôi không làm gì sai cả. Vì tôi không tạo XML cũng không sử dụng các ký tự không hợp lệ cho bất kỳ điều gì hữu ích, một đơn giản sed "s/& #/bad/g" cleantest.sgm Dường như thực hiện thủ thuật. Vâng, nó vẫn còn phàn nàn về "rác sau khi phần tử tài liệu ở dòng 72" nhưng đó là không liên quan. Cảm ơn bạn đã theo dõi lưu trữ XML đó cho tôi. –
PlexLuthor