توفر Package lingo هياكل البيانات والخوارزميات المطلوبة لمعالجة اللغة الطبيعية.
على وجه التحديد ، فإنه يوفر tagger pos ( lingo/pos ) ، محلل التبعية ( lingo/dep ) ، ورمز مميز أساسي ( lingo/lexer ) للغة الإنجليزية. كما يوفر هياكل بيانات للعقيدة ( lingo/corpus ) ، و Treebanks ( lingo/treebank ).
الهدف من هذه الحزمة هو توفير خط أنابيب جودة الإنتاج لمعالجة اللغة الطبيعية.
الحزمة غير قابلة للتطبيق: go get -u github.com/chewxy/lingo
تعتمد هذه الحزمة وحقائبها الفرعية على عدد قليل جدًا من الحزم الخارجية. ها هم:
| طَرد | تستخدم ل | حيوية | ملحوظات | رخصة |
|---|---|---|---|---|
| جورجونيا | التعلم الآلي | حيوي. لن يكون من الصعب إعادة كتابتها ، ولكن لماذا؟ | نفس المؤلف | ترخيص جورجونيا (Apache 2.0-Like) |
| Gographviz | تصور التعليقات التوضيحية ، والتصورات الأخرى المتعلقة بالرسومات البيانية | حيوية للتصورات ، والتي هي ميزة لطيفة | تم تغيير واجهة برمجة التطبيقات الأخيرة في 12 أبريل 2017 | ترخيص Gographviz (Apache 2.0) |
| الأخطاء | الأخطاء | لن تموت الحزمة بدونها ، لكن من الجيد جدًا أن يكون لديك | API مستقر للعام الماضي | ترخيص الأخطاء (MIT/BSD مثل) |
| تعيين | تعيين العمليات | يمكن استبدالها بسهولة | API مستقر للعام الماضي | تعيين ترخيص (MIT/BSD-like) |
انظر الحزم الفردية للاستخدام. هناك أيضًا مجموعة من الأدوات التنفيذية في دليل cmd . من المفترض أن تكون أمثلة حول كيفية إعداد خط أنابيب معالجة اللغة الطبيعية.
خط أنابيب لغة طبيعي مع هذه الحزمة هو القنوات المدفوعة بشكل كبير. إليك مثال على تحليل التبعية:
func main () {
inputString: `The cat sat on the mat`
lx := lexer . New ( "dummy" , strings . NewReader ( inputString )) // lexer - required to break a sentence up into words.
pt := pos . New ( pos . WithModel ( posModel )) // POS Tagger - required to tag the words with a part of speech tag.
dp := dep . New ( depModel ) // Creates a new parser
// set up a pipeline
pt . Input = lx . Output
dp . Input = pt . Output
// run all
go lx . Run ()
go pt . Run ()
go dp . Run ()
// wait to receive:
for {
select {
case d := <- dp . Output :
// do something
case err := <- dp . Error :
// handle error
}
}
}لمهام محددة (وضع علامات POS ، التحليل ، التعرف على الكيان المسماة وما إلى ذلك) ، راجع README لكل حقيبة فرعية. توفر هذه الحزمة من تلقاء نفسها بشكل أساسي هياكل البيانات التي ستستخدمها الحجز الفرعي.
ولعل بنية البيانات الأكثر أهمية هي بنية *Annotation . يحمل بشكل أساسي كلمة والبيانات الوصفية المرتبطة للكلمة.
بالنسبة لعمليات التحليل التبعية ، يأخذ الرسم البياني ثلاثة نماذج: *Dependency ، *DependencyTree و *Annotation . جميع النماذج الثلاثة قابلة للتحويل من واحد إلى آخر. TODO: شرح الأساس المنطقي وراء كل نوع من البيانات.
هناك Quirk معين قد لاحظته هو أن POSTag و DependencyType مشفرة بشدة كثوابت. توفر هذه الحزمة في الواقع اختلافين لكل منهما: واحد من Stanford/Penn Treebank وواحد من Universaldependencies.
السبب الرئيسي في الترميز المتشددين يتم ذلك بشكل أساسي لأسباب الأداء - معرفة المبلغ الذي يتم تخصيصه يقلل من الكثير من الأعمال الإضافية التي يتعين على البرنامج القيام بها. كما أنه يقلل من فرص تحوير متغير عالمي.
بالطبع يأتي هذا بمثابة مفاضلة - تقتصر البرامج على هذين الخيارين. لحسن الحظ ، لا يوجد سوى عدد محدود من أنواع علامات POS وأنواع العلاقات التبعية. تم تنفيذ اثنين من أكثرها شعبية (Stanford/PTB والتبعيات العالمية).
يتم دعم علامات البناء التالية:
لاستخدام مجموعة TAGS أو RELSET محددة ، قم بإنشاء برنامجك بالتالي: go build -tags='stanfordtags' .
أنواع العلامة الافتراضية وأنواع REL التبعية هي إصدار التبعيات العالمية.
يجب أن تلاحظ أيضًا أن Tokenizer ، lingo/lexer ليس هو رمز NLP المعتاد. إنه رمز رمزي يميز الفضاء ، مع بعض القواعد المحددة للغة الإنجليزية. كان مستوحى من حديث روب بايك عن ليكسرز. اعتقدت أنه سيكون من الرائع كتابة شيء من هذا القبيل لـ NLP.
تعرض حالات الاختبار في Package lingo/lexer كيف تتعامل مع Unicode ، وغيرها من اللغة الإنجليزية.
انظر المساهمة. md لمزيد من المعلومات
هذه الحزمة مرخصة بموجب ترخيص معهد ماساتشوستس للتكنولوجيا.