خطأ محلل باستخدام وحدة Perl XML :: DOM ، "مرجع إلى رقم الحرف غير صالح"

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

  •  11-07-2019
  •  | 
  •  

سؤال

أنا Newb Perl الكامل ، لكنني متأكد من أن تعلم Perl سيكون أسهل من معرفة كيفية تحليل XML في AWK. أود تحليل ملفات .sgm من مجموعة البيانات هذه:

http://kdd.ics.uci.edu/Databases/ReuTers21578/Reuters21578.html

هذه مجموعة تضم 20.000 مقالة من رويترز من نيوسباياير منذ عقد مضى ، وهي اختبار قياسي لأنواع معينة من معالجة النص. لتبسيط اختبار Perl الخاص بي ، أمسك بضع مئات من الخطوط من الملف الأول وقمت بإجراء اختبار. 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 (يبدو أن الضربة العليا هي صفحة تعاني من نفس الخطأ الذي أنا عليه) ولا يزال صديق بيرل المتسلل الخاص بي معلقًا من Blackhat في فيغاس. أي أفكار ما أفعله خطأ ، أو كيف يمكنني تنظيف الملف؟ أفترض أن السوء يحدث داخل علامة "غير معروفة" ، والتي لا أحتاجها حتى. أنا حقا أريد فقط استخراج النص من كل مقال. اذا احتجت الى معلومات اضافية، من فضلك اعلمني.

هل كانت مفيدة؟

المحلول

مرجع الحرف الرقمي "" ليس قانونيًا في مستندات XML صالحة. أحيلك إلى القسم 4.1 مراجع الشخصية والكيان في توصية XML:

يجب أن تتطابق الأحرف المشار إليها إلى مراجع الأحرف مع الإنتاج لـ Char.

الآن إذا اتبعنا الرابط وننظر إلى إنتاج شار:

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

نرى أن هناك بعض الشخصيات التي لا يمكن أن تظهر حرفيًا ، ولا كمرجع شخصية رقمية في مستند XML صالح.

غرابة ذلك ؛ لقد تعلمت شيئًا عن XML اليوم :).

شاهد هذه المحادثة أحرف التحكم ASCII في XML للحصول على حل محتمل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top