قارن بين عمل Python - مكتبات مفتوحة المصدر للتعرف على الكيانات المسماة

المقدمة


نحن في الشركة نقوم بإنشاء خدمة تتيح لك إنشاء اتفاقيات الترخيص وإدارتها وتخزينها بأمان والاتفاقيات الأخرى بين المستقلين وعملائهم بشكل تلقائي.

لحل هذه المشكلة ، جربت عشرات الحلول في مجال معالجة اللغات الطبيعية ، بما في ذلك حلول مفتوحة المصدر وأود مشاركة تجربتي مع Python مفتوحة المصدر - مكتبات للتعرف على الكيانات المسماة.

الكيانات المسماة المعترف بها


بضع كلمات حول المشكلة نفسها. إن التعرف على الكيانات المسماة (NER) هو فرع من تكنولوجيا معالجة اللغات البشرية ، ويسمح تطبيق البرنامج لها بالعثور على فئات موضوعية من الكلمات والعبارات في الكلام والنص. في البداية ، كانت هذه أسماء جغرافية ، أسماء أشخاص ، منظمات ، عناوين ، ولكن الآن تم توسيع هذا المفهوم إلى حد كبير وبمساعدة NER ، نبحث في النص عن التواريخ والأرقام والأرقام النسبية والمطلقة ، إلخ.
تحديد الكيانات المسماة هو "بوابة" للغة البشرية ، ويسمح لك بتحديد ومعالجة نوايا الشخص ، لإنشاء اتصال الكلمات في خطابه والعالم الحقيقي.


عدم المساواة اللغوية


بادئ ذي بدء ، أود أن ألفت الانتباه إلى التفاوت الواضح في الحلول البرمجية للغات المختلفة. لذا ، فإن معظم التطورات (بما في ذلك تلك التي تم إنشاؤها بواسطة المبرمجين الروس) تعمل باللغة الإنجليزية. يعد العثور على نماذج جاهزة للغة البهاسا أو الهندية أو العربية مهمة جاحدة.

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

هناك العديد من الحلول للغة الروسية التي تثير الدهشة في جودتها ، ولكنهم لا يشعرون بالقوة التجارية والإمكانات الأكاديمية كما هو الحال بالنسبة للمكتبات المتقدمة "المبنية" لمعالجة اللغة الإنجليزية.

النص المراد معالجته


أخذت عدة اقتراحات من مصادر مختلفة ، ودمجتها في نص منوم إلى حد ما لاختبار مدى جودة أداء المكتبات المختارة لعملها.

english_text = ''' I want a person available 7 days and with prompt response all most every time. Only Indian freelancer need I need PHP developer who have strong experience in Laravel and Codeigniter framework for daily 4 hours. I need this work by Monday 27th Jan. should be free from plagiarism . 
Need SAP FICO consultant for support project needs to be work on 6 months on FI AREAWe.  Want a same site to be created as the same as this https://www.facebook.com/?ref=logo, please check the site before contacting to me and i want this site to be ready in 10 days. They will be ready at noon tomorrow .'''

russian_text = '''   110     ,     .        https://www.sobyanin.ru/  , 1 .     .51 (   :  , )  ?     2107   47     24,    . 
 c        10  1970 ,     -, . ,  5/1 8 000 ( )  00  .               .              - .'''



مكتبة NLTK


NLTK هي مكتبة كلاسيكية لمعالجة اللغات الطبيعية ، وهي سهلة الاستخدام ، ولا تتطلب دراسة طويلة الأمد وتؤدي 99٪ من المهام التي قد تنشأ عند حل مشكلات الطلاب.
import nltk
nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')
nltk.download('maxent_ne_chunker')
nltk.download('words')
for sent in nltk.sent_tokenize(english_text):
   for chunk in nltk.ne_chunk(nltk.pos_tag(nltk.word_tokenize(sent))):
      if hasattr(chunk, 'label'):
         print(chunk)

الناتج: كما نرى ، قام NLTK بعمل جيد ، ولكن من أجل جعل النتيجة "أكثر ثراء" ، سيتعين علينا تدريب العلامة الخاصة بنا (أو اختيار واحد آخر من قائمة واسعة إلى حد ما). ولكن هل يستحق الأمر في 2020 إذا كانت هناك حلول أبسط؟
(GPE Indian/JJ)
(ORGANIZATION PHP/NNP)
(GPE Laravel/NNP)
(PERSON Need/NNP)
(ORGANIZATION SAP/NNP)
(ORGANIZATION FI/NNP)




