تحليل علامات ويكيميديا ​​- هل المحللون المعتمدون على EBNF غير مناسبين؟

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

سؤال

أحاول تحليل ترميز ويكيميديا ​​(في Java) كما هو موجود في ويكيبيديا.هناك عدد من الحزم الموجودة لهذه المهمة، ولكنني لم أجد أيًا منها يناسب احتياجاتي بشكل جيد.أفضل حزمة عملت معها هي Mathclipse Bliki المحلل اللغوي, ، والذي يقوم بعمل لائق في معظم الصفحات.

ومع ذلك، فإن هذا المحلل اللغوي غير مكتمل، ويفشل في تحليل صفحات معينة أو تحليل صفحات أخرى بشكل غير صحيح.للأسف، الكود فوضوي إلى حد ما، وبالتالي فإن إصلاح المشكلات في محرك التحليل هذا يستغرق وقتًا طويلاً وعرضة للأخطاء.

في محاولة للعثور على محرك تحليل أفضل، قمت بالتحقيق باستخدام محلل يستند إلى EBNF لهذه المهمة (على وجه التحديد ANTLR).ومع ذلك، بعد بعض المحاولات، يبدو أن هذا الأسلوب ليس مناسبًا بشكل خاص لهذه المهمة، نظرًا لأن ترميز ويكيميديا ​​مريح نسبيًا وبالتالي لا يمكن ملاءمته بسهولة مع القواعد النحوية المنظمة.

ومع ذلك، فإن تجربتي مع ANTLR والموزعين المماثلين محدودة للغاية، لذلك قد تكون قلة خبرتي هي التي تسبب المشكلات بدلاً من أن يكون هؤلاء المحللون غير مناسبين لهذه المهمة بطبيعتهم.هل يمكن لأي شخص لديه خبرة أكبر في هذه المواضيع أن يزن هنا؟

@ستوبور:لقد ذكرت أنني نظرت إلى محركات التحليل المختلفة، بما في ذلك تلك التي تم إرجاعها بواسطة استعلام Google.أفضل ما وجدته حتى الآن هو محرك Bliki.تكمن المشكلة في أن إصلاح المشكلات مع مثل هؤلاء المحللين يصبح أمرًا مملاً بشكل لا يصدق، لأنها جميعًا عبارة عن سلاسل طويلة من التعبيرات الشرطية والعادية، مما يؤدي إلى كود السباغيتي.أنا أبحث عن شيء أقرب إلى طريقة التحليل EBNF، حيث أن هذه الطريقة أكثر وضوحًا وإيجازًا، وبالتالي أسهل في الفهم والتطور.لقد رأيت رابط mediawiki الذي نشرته، ويبدو أنه يؤكد شكوكي بأن EBNF غير مناسب لهذه المهمة.وبالتالي، فأنا أبحث عن محرك تحليل واضح ومفهوم مثل EBNF، ولكنه قادر أيضًا على التعامل مع بناء الجملة الفوضوي لترميز wiki.

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

المحلول

يعد تحليل محتوى mediawiki بأي معنى عام مستحيلًا إلى حد كبير باستخدام mediawiki نفسه.من أجل تحليله، يجب أن تكون قادرًا على تحليل HTML وCSS بشكل كامل (حيث يمكن تضمينهما)، والتعامل مع إنشاء مثيل القالب بالكامل وتوسيعه، بالإضافة إلى أي إضافة محلل قد يكون المحتوى ذو الصلة يستخدمه.إن إنشاء مثيل القالب هذا يعادل المعالج المسبق.

إنه يشبه في بعض النواحي تحليل C++ باستثناء أن المحلل اللغوي يتعامل أيضًا مع المدخلات المشوهة وإضافات بناء الجملة التعسفية التي تتم بواسطة ملحقات المحلل اللغوي.التنفيذ الفعلي لـ mediawiki يشبه إلى حد كبير Perl 5، ولم يكن التنفيذ الأصلي سيئًا للغاية لأن جميع حالات الحافة تتساقط ولكن الأشياء مرتبطة ببعضها البعض، ولكن في الواقع الحصول على أي تطبيق لاحق للقيام بنفس الشيء أمر معقد حقًا، خاصة وأن غالبًا ما تكون السلوكيات ناشئة وغير موثقة وغير مصممة.

إذا لم تكن بحاجة إلى تشغيل 100% من الصفحات أو لتكون قادرًا على استخراج كل المحتوى، فقد تتمكن من تجميع شيء يناسبك، وكما لاحظت، هناك بعض الحزم التي تفعل ذلك.نظرًا لعدم معرفتي باحتياجاتك الفعلية الدقيقة، أشك في أن أي شخص يمكنه أن يقدم لك إجابة أفضل بكثير حول كيفية تحليلها.إذا كنت بحاجة إلى أن تكون قادرًا على العمل في كل صفحة وتحليل كل شيء بشكل صحيح، فمن الأفضل أن يكون لديك فريق كبير إلى حد ما وعدة سنوات للعمل، وحتى ذلك الحين لا يزال لديك الكثير من الحالات الصغيرة.

باختصار، لا يوجد أي قواعد EBNF غير مناسبة تمامًا لتحليل ترميز mediawiki، ولكن لا يوجد شيء مناسب حقًا...

نصائح أخرى

أنت على صواب، ويكيميديا ​​لا تناسب قواعد النحو المحددة جيدًا لـ EBNF.

سيتعين عليك إلقاء نظرة على الأدوات التي ستتراجع لتتمكن من تحليل Wiki

btyacc وهو تراجع yacc.http://www.siber.com/btyacc/

يمكنك أن تنظر إلى أكسنت.أفضل من ياكhttp://accent.compilertools.net/

أو قد تضطر إلى الانهيار وتعلم بعض النكهات من prolog and roll التي تمتلكها.مهما كان ما تفعله، فلديك فترة تعليمية مثيرة للاهتمام أمامك.

حظ سعيد

حاولت ذات مرة أن أكتب محللًا لـ Boost.Quickbook, ، وهو في الأساس نفس نص الويكي الذي تستخدمه ويكيبيديا.

لقد كانت عملية شاقة للغاية لمجرد تفعيل بعض الأساسيات، لكنني أعتقد أنه سيكون من الممكن في النهاية كتابة قواعد EBNF لها.إذا كنت مهتما، محللي الجزئي متاح عبر الإنترنت (القواعد مضمنة في سلاسل المستندات).

هذه الإجابة موجودة قليلًا، ولكن ماذا عن عرض النص ثم تحليل HTML Dom لمعرفة مكونات wiki المختلفة.

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