nltk.tree.Tree
على دالة chomsky_normal_form()
، لكن القواعد النحوية ليست كذلك. نظرًا لأن CNF هو شكل من أشكال القواعد ، فيجب أن يكون كذلك.
chomsky_normal_form()
في NLTK هو دالة شجرة ثنائية. أعتقد أنه لا يمكن تطبيقه بشكل مباشر على القواعد النحوية ، راجع https://github.com/nltk/nltk/blob/develop/nltk/treetransforms.py
يعتبر تحويل القواعد إلى CNF معقدًا إلى حد ما ولم يتم تنفيذه بعد. سيكون من الجيد أن تكون هناك محاولة ، لكنها قد لا تكون ثلاثية.
إذا كان أي شخص مهتمًا بالمساهمة ، فإن الخوارزمية الجيدة للبدء هي
كنت أبحث عن هذا بالضبط وتعثرت هنا ،
لقد أنشأت هذه الوظيفة من خلال استغلال عناصر nltk الداخلية لأحد مشاريعي (ومحلل CKY فوقها أيضًا ، على الرغم من عدم وجود معالجة فارغة ، لكنني أعتقد أنها مفيدة للعديد من القواعد النحوية على أي حال ، على سبيل المثال اختبار ATIS لقواعد اللغة ) ، سأكون سعيدًا لإرسال PR ، أردت فقط تأكيد ما إذا كانت هذه المشكلة لا تزال قائمة ومتاحة للعمل عليها (خاصة بعد التعليقات الأخيرة في https://github.com/nltk/nltk/issues/1722)
أيضًا إذا لم يكن هناك محلل CYK كما هو مذكور في المشكلة الأخرى ، فسأكون سعيدًا لإرسال PR لذلك أيضًا
تضمين التغريدة لقد أوقفت الحياة الطريق.
virresh إذا كنت ترغب في ضيفي . لقد كتبت تحويلًا إلى CNF منذ سنوات.
https://github.com/aetilley/pcfg/blob/master/src/pcfg.py#L524
أتذكر أنها أعادت ترتيب الخطوات في الخوارزمية المعتادة ولكني أتذكر أيضًا إقناع نفسي بأنها كانت متكافئة. التقدم بحذر.
سأغلق القضية الأخرى.
هناك مشكلة مع CNFs لـ CFGs ؛ إنهم يعيدون إنتاجات مكررة. يمكنك اختبار ذلك من خلال:
import nltk
grammar = nltk.data.load("grammars/large_grammars/atis.cfg")
grammar = grammar.chomsky_normal_form()
print(len(grammar.productions()))
print(len(list(set(grammar.productions()))))
تحتوي القواعد النحوية على إنتاجات 20344
، والتي عند تحويلها إلى مجموعة تعطي إنتاجات 12396
.