Perl XML :: DOM 모듈을 사용한 파서 오류,“유효하지 않은 문자 번호 참조”

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

  •  11-07-2019
  •  | 
  •  

문제

나는 완전한 Perl Newb이지만 AWK에서 XML을 구문 분석하는 방법을 알아내는 것보다 Perl 학습이 더 쉬울 것이라고 확신합니다. 이 데이터 세트에서 .sgm 파일을 구문 분석하고 싶습니다.

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

이것은 10 년 전의 Newswire의 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,...

Perl 스크립트를 사용했습니다 http://www.xml.com/pub/a/a/a/a/a/05/16/perlxml.html 예를 들어, 이것으로 끝났습니다. extrac.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 Hacker 친구는 여전히 Vegas의 Blackhat에서 매달려 있습니다. 내가 잘못하고있는 일이나 파일을 청소할 수있는 아이디어가 있습니까? 나는 "알 수없는"태그 내부에서 악이 일어나고 있다고 생각합니다. 나는 모든 기사에서 텍스트를 추출하고 싶습니다. 더 많은 정보가 필요하면 알려주세요.

도움이 되었습니까?

해결책

숫자 문자 참조 ""는 유효한 XML 문서에서 합법적이지 않습니다. 나는 당신을 섹션을 참조합니다 4.1 캐릭터 및 엔티티 참조 XML 권장 사항에서 :

문자 참조를 사용하도록 언급 된 문자는 Char의 프로덕션과 일치해야합니다.

이제 우리가 링크를 따르고 숯 생산:

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

유효한 XML 문서에서 문자 그대로 나타나거나 숫자 문자 참조로 표시 될 수있는 문자가 있음을 알 수 있습니다.

이상한 것; 오늘 XML에 대해 배웠습니다 :).

이 대화를 참조하십시오 XML에서 ASCII 제어 문자 가능한 해결 방법.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top