هذه المقالة مخصصة لأولئك الذين لم يعملوا أبدًا مع Stanford nlp وواجهوا الحاجة إلى دراستها وتطبيقها في أقرب وقت ممكن.
هذا البرنامج شائع جدًا ، وعلى وجه الخصوص ، تستخدم شركتنا -
BaltInfoCom - هذا البرنامج.
تحتاج أولاً إلى فهم شيء بسيط: يعمل Stanford NLP على مبدأ التعليق التوضيحي للكلمات ، أي تعليق واحد أو أكثر ، مثل POS (جزء من الكلام - جزء من الكلام) ، NER (التعرف على الكيان - الكيان المسمى) ، و الخ.
أول شيء يراه المبتدئ عندما يذهب إلى موقع Stanford NLP في قسم "
البداية السريعة " هو التصميم التالي:
Properties props = new Properties(); props.setProperty("annotators", "tokenize,ssplit,pos,lemma,ner,regexner,parse,depparse,coref"); StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
هنا StanfordCoreNLP هو ناقل ، يتم إدخال نصه مسبقًا في كائن CoreDocument. StanfordCoreNLP ، هذا هو الكائن الأكثر أهمية وغالبًا ما يتم استخدامه في الهيكل بأكمله ، والذي يتم به كل العمل الرئيسي.
أولاً ، قمنا بتعيين المعلمات في StanfordCoreNLP ونشير إلى تنفيذ الإجراءات التي نحتاجها. علاوة على ذلك ، يمكن العثور على جميع المجموعات الممكنة من هذه المعلمات على الموقع الرسمي على
هذا الرابط.
- الرمز المميز - وفقًا لذلك ، الرمز المميز
- انقسام إلى جملة
- نقاط البيع - تعريف جزء من الكلام
- lemma - إضافة إلى كل كلمة شكلها الأولي
- نير - تعريف الكيانات المسماة ، مثل "منظمة" ، "الوجه" ، إلخ.
- regexner - تعريف الكيانات المسماة باستخدام التعبيرات العادية
- تحليل - تحليل كل كلمة حسب الدلالات (الجنس ، العدد ، وما إلى ذلك)
- depparse - تحليل تبعيات بناء الجملة بين الكلمات في جملة
- coref- ابحث عن مراجع لنفس الكيان المسمى في النص ، على سبيل المثال ، "Mary" و "she"
في ما يلي مثال على كيفية عمل التعليقات التوضيحية (التحليل والإلغاء) معًا:

