Ошибка синтаксического анализатора с использованием модуля Perl XML :: DOM, & # 8220; ссылка на недопустимый номер символа & # 8221;

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

  •  11-07-2019
  •  | 
  •  

Вопрос

Я полный новичок в Perl, но я уверен, что изучение Perl будет проще, чем выяснение того, как анализировать XML в awk. Я хотел бы проанализировать файлы .sgm из этого набора данных:

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

Это сборник из 20 000 статей Reuters, опубликованных на ленте новостей десятилетней давности, и стандартный набор тестов для определенных типов обработки текста. Чтобы упростить тестирование на 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,...

Я использовал Perl-скрипт из http: // www. xml.com/pub/a/2001/05/16/perlxml.html в качестве примера и в итоге извлекли 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 все еще находится в Blackhat в Вегасе. Есть идеи, что я делаю не так, или как мне почистить файл? Я полагаю, что внутри этого "Неизвестного" происходит зло тег, который мне даже не нужен. Я действительно просто хочу извлечь текст из каждой статьи. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

Это было полезно?

Решение

Ссылка на числовой символ " & amp; # 5; " недопустимо в действительных документах XML. Я отсылаю вас к разделу 4.1 Ссылки на символы и сущности в XML рекомендация:

  

Символы, на которые ссылаются с использованием символов, ДОЛЖНЫ соответствовать продукции для Char.

Теперь, если мы перейдем по ссылке и посмотрим на производство для Char :

  

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

мы видим, что есть некоторые символы, которые могут появляться ни в буквальном смысле, ни в виде числовой ссылки на символ в действительном документе XML.

Странность это; Сегодня я кое-что узнал об XML:).

Этот разговор можно найти в управляющих символах ASCII в XML для возможный обходной путь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top