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

السؤال

Recommended Posts

  • 1
نشر

كما ذكرت يمكن استخدام WORDNET في NLTK فبشكل سطحي يمكننا القول أنه قاموس المرادفات، من حيث أنه يجمع الكلمات معاً بناءً على معانيها. وبشكل أكثر دقة يمكنك القول أنها قاعدة بيانات معجمية كبيرة للغة الإنجليزية. الأسماء والأفعال والصفات والظروف مجمعة في مجموعات من المرادفات المعرفية (synsets) ، كل منها يعبر عن مفهوم مميز.
عند استخدام الدالة  من wordnet وتمرير كلمة لها فإنها ستعطيك مجموعة الكلمات المترادفة synonymous التي تعبر عن نفس المفهوم للكلمة الممررة لها.

# wordnet نقوم أولاً باستيراد 
from nltk.corpus import wordnet
#  الآن إيجاد الكلمات المترادفة
syns = wordnet.synsets("good")
# يمكننا طباعة إحدى هذه الكلمات بالشكل التالي
print(syns[0].name())
# good.n.01
# ولطباعة الكلمة فقط
print(syns[0].lemmas()[0].name())
# good
# على الكلمة لتوليد جمل تحتوي هذه الكلمة examples يمكنك أيضاً استخدام الدالة 
print(syns[0].examples())
# ['for your own good', "what's the good of worrying?"]

الآن لتمييز المرادفات والمتضادات لكلمة ستكون lemmas هي المرادفات، وبعد ذلك يمكنك استخدام الدالة .antonyms() للعثور على المتضادات لل lemmas بالشكل التالي:

import nltk
from nltk.corpus import wordnet
synonyms = [] # قائمة سنضع فيها المرادفات
antonyms = []  # قائمة سنضع فيها المتضادات
# نقوم بالمرور على جميع مرادفات الكلمة
for syn in wordnet.synsets("good"):
    # هي مرادفة lemma كل 
    for l in syn.lemmas():
        # نضيفها
        synonyms.append(l.name())
        # نوجد المضاد لها ونخزنه
        if l.antonyms():
            antonyms.append(l.antonyms()[0].name())
print(set(synonyms))
"""
{'safe', 'effective', 'beneficial', 'dear', 'right', 'secure', 'unspoilt',
'in_effect', 'skilful', 'honorable', 'skillful', 'unspoiled', 'thoroughly',
'near', 'proficient', 'dependable', 'salutary', 'estimable', 'soundly', 'good',
'commodity', 'practiced', 'serious', 'goodness', 'honest', 'trade_good', 'full',
'upright', 'ripe', 'respectable', 'undecomposed', 'well', 'adept', 'in_force', 'expert', 'just', 'sound'}
"""
print(set(antonyms))
"""
{'evil', 'evilness', 'badness', 'ill', 'bad'}
"""

 

  • 0
نشر (معدل)

يمكنك كذلك استخدام lemma_names ، الكود التالي يوضح كيفية ايجاد المترادفات بسهولة:

for ss in wn.synsets('small'):
   print(ss.name(), ss.lemma_names())

ويكون الخرج عبارة عن مجموعة من ال sets تمثل المترادفات المتقاربة كالتالي:

small.n.01 ['small']
small.n.02 ['small']
small.a.01 ['small', 'little']
minor.s.10 ['minor', 'modest', 'small', 'small-scale', 'pocket-size',  'pocket-sized']
little.s.03 ['little', 'small']
small.s.04 ['small']
humble.s.01 ['humble', 'low', 'lowly', 'modest', 'small']    
...

وتستطيع كذلك التأكد من مدى قرب كلمتين من بعضهما بنفس الدالة ببساطة كالتالي:

#استدعاء المكتبات
import nltk
from nltk.corpus import wordnet    

first_word = wordnet.synset("Travel.v.01")
second_word = wordnet.synset("Walk.v.01")
print('Similarity: ' + str(first_word.wup_similarity(second_word)))

first_word = wordnet.synset("Good.n.01")
second_word = wordnet.synset("zebra.n.01")
print('Similarity: ' + str(first_word.wup_similarity(second_word)))

ويكون الخرج كالتالي:

Similarity: 0.6666666666666666
Similarity: 0.09090909090909091

لاحظ أن الأرقام السابقة تكون نسب مئوية (اذا قمت بضربها *100) لمدي تقارب كلمتين من بعضهما، وقد تحتاج لتلك الخطوة للتأكد من جودة المترادفات التي حصلت عليها سابقا.

تم التعديل في بواسطة Ahmed Sharshar

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...