Gitter هو غرفة الدردشة للمطورين.
nlpnet --- معالجة اللغة الطبيعية مع الشبكات العصبية nlpnet هي مكتبة Python لمهام معالجة اللغة الطبيعية على أساس الشبكات العصبية. في الوقت الحالي ، يقوم بتنفيذ وضع علامات على جزء من الكلام ، ووضع العلامات على الأدوار الدلالية وتجميل التبعية. معظم الهندسة المعمارية مستقلة اللغة ، ولكن تم تصميم بعض الوظائف خصيصًا للعمل مع البرتغاليين. كان هذا النظام مستوحى من سينا.
هام: من أجل استخدام النماذج المدربة لـ NLP البرتغالي ، ستحتاج إلى تنزيل البيانات من http://nilc.icmc.usp.br/nlpnet/models.html.
يتطلب nlpnet NLTK و Numpy. بالإضافة إلى ذلك ، يحتاج إلى تنزيل بعض البيانات من NLTK. بعد تثبيته ، اتصل
>>> nltk.download()
انتقل إلى علامة التبويب النماذج وحدد Punkt Tokenizer. يتم استخدامه من أجل تقسيم النص إلى جمل.
يستخدم Cython لتوليد ملحقات C والركض بشكل أسرع. ربما لن تحتاج إليها ، نظرًا لأن ملف .c الذي تم إنشاؤه بالفعل مزود بـ NLPNET ، لكنك ستحتاج إلى مترجم C. على أنظمة Linux و MAC ، لا ينبغي أن تكون هذه مشكلة ، ولكن قد تكون على Windows ، لأن Setuptools تتطلب Microsoft C مترجم افتراضيًا. إذا لم يكن لديك بالفعل ، فمن السهل عادة تثبيت MingW بدلاً من ذلك واتبع التعليمات هنا.
يمكن استخدام nlpnet كمكتبة Python أو بواسطة البرامج النصية المستقلة. يتم شرح كلا الاستخدامات أدناه.
يمكنك استخدام nlpnet كمكتبة في كود بيثون على النحو التالي:
> >> import nlpnet
> >> tagger = nlpnet . POSTagger ( '/path/to/pos-model/' , language = 'pt' )
> >> tagger . tag ( 'O rato roeu a roupa do rei de Roma.' )
[[( u'O' , u'ART' ), ( u'rato' , u'N' ), ( u'roeu' , u'V' ), ( u'a' , u'ART' ), ( u'roupa' , u'N' ), ( u'do' , u'PREP+ART' ), ( u'rei' , u'N' ), ( u'de' , u'PREP' ), ( u'Roma' , u'NPROP' ), ( u'.' , 'PU' )]] في المثال أعلاه ، يتلقى مُنشئ POSTagger كوسيطة أولى للدليل حيث يوجد نموذجه المدرب. الوسيطة الثانية هي رمز لغة الحرفين (حاليًا ، يتم دعم Onle pt و en ). هذا له تأثير فقط في الرمز المميز.
استدعاء أداة التعليقات التوضيحية واضح ومباشر. تلك المقدمة هي POSTagger ، SRLTagger و DependencyParser ، وكلهم لديهم tag طريقة تتلقى سلاسل مع نص يتم وضع علامة عليها (في DependencyParser ، هناك الاسم المستعار في parse الطريقة ، والتي تبدو أكثر ملاءمة). يقسم tagger النص إلى جمل ثم يرميز كل واحد (وبالتالي فإن عودة ما بعد المهم هو قائمة بالقوائم).
إخراج srltagger أكثر تعقيدًا قليلاً:
>>> tagger = nlpnet.SRLTagger() >>> tagger.tag( u ' O rato roeu a roupa do rei de Roma. ' ) [<nlpnet.taggers.SRLAnnotatedSentence at 0x84020f0>]
بدلاً من قائمة tuples ، يتم تمثيل الجمل بحالات من SRLAnnotatedSentence . تعمل هذه الفئة بشكل أساسي كحامل للبيانات ، ولديها سمتان:
>>> sent = tagger.tag( u ' O rato roeu a roupa do rei de Roma. ' )[ 0 ] >>> sent.tokens [u'O', u'rato', u'roeu', u'a', u'roupa', u'do', u'rei', u'de', u'Roma', u'.'] >>> sent.arg_structures [(u'roeu', {u'A0': [u'O', u'rato'], u'A1': [u'a', u'roupa', u'do', u'rei', u'de', u'Roma'], u'V': [u'roeu']})]
arg_structures هي قائمة تحتوي على جميع الهياكل المسند في الجملة. الوحيد في هذا المثال هو الفعل Roeu. ويمثله توبلي مع المسند وقاموس تعيين دور الدور الدلالي للرموز التي تشكل الحجة.
لاحظ أن الفعل يظهر كأول عضو في Tuple وأيضًا كمحتوى من الملصقات "V" (والذي يعتمد على الفعل). وذلك لأن بعض المسندات متعددة الكلمات. في هذه الحالات ، تظهر الكلمة "الرئيسية" "الرئيسية" (عادة الفعل نفسه) في arg_structures[0] ، وتظهر جميع الكلمات تحت المفتاح "V".
إليك مثال مع REPORENCYPARSER:
>>> parser = nlpnet.DependencyParser( ' dependency ' , language = ' en ' ) >>> parsed_text = parser.parse( ' The book is on the table. ' ) >>> parsed_text [<nlpnet.taggers.ParsedSentence at 0x10e067f0>] >>> sent = parsed_text[ 0 ] >>> print (sent.to_conll()) 1 The _ DT DT _ 2 NMOD 2 book _ NN NN _ 3 SBJ 3 is _ VBZ VBZ _ 0 ROOT 4 on _ IN IN _ 3 LOC-PRD 5 the _ DT DT _ 6 NMOD 6 table _ NN NN _ 4 PMOD 7 . _ . . _ 3 P
تُطبعها طريقة to_conll() لكائنات التحليل المحفترفين في تدوين CONLL. يمكن الوصول إلى الرموز والعلامات ومؤشرات الرأس من خلال متغيرات الأعضاء:
>>> sent.tokens [u'The', u'book', u'is', u'on', u'the', u'table', u'.'] >>> sent.heads array([ 1, 2, -1, 2, 5, 3, 2]) >>> sent.labels [u'NMOD', u'SBJ', u'ROOT', u'LOC-PRD', u'NMOD', u'PMOD', u'P']
متغير عضو heads هو صفيف numpy. يحتوي الموضع I-Th في الصفيف على فهرس رأس الرمز المميز I-Th ، باستثناء الرمز المميز للجذر ، الذي يحتوي على رأس -1. لاحظ أن هذه المؤشرات تعتمد على 0 ، في حين أن تلك الموضحة في وظيفة to_conll() تعتمد على 1.
يوفر nlpnet أيضًا البرامج النصية لوضع علامة على النص وتدريب النماذج الجديدة واختبارها. يتم نسخها إلى دليل البرامج النصية الفرعية لتثبيت Python ، والذي يمكن تضمينه في متغير مسار النظام. يمكنك الاتصال بهم من سطر الأوامر وإعطاء بعض إدخال النص.
$ nlpnet-tag.py pos --data /path/to/nlpnet-data/ --lang pt
O rato roeu a roupa do rei de Roma.
O_ART rato_N roeu_V a_ART roupa_N do_PREP+ART rei_N de_PREP Roma_NPROP ._PU إذا لم يتم إعطاء --data ، فسيبحث البرنامج النصي عن النماذج المدربة في الدليل الحالي. -الافتراضات --lang إلى en . إذا كان لديك نص مميز بالفعل ، فيمكنك استخدام خيار -t ؛ يفترض أن الرموز المميزة مفصولة بمساحات بيضاء.
مع وضع العلامات على الدور الدلالي:
$ nlpnet-tag.py srl /path/to/nlpnet-data/
O rato roeu a roupa do rei de Roma.
O rato roeu a roupa do rei de Roma .
roeu
A1: a roupa do rei de Roma
A0: O rato
V: roeuتم كتابة السطر الأول من قبل المستخدم ، والثاني هو نتيجة الرمز المميز.
وتجميل التبعية:
$ nlpnet-tag.py dependency --data dependency --lang en
The book is on the table.
1 The _ DT DT _ 2 NMOD
2 book _ NN NN _ 3 SBJ
3 is _ VBZ VBZ _ 0 ROOT
4 on _ IN IN _ 3 LOC-PRD
5 the _ DT DT _ 6 NMOD
6 table _ NN NN _ 4 PMOD
7 . _ . . _ 3 Pلمعرفة المزيد حول التدريب واختبار نماذج جديدة ، وغيرها من الوظائف ، راجع الوثائق على http://nilc.icmc.usp.br/nlpnet
تصف المراجع التالية تصميم NLPNET ، وكذلك التجارب التي أجريت. تم تنفيذ بعض التحسينات على المدونة منذ نشرها.