ستانفورد كور NLP


صورة

تتمثل إحدى طرق توسيع قدرات NLTK في استخدام مكتبة Java الكلاسيكية من Stanford CoreNLP مع مكتبة Python الكلاسيكية. تتحسن الجودة بشكل كبير ، مع متطلبات منخفضة نسبيًا.
from nltk.tag.stanford import StanfordNERTagger
jar = "stanford-ner-2015-04-20/stanford-ner-3.5.2.jar"
model = "stanford-ner-2015-04-20/classifiers/" 
st_3class = StanfordNERTagger(model + "english.all.3class.distsim.crf.ser.gz", jar, encoding='utf8') 
st_4class = StanfordNERTagger(model + "english.conll.4class.distsim.crf.ser.gz", jar, encoding='utf8') 
st_7class = StanfordNERTagger(model + "english.muc.7class.distsim.crf.ser.gz", jar, encoding='utf8')
for i in [st_3class.tag(english_text.split()), st_4class.tag(english_text.split()), st_7class.tag(english_text.split())]:
  for b in i:
    if b[1] != 'O':
        print(b)

الناتج: كما نرى ، تحسنت جودة الإنتاج بشكل ملحوظ ، والآن ، نظرًا للسرعة وسهولة الاستخدام ، من الواضح أن NLTK مناسبة تمامًا للتطبيقات الصناعية أيضًا.
('PHP', 'ORGANIZATION')
('Laravel', 'LOCATION')
('Indian', 'MISC')
('PHP', 'ORGANIZATION')
('Laravel', 'LOCATION')
('Codeigniter', 'PERSON')
('SAP', 'ORGANIZATION')
('FICO', 'ORGANIZATION')
('PHP', 'ORGANIZATION')
('Laravel', 'LOCATION')
('Monday', 'DATE')
('27th', 'DATE')
('Jan.', 'DATE')
('SAP', 'ORGANIZATION')



سبيسي



صورة

Spacy هي مكتبة Python مفتوحة المصدر لمعالجة اللغات الطبيعية ، وقد تم نشرها بموجب ترخيص معهد ماساتشوستس للتكنولوجيا (!) ، وتم إنشاؤها وتطويرها من قبل ماثيو هانيبال وإينس مونتاني ، مؤسسي شركة التطوير انفجار.
كقاعدة ، سيتعرف كل من يواجه الحاجة إلى حل بعض المشكلات لمعالجة لغة طبيعية على هذه المكتبة عاجلاً أم آجلاً. يمكن الوصول إلى معظم الوظائف "من خارج الصندوق" ؛ حيث يحرص المطورون على سهولة استخدام المكتبة.
تقدم Space 18 علامة تحدد الكيانات المسماة ، بالإضافة إلى طريقة بسيطة لإعادة تدريب النموذج الخاص بك. أضف وثائق ممتازة ومجتمعًا ضخمًا ودعمًا جيدًا هنا - وسيصبح من الواضح لماذا أصبح هذا الحل شائعًا جدًا في العامين الماضيين.

import spacy
model_sp = en_core_web_lg.load()
for ent in model_sp(english_text).ents:
  print(ent.text.strip(), ent.label_)

الإخراج: كما ترون ، فإن النتيجة أفضل بكثير ، والشفرة أبسط بكثير وأكثر قابلية للفهم. سلبيات العمل - وزن كبير من النماذج ، التشغيل البطيء ، "العلامات" غير المنطقية نسبيًا ، نقص النماذج للعديد من اللغات ، بما في ذلك الروسية (على الرغم من وجود نماذج متعددة اللغات).
7 days DATE
New York GPE
Indian NORP
Laravel LOC
Codeigniter NORP
4 hours TIME
Monday 27th Jan. DATE
FICO ORG
6 months DATE
10 days DATE
noon TIME
tomorrow DATE
Iceland GPE



الذوق


صورة

