나는 완전한 Perl newb이지만 Perl을 배우는 것이 awk에서 XML을 구문 분석하는 방법을 찾는 것보다 쉽다는 것을 확신합니다. 나는이 데이터 세트에서 .sgm 파일을 구문 분석하고 싶습니다 :Perl XML :: DOM 모듈, "잘못된 문자 번호에 대한 참조"를 사용하는 파서 오류
http://kdd.ics.uci.edu/databases/reuters21578/reuters21578.html
이것은 10 년 전에서 뉴스 와이어에서 20,000 로이터 기사의 모음입니다, 및 텍스트 처리의 특정 유형의 표준 테스트 세트입니다. 필자의 펄 테스트를 단순화하기 위해 첫 번째 파일에서 처음 몇백 줄을 뽑아 내 스크립트가 제대로 작동 할 때까지 test.sgm을 만들었다. 그것은이처럼 시작합니다
use XML::DOM;
my $file = $ARGV[0];
my $parser = XML::DOM::Parser->new();
my $doc = $parser->parsefile($file);
#print $doc->getElementsByTagName('DATE');
print "\n";
내가이 출력 얻을 :
을 내가 예를 들어 http://www.xml.com/pub/a/2001/05/16/perlxml.html에서 펄 스크립트를 사용,이, extract.pl에 결국<!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,...
> 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