2009-08-03 9 views
7

मैं एक पूर्ण पर्ल न्यूबी हूं, लेकिन मुझे यकीन है कि सीखना पर्ल एक्सएमएल को अजीब में कैसे पार्स करना है, यह समझने से आसान होगा। मैं इस डेटासेट से .sgm फ़ाइलें पार्स करने के लिए करना चाहते हैं:पर्ल एक्सएमएल :: डीओएम मॉड्यूल का उपयोग करते हुए पार्सर त्रुटि, "अमान्य वर्ण संख्या का संदर्भ"

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

यह एक दशक पहले से न्यूज़वायर से 20,000 रायटर लेखों का संग्रह है, और पाठ प्रसंस्करण के कुछ प्रकार के लिए एक मानक परीक्षण सेट है। मेरे पर्ल परीक्षण को सरल बनाने के लिए, मैंने पहली फ़ाइल से पहली कुछ सौ लाइनों को पकड़ लिया और 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 से एक पर्ल स्क्रिप्ट का इस्तेमाल किया है, और यह, 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 मदद नहीं करता है (शीर्ष हिट एक ऐसा पृष्ठ प्रतीत होता है जो एक ही त्रुटि का सामना कर रहा है) और मेरा पर्ल हैकर मित्र अभी भी वेगास में ब्लैकहाट से लटका हुआ है। कोई विचार जो मैं गलत कर रहा हूं, या मैं फ़ाइल को कैसे साफ कर सकता हूं? मुझे लगता है कि उस "अज्ञात" टैग के अंदर बुराई हो रही है, जिसकी मुझे आवश्यकता भी नहीं है। मैं वास्तव में सिर्फ हर लेख से पाठ निकालना चाहता हूं। अगर आपको अधिक जानकारी चाहिए तो कृपया मुझे बताएं।

उत्तर

7

संख्यात्मक वर्ण संदर्भ "& # 5;" वैध एक्सएमएल दस्तावेज़ों में कानूनी नहीं है। मैं आपको XML अनुशंसा में 4.1 Character and Entity References अनुभाग में संदर्भित करता हूं:

वर्ण संदर्भों का उपयोग करने के लिए संदर्भित वर्णों को Char के लिए उत्पादन से मेल खाना चाहिए।

अब अगर हम कड़ी का अनुसरण करें और देखो production for Char:

चार :: = # x9 | # एक्सए | # एक्सडी | [# x20- # xD7FF] | [# xE000- # xFFFD] | [# x10000- # x10FFFF]

हम देखते हैं कि कुछ वर्ण हैं जो न तो शाब्दिक रूप से दिखाई दे सकते हैं, न ही एक वैध XML दस्तावेज़ में संख्यात्मक वर्ण संदर्भ के रूप में।

एक विषमता; मैंने आज एक्सएमएल के बारे में कुछ सीखा है :)।

संभावित बातचीत के लिए ASCII control characters in XML पर इस बातचीत को देखें।

+0

ठीक है तो। ऐसा प्रतीत होता है कि मैं कुछ भी गलत नहीं कर रहा हूं। चूंकि मैं न तो एक्सएमएल बना रहा हूं और न ही किसी भी उपयोगी के लिए अमान्य वर्णों का उपयोग कर रहा हूं, एक साधारण sed "s/& #/bad/g" cleantest.sgm चाल करने के लिए लगता है। खैर, यह अभी भी "लाइन 72 पर दस्तावेज़ तत्व के बाद जंक" के बारे में शिकायत कर रहा है लेकिन यह असंबंधित है। मेरे लिए उस XML संग्रह को ट्रैक करने के लिए धन्यवाद। – PlexLuthor

संबंधित मुद्दे