يقدم Flair انغماسًا أكثر عمقًا في مجال الموضوع ، وقد تم إنشاء المكتبة ، في الواقع ، لحل مشاكل البحث ، فإن التوثيق ليس سيئًا ، ولكن مع بعض الإخفاقات ، هناك تكامل مع عدد كبير من المكتبات الأخرى ، كود واضح ومنطقي وقابل للقراءة.
تحتوي المكتبة على مجتمع متطور ، وليس موجهًا نحو اللغة الإنجليزية فقط ، نظرًا للعدد الكبير من النماذج المتاحة ، فإن Flair أكثر ديمقراطية بشكل ملحوظ في اختيار اللغات من Spacy.
from flair.models import SequenceTagger
tagger = SequenceTagger.load('ner')
from flair.data import Sentence
s = Sentence(english_text)
tagger.predict(s)
for entity in s.get_spans('ner'):
    print(entity)

الإخراج: كما ترون ، لم يعمل النموذج المدرب بأفضل طريقة. ومع ذلك ، قلة من الناس يستخدمون Flair "خارج الصندوق" - وهي في المقام الأول مكتبة لإنشاء أدواتهم الخاصة. نفس الشيء ، مع التحفظات ، يمكن أن يقال عن المكتبة التالية.
Span [6,7]: "7 days" [− Labels: DATE (0.9329)]
Span [17]: "Indian" [− Labels: NORP (0.9994)]
Span [35,36]: "4 hours." [− Labels: TIME (0.7594)]
Span [42,43,44]: "Monday 27th Jan." [− Labels: DATE (0.9109)]
Span [53]: "FICO" [− Labels: ORG (0.6987)]
Span [63,64]: "6 months" [− Labels: DATE (0.9412)]
Span [98,99]: "10 days." [− Labels: DATE (0.9320)]
Span [105,106]: "noon tomorrow" [− Labels: TIME (0.8667)]




Deeppavlov


صورة
DeepPavlov هي مكتبة مفتوحة المصدر تم إنشاؤها بواسطة TensorFlow و Keras.

يقترح المطورون استخدام النظام بشكل أساسي للأنظمة "التحادثية" ، وبرامج الروبوت للدردشة ، وما إلى ذلك ، ولكن المكتبة ممتازة أيضًا لحل مشكلات البحث. إن استخدامه "في الإنتاج" دون عمل جاد "لتخصيص" و "إنهاء" الحل هو مهمة ، على ما يبدو ، لا يقصدها مبدعو MIPT.
إن النهج الغريب وغير المنطقي لهندسة الكود ، الذي يتناقض مع Python Zen ، يجلب مع ذلك نتائج جيدة إذا كنت تقضي وقتًا كافيًا للتعامل معها.
from deeppavlov import configs, build_model
from deeppavlov import build_model, configs

ner_model = build_model(configs.ner.ner_ontonotes_bert, download=True)
result = ner_model([english_text])
for i in range(len(result[0][0])):
     if result [1][0][i] != 'O':
         print(result[0][0][i], result[1][0][i])

الناتج: النتيجة يمكن التنبؤ بها ومفهومة ومفصلة وواحدة من الأفضل. يمكن أيضًا استخدام النموذج نفسه مباشرةً في محولات الوجه المعانقة ، والتي تزيل ، من نواح عديدة ، المطالبات ببنية الكود.
7 B-DATE
days I-DATE
Indian B-NORP
Laravel B-PRODUCT
Codeigniter B-PRODUCT
daily B-DATE
4 B-TIME
hours I-TIME
Monday B-DATE
27th I-DATE
Jan I-DATE
6 B-DATE
months I-DATE
FI B-PRODUCT
AREAWe I-PRODUCT
10 B-DATE
days I-DATE
noon B-TIME
tomorrow B-DATE




ديبميبت / نير


هذه ، في الواقع ، المكتبة التي بدأ بها ديب بافلوف. يمكن استخدامه لفهم اتجاه أفكار المطورين والتقدم الذي أحرزوه.
import ner
example = russian_text
def deepmint_ner(text):
  extractor = ner.Extractor()
  for m in extractor(text):
     print(m)
deepmint_ner(example)

انتاج:
Match(tokens=[Token(span=(7, 13), text='')], span=Span(start=7, end=13), type='LOC')
Match(tokens=[Token(span=(492, 499), text='')], span=Span(start=492, end=499), type='PER')
Match(tokens=[Token(span=(511, 520), text=''), Token(span=(521, 525), text='')], span=Span(start=511, end=525), type='PER')
Match(tokens=[Token(span=(591, 600), text='')], span=Span(start=591, end=600), type='LOC')
Match(tokens=[Token(span=(814, 820), text=''), Token(span=(821, 829), text='')], span=Span(start=814, end=829), type='PER')


