اذهب إلى المحتوى

السؤال

نشر

أريد طريقة فعالة (ذات تعقيد زمني مقبول) لاستخراج الأسماء Nouns من ملف نصي؟
لقد كتبت الكود التالي لكنه كما تلاحظون يستخدم الحلقات المتداخلة:

import nltk
text = open(path).read()
all_nouns = []
for sentence in nltk.sent_tokenize(text):
     for w,post in nltk.pos_tag(nltk.word_tokenize(str(sentence))):
         if (post == 'NNPS' || pos == 'NNS' || post == 'NNP' || post == 'NN'):
             all_nouns.append(w)

 

Recommended Posts

  • 0
نشر

يمكنك القيام بذلك بالشكل التالي، وبتعقيد خطي O(n) كما يلي:

import nltk
text = '''Natural language processing (NLP) is a field of computer science, artificial intelligence, and computational linguistics concerned with the inter
actions between computers and human (natural) languages..'''
# تابع لاختبار فيما إذا كانت كلمة ما هي اسم
is_noun = lambda pos: pos[:2] in ['NN','NNP','NNS','NNPS']
# تقسيم النص إلى كلمات
tokenized = nltk.word_tokenize(text)
# استخراج الأسماء
# سنستخدم حلقة واحدة فقط
nouns = [word for (word, pos) in nltk.pos_tag(tokenized) if is_noun(pos)] 
print (nouns)

كما تجد الملاحظة إلى أن استخدام دوال مثل append و insert يعتبر خيار أبطأ، لذا من الأفضل تجنبها.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...