إذا كنت لا تفهم التعليقات التوضيحية حول الرموز المميزة ، فستجد على هذه المواقع معانيها:
معاني الروابط في الجمل ومعاني أجزاء الكلام .
لكل من هذه المعلمات ، يمكنك العثور على علامات إضافية لمزيد من الضبط الدقيق
هنا في قسم "التعليقات التوضيحية".
يتم تعيين هذه البنيات إذا كنت ترغب في استخدام نماذج ستانفورد NLP المضمنة ، ولكن يمكنك أيضًا تعيينها يدويًا باستخدام طريقة addAnnotator (Annotator ...) أو عن طريق تجديد المعلمات قبل إنشاء كائن StanfordCoreNLP.
الآن حول كيفية استخراج الكيانات المسماة من النص. للقيام بذلك ، يحتوي Stanford NLP على ثلاث فئات مضمنة مستندة إلى التعبير وفئة واحدة لوضع علامات على الرموز من خلال النموذج.
فئات التعبير العادي:
- TokensRegexAnnotator - تعليق توضيحي يعمل وفقًا للقواعد - SequenceMatchRules .
ضع في اعتبارك مثالاً لرسم الخرائط ، بناءً على هذه القواعد.
ner = { type: "CLASS", value: "edu.stanford.nlp.ling.CoreAnnotations$NamedEntityTagAnnotation" } $EMAIL = "/.*([A-z0-9-]+?)(@)([A-z0-9-]+?).*/" { ruleType: "tokens", pattern: (([]) ($EMAIL)), action: (Annotate($0, ner, "MAIL")), priority:0 }
يشير السطر الأول إلى نوع العلامات التي سنملأها في هذا النموذج.
في الثانية ، نقوم بإنشاء متغير ، والذي وفقًا للقواعد يجب أن يبدأ بالحرف "$" ويكون في بداية السطر.
بعد ذلك ، أنشئ كتلة نعين فيها نوع القواعد. ثم نموذج للمقارنة (في حالتنا ، نقول أننا بحاجة إلى "[]" - أي رمز مميز يأتي بعده المتغير $ EMAIL. وبعد ذلك نقوم بتعيين الإجراء ، في حالتنا ، نريد أن نعلق على الرمز المميز.
يرجى ملاحظة أنه في المثال ، يتم تضمين "[]" و "$ EMAIL" بين قوسين لأن $ 0 يشير إلى مجموعة الالتقاط التي نريد إبرازها من القالب الذي تم العثور عليه ، بينما تعني مجموعة الالتقاط مجموعة مغلقة بين قوسين. إذا قمت بتعيين 0 ، في العبارة "sobaka@mail.ru mail" ، سيتم وضع علامة على جميع الرموز المميزة كـ "MAIL". إذا قمت بتعيين 1 (أي مجموعة الالتقاط الأولى) ، فسيتم وضع تعليق على كلمة "mail" فقط ؛ إذا 2 ، ثم sobaka@mail.ru فقط.
في المواقف التي يمكن فيها تحديد نفس الرمز المميز بشكل مختلف ، وفقًا لقاعدتين ، يمكنك تعيين أولوية القاعدة بالنسبة إلى الأخرى. على سبيل المثال ، في حالة العبارة التالية - "House $ 25" ، قد يكون هناك قاعدتان متضاربتان ، يتم تحديد الرقم 25 كرقم للمنزل ، وثالثًا - حسب قيمته. - RegexNERAnnotator - يعمل هذا التعليق التوضيحي باستخدام RegexNERSequenceClassifier .
رسم الخرائط له هو على النحو التالي
regex1 TYPE overwritableType1,Type2... priority
هنا regex1 هو تعبير عادي بتنسيق TokenSequencePattern .
TYPE هو اسم الكيان المسمى.
overwritableType1 ، Type2 ... - الأنواع التي يمكننا استبدالها في حالات المواقف الخلافية.
الأولوية - الأولوية للنزاعات الموصوفة أعلاه.
يرجى ملاحظة أنه في هذا التعيين يجب فصل جميع الأعمدة بعلامات تبويب. - TokensRegexNERAnatorator
يختلف هذا التعليق التوضيحي عن السابق في أنه يستخدم مكتبة TokensRegex للتعبيرات العادية ، مثل التعليق التوضيحي الأول ، والذي يسمح لك باستخدام قواعد أكثر مرونة للمطابقة ؛ بالإضافة إلى القدرة على تسجيل قيم العلامات بخلاف علامة NER.
يتم رسم الخرائط له وفقا لقواعد RegexNERAnnotator
وضع علامة على النص من خلال نموذج باستخدام NERClassifierCombiner
من أجل استخدام هذا الفصل ، يجب عليك أولاً الحصول على النموذج الخاص بك أو تدريبه.
يمكن العثور على كيفية القيام بذلك
هنا ؛
بعد تدريب النموذج ، يبقى إنشاء NERClassifierCombiner فقط ، للإشارة إلى المسار إلى النموذج الموجود فيه ، واستدعاء طريقة التصنيف.
NERClassifierCombiner classifier = new NERClassifierCombiner(false, false, serialized_model); String text = "Some lucky people working in BaltInfoCom Org."; List<List<CoreLabel>> out = classifier.classify(text);
يمكن العثور على قائمة كاملة بالتعليقات التوضيحية
هنا .
بالإضافة إلى ما سبق ، إذا كنت بحاجة إلى استخدام ستانفورد NLP للغة الروسية ، يمكنني أن أنصحك بالحضور إلى
هنا . هناك نماذج لتحديد أجزاء الكلام (pos-tagger) ولتحديد العلاقات في الجمل (محلل التبعية).
أنواع العلامات الممثلة هناك:
الروسية- ud-pos.tagger هي مجرد علامة ،
russian-ud-mfmini.tagger - مع القائمة الرئيسية للميزات المورفولوجية ،
russian-ud-mf.tagger - مع قائمة كاملة بالميزات المورفولوجية ، مثال على رسم الخرائط يمكن عرضه
هنا .