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

السؤال

نشر

السلام عليكم 

احتاج لحساب التشابه الدلالي semantic similarity  بين نصين في لغة بايثون 

كيف استطيع استخراج الافعال من الجملة وقياس التشابة مع افعال الجملة الثانية وكذلك للاسماء والصفات وغيرها من اقسام الجمل 

على سبيل المثال تنفيذ المعادلة في كود بلغة بايثون 

similarity= sim verb+sim noun 

ارجو المساعدة 

Recommended Posts

  • 0
نشر (معدل)

يتم تنفيذ أغلب الأعمال القائمة علي تحليل النصوص في البرمجة بكتابة أكواد برمجية تحتوي على الخطوات المنطقية و بمساعدة تقنيات مثل RegEx او Regular expression يمكن الوصول إلي نتائج جيده جداً و ذلك يعتمد و بشكر كبير قوة شفرتك البرمجية.

تم التعديل في بواسطة zonasabri
  • 0
نشر

تتو فر العديد من المكتبات في بايثون للعمليات المختلفة التي من الممكن القيام بها ضمن مجال معالجة اللغات الطبيعية ومعالجة النصوص.

يوجد مكتبتين مهمتين: 

  • مجموعة أدوات اللغات الطبيعية (Natural Language Toolkit (NLTK:
    • وهي مكتبة مجانية مفتوحة المصدر، تتضمن المهام الأساسية في معالجة اللغات الطبيعية والنصوص من الحصول على الوحدات اللغوية (Tokenization) إلى التجذيع (stemming) وصولاً التنبؤ بأقسام الكلام (Part of Speech tagging) و الاستنتاج الدلالي (semantic reasoning) وغيرها العديد من المهام اللغوية.

ويمكن التثبيت بهذا الأمر:

pip install --user -U nltk

* ولكن تطلب المكتبة توفر المكتبة العددية لبايثون numpy، لذا في حال عدم توفرها مسبقا على الجهاز يجب تثبيتها:

pip install --user -U numpy

يمكن الاطلاع على الموقع الرسمي للمكتبة حيث يتوافر توثيق جيد لها.

 

  • مكتبة جينسم Gensim:
    • وهي مكتبة مجانية مفتوحة المصدر كذلك، تتضمن توابع تساعد على تحديد التشابه الدلالي فيما بين النصوص، 

   ويمكن التثبيت بهذا الأمر :

pip install -U gensim

* هذه المكتبة كذلك تتطلب توافر المكتبة العددية لبايثون numpyويمكن الاطلاع على الموقع الرسمي للمكتبة و حيث يتوافر توثيق جيد لها.

  • 0
نشر

بدايةً لا أتفق مع الإجابة، حيث أن RegEx (Regular expression) لن تفيدك في هكذا أمر.
بالنسبة لسؤالك الأول "حساب التشابه الدلالي semantic similarity  بين نصين": فهناك العديد من الأساليب، كل منها يعتمد على تكنيكات وخوارزميات معينة، وللحصول على نتيجة تشابه أفضل، يستخدم العديد من الباحثين التعلم العميق لتحسين العملية.هنا سأستخدم مكتبة difflib للحساب، وهي طريقة بسيطة جدًا للمبتدئين.

import difflib
# إنشاء دالة لحساب التشابه بين جملتين
def string_similar(s1, s2):
	return difflib.SequenceMatcher(None, s1, s2).quick_ratio()
# بفرض لدينا الجملتين التاليتين
s1 = 'i love this book'
s2 = 'this book is my favorite'
# يمكن حساب التشابه بينهما من خلال استدعاء الدالة السابقة:
print (string_similar(s1, s2))
#  0.75
# أي أن نسبة التشابه هي 75 في المئة

يمكنك أيضاً استخدام مكتبة genism:

import gensim
# الخاص بتمثيل الكلمات word2vec تحميل نموذج 
model = gensim.models.KeyedVectors.load_word2vec_format('yelp-2013-embedding-200d.txt', binary=False)

يمكننا الحصول على التمثيل (أو التضمين embedding) لكل كلمة في الجملة من ملف word2vec (نموذج تم إطلاقه من قبل الباحث ميكلوف في سنة 2013 وهو نموذج شهير جداً لتمثيل الكلمات). وبعد ذلك نكون حصلنا على جملة من الكلمات المُمثلة ضمن أشعة تعكس معناها الدلالي (جملة من التضمينات).
بفرض لدينا الجملتين التاليتين:

    sen_1 = "i love this book"
    sen_2 = 'this book is my favorite'

الآن كيف نحصل على جملة من التضمينات؟ هناك عدة طرق يمكنك التفكير فيها، سأقترح أن نقوم بعمل average لكل تضمينات الكلمات في الجملة:

sen_1_words = [w for w in sen_1.split() if w in model.vocab]
sen_2_words = [w for w in sen_2.split() if w in model.vocab]
sim = model.n_similarity(sen_1_words, sen_2_words)
print(sim)
# 0.839574928046
# أي متشابهتين بنسبة 83 بالمئة
# وهي نتيجة أفضل من النتييجة التي حصلنا عليها من خلال المكتبة السابقة


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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...