متقن لعدة لغات


واحدة من أقدم المكتبات ، والعمل السريع وعدد كبير من اللغات المدعومة تجعلها لا تزال شائعة. من ناحية أخرى ، لا يسمح ترخيص GPLv3 الفيروسي باستخدامه بالكامل في التطوير التجاري.
from polyglot.text import Text
for ent in Text(english_text).entities:
 print(ent[0],ent.tag)

الإخراج: وللغة الروسية:
Laravel I-LOC
SAP I-ORG
FI I-ORG


!polyglot download embeddings2.ru ner2.ru
for ent in Text(russian_text).entities:
 print(ent[0],ent.tag)

الإخراج: النتيجة ليست الأفضل ، ولكن السرعة والدعم الجيد يمكن أن يحسنها إذا بذلت جهداً.
24 I-ORG
I-PER
I-LOC
I-PER
I-ORG
I-PER




AdaptNLP


صورة
مكتبة جديدة أخرى مع حد دخول منخفض للغاية للباحث.
يتيح AdaptNLP للمستخدمين ، من الطلاب إلى مهندسي البيانات ذوي الخبرة ، استخدام نماذج وأساليب التدريب الحديثة في البرمجة اللغوية العصبية.
تم بناء المكتبة فوق مكتبات Flair و Hugging Face Transformers الشهيرة.

from adaptnlp import EasyTokenTagger
tagger = EasyTokenTagger()
sentences = tagger.tag_text(
    text = english_text, model_name_or_path = "ner-ontonotes"
)
spans = sentences[0].get_spans("ner")
for sen in sentences:
    for entity in sen.get_spans("ner"):
        print(entity)

الإخراج: النتيجة مقبولة ، لكن المكتبة تسمح لك باستخدام مجموعة متنوعة من النماذج لإكمال المهمة ، ويمكن تحسينها بشكل متكرر إذا بذلت جهودًا (ولكن لماذا ، إذا كان لديك Flair و Hugging Face Transformers مباشرة). ومع ذلك ، فإن البساطة وقائمة كبيرة من المهام وهندسة جيدة ، بالإضافة إلى الجهود المنهجية للمطورين تتيح لنا أن نأمل أن يكون للمكتبة مستقبل.
DATE-span [6,7]: "7 days"
NORP-span [18]: "Indian"
PRODUCT-span [30]: "Laravel"
TIME-span [35,36,37]: "daily 4 hours"
DATE-span [44,45,46]: "Monday 27th Jan."
ORG-span [55]: "FICO"
DATE-span [65,66]: "6 months"
DATE-span [108,109]: "10 days"
TIME-span [116,117]: "noon tomorrow"




ستانزا


صورة
ستانزا من StanfordNlp هي هدية للمطورين في عام 2020 من جامعة ستانفورد. ما افتقر إليه Spacy هو التعددية اللغوية ، الانغماس العميق في اللغة جنبًا إلى جنب مع سهولة الاستخدام.
إذا كان المجتمع يدعم هذه المكتبة ، فلديه كل فرصة ليصبح واحدًا من أكثر المكتبات شعبية.
import stanza
stanza.download('en')
def stanza_nlp(text):
  nlp = stanza.Pipeline(lang='en', processors='tokenize,ner')
  doc = nlp(text)
  print(*[f'entity: {ent.text}\ttype: {ent.type}' for sent in doc.sentences for ent in sent.ents], sep='\n')
stanza_nlp(english_text)

الإخراج: وللغة الروسية:
entity: 7 days type: DATE
entity: Indian type: NORP
entity: Laravel type: ORG
entity: Codeigniter type: PRODUCT
entity: daily 4 hours type: TIME
entity: Monday 27th Jan. type: DATE
entity: SAP type: ORG
entity: FICO type: ORG
entity: 6 months type: DATE
entity: FI AREAWe type: ORG
entity: 10 days type: DATE
entity: noon tomorrow type: TIME



import stanza
stanza.download('ru')
def stanza_nlp_ru(text):
  nlp = stanza.Pipeline(lang='ru', processors='tokenize,ner')
  doc = nlp(text)
  print(*[f'entity: {ent.text}\ttype: {ent.type}' for sent in doc.sentences for ent in sent.ents], sep='\n')
stanza_nlp_ru(russian_text)

الإخراج: عمل سريع ، رمز جميل ، نتيجة جيدة.
2020-05-15 08:01:18 INFO: Use device: cpu
2020-05-15 08:01:18 INFO: Loading: tokenize
2020-05-15 08:01:18 INFO: Loading: ner
2020-05-15 08:01:19 INFO: Done loading processors!
entity: type: LOC
entity: type: LOC
entity: type: PER
entity: 2107 type: MISC
entity: 47 type: MISC
entity: 24 type: MISC
entity: type: PER
entity: - type: LOC
entity: . type: LOC
entity: type: LOC
entity: type: LOC
entity: type: PER




ألنلب


صورة
مكتبة للأبحاث ، مبنية على PyTorch /
من ناحية - بنية بسيطة وسرعة عالية ، من ناحية أخرى ، يقوم المطورون بتغيير شيء ما باستمرار في الهندسة المعمارية ، مما يؤثر على عمل المكتبة ككل.
from allennlp.predictors.predictor import Predictor
import allennlp_models.ner.crf_tagger
predictor = Predictor.from_path("https://storage.googleapis.com/allennlp-public-models/ner-model-2020.02.10.tar.gz")
allen_result = predictor.predict(
  sentence=english_text
)
for i in zip(allen_result['tags'], allen_result['words']):
    if (i[0]) != 'O':
      print(i)

الإخراج:
("U-MISC" ، "هندي") ("U-MISC" ، "
PHP")
("U-MISC" ، "Laravel")
("U-MISC" ، "Codeigniter")
("B- ORG "،" SAP ")
(" L-ORG "،" FICO ")
تعمل الوحدة بسرعة ، ولكن النتيجة ضعيفة بشكل غير مقبول.

هانلب


صورة
HanLP هي واحدة من المكتبات مفتوحة المصدر من المطورين من الصين. مشروع ذكي ومتطور ونشط ، يبدو لي أنه سيجد مكانه وراء حدود الإمبراطورية السماوية.
تم إنشاء مكتبة البرمجة اللغوية العصبية للباحثين والشركات على TensorFlow 2.0.
تأتي HanLP مع نماذج مُعدة مسبقًا للغات مختلفة ، بما في ذلك الإنجليزية والصينية والعديد من اللغات الأخرى.
المشكلة الوحيدة هي جودة "القفزات" الإخراج بعد كل تحديث للمكتبة.
recognizer = hanlp.load(hanlp.pretrained.ner.MSRA_NER_BERT_BASE_ZH)
recognizer([list('上海华安工业(集团)公司董事长谭旭光和秘书张晚霞来到美国纽约现代艺术博物馆参观。'),
                list('萨哈夫说,伊拉克将同联合国销毁伊拉克大规模杀伤性武器特别委员会继续保持合作。')])

انتاج:

[[('上海华安工业(集团)公司', 'NT', 0, 12), ('谭旭光', 'NR', 15, 18),
('张晚霞', 'NR', 21, 24),
('美国', 'NS', 26, 28),
('纽约现代艺术博物馆', 'NS', 28, 37)],
[('萨哈夫', 'NR', 0, 3),
('伊拉克', 'NS', 5, 8),
('联合国销毁伊拉克大规模杀伤性武器特别委员会', 'NT', 10, 31)]]


import hanlp
tokenizer = hanlp.utils.rules.tokenize_english
testing = tokenizer('Need SAP FICO consultant for support project needs to be work on 6 months on FI AREAWe')
recognizer = hanlp.load(hanlp.pretrained.ner.CONLL03_NER_BERT_BASE_UNCASED_EN)
recognizer(testing)

الإخراج: بالنسبة للغة الإنجليزية ، تكون النتيجة غير مستقرة ، ولكن يتم حلها باستخدام الرمز المميز من NLTK.
[('SAP FICO', 'ORG', 1, 3)]




PullEnti


مكتبة C # لـ NER باللغة الروسية. في عام 2016 ، فازت بالمركز الأول في مسابقة الواقع EV 2016. في عام 2018 ، نقل المؤلف الرمز إلى Java و Python.
ربما يكون الحل الأجمل للغة الروسية.
بسرعة ، بعمق ، مع الاهتمام بالتفاصيل. القرار قائم على القاعدة ، مما يحد بشكل طبيعي من تطوره ، لكن استقلاليته وسرعته ونتائجه تسمح لنا بالأمل في تطوير المشروع.
يوجد غلاف ثعبان للمكتبة ، على الرغم من أنها تبدو "مهجورة".
from pullenti_wrapper.processor import (
    Processor,
    MONEY,
    URI,
    PHONE,
    DATE,
    KEYWORD,
    DEFINITION,
    DENOMINATION,
    MEASURE,
    BANK,
    GEO,
    ADDRESS,
    ORGANIZATION,
    PERSON,
    MAIL,
    TRANSPORT,
    DECREE,
    INSTRUMENT,
    TITLEPAGE,
    BOOKLINK,
    BUSINESS,
    NAMEDENTITY,
    WEAPON,
)

processor = Processor([PERSON, ORGANIZATION, GEO, DATE, MONEY])
text = russian_text
result = processor(text)
result.graph


انتاج:صورة

ناتاشا


صورة
ناتاشا ، يبدو أن هذا أحد مشاريع البرمجة اللغوية العصبية الرئيسية للغة الروسية. لديها تاريخ طويل ، وبدأت بحل قائم على القاعدة تم تطويره من خلال Yargy Parser الشهير ، والآن يحل مهام البرمجة اللغوية العصبية الرئيسية للغة الروسية: الترميز ، تجزئة الجملة ، lemmatization ، تطبيع العبارة ، التحليل ، وضع علامات NER ، استخراج الحقيقة.
from natasha import (
    Segmenter,
    MorphVocab,
    
    NewsEmbedding,
    NewsMorphTagger,
    NewsSyntaxParser,
    NewsNERTagger,
    
    PER,
    NamesExtractor,

    Doc
)

segmenter = Segmenter()
morph_vocab = MorphVocab()

emb = NewsEmbedding()
morph_tagger = NewsMorphTagger(emb)
syntax_parser = NewsSyntaxParser(emb)
ner_tagger = NewsNERTagger(emb)

names_extractor = NamesExtractor(morph_vocab)

doc = Doc(russian_text)

المخرجات: النتيجة ، للأسف ، ليست مستقرة ، على النقيض من القواعد المخصصة لـ Yargy Parser من نفس المطور ، ومع ذلك ، فإن المشروع يتطور بنشاط ، ويظهر نتيجة لائقة للاستخدام التجاري.
110 ,
LOC───
.
https://www.sobyanin.ru/ , 1 .
.51 ( :
LOC───────────────
, ) ?
ORG PER────────────
2107 47
24, .
ORG──
c
PER────────────────
10 1970 ,
─────────
-, . , 5/1 8 000 ( )
LOC──────────── PER─────────
00
LO
.

PER────────────
- .




فظة إهانة


الوحدة الأخيرة هي مشروع خاص ، لا يحظى بشعبية كبيرة ، مبني على قمة Spacy و Thinc ، ومع ذلك ، يستحق الانتباه إلى النهج المختار للهندسة المعمارية (التركيز على سهولة الاستخدام).
from nerd import ner
doc_nerd_d = ner.name(english_text)
text_label = [(X.text, X.label_) for X in doc_nerd_d]
print(text_label)


الناتج: من بين جميع المشاريع ، يبدو لي أن أكثر "متوازنًا" وملائمًا ، مع نتائج مقبولة وسهولة في الاستخدام هو ستانزا من StanfordNlp - عمل معظم اللغات خارج الصندوق ، والدراسة الأكاديمية عالية الجودة ودعم المجتمع العلمي للجامعة نفسها يجعل المشروع أكثر واعدة ، في رأيي . في المرة القادمة سوف أشارك تجربتي في العمل مع الحلول "المغلقة" وواجهة برمجة التطبيقات المقترحة لمعالجة اللغة الطبيعية. جميع الشفرات متاحة بواسطة Google Colab
[('7 days', 'DATE'), ('Indian', 'NORP'), ('PHP', 'ORG'), ('Laravel', 'GPE'), ('daily 4 hours', 'DATE'), ('Monday 27th Jan.', 'DATE'), ('Need SAP FICO', 'PERSON'), ('6 months', 'DATE'), ('10 days', 'DATE'), ('noon', 'TIME'), ('tomorrow', 'DATE')]







All Articles