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

قياس التشابه بين جملتين باستخدام تشابه جيب التمام cosine similarity باستخدام NLTK في بايثون

إياد أحمد

السؤال

Recommended Posts

  • 0

لايوجد دالة في  nltk تمكنك من حساب CS بين جملتين، لكن بإمكانك تحقيق ذلك من خلالها. كما نعلم فإن تشابه جيب التمام هو مقياس للتشابه بين متجهين غير صفريين لفضاء الجداء الداخلي الذي يقيس جيب التمام للزاوية بينهما. ويعبر عنه بالمعادلة التالية التي سنقوم بتحقيقها:

Similarity = (A.B) / (||A||.||B||)

حيث أن كل من A و B هما أشعة.
الكود:

# استيراد الوحدات اللازمة
from nltk.tokenize import word_tokenize # tokens لتقسيم النص إلأى وحدات
from nltk.corpus import stopwords # لحذف كلمات التوقف من الجمل
# نقوم بتحديد الجملتين
s1 ="I love programming in Python"
s2 ="I love programming in java"
# نقوم الآن باستخراج الوحدات من النصوص
s1_tokens = word_tokenize(s1)
s2_tokens = word_tokenize(s2)
# نقوم بحذف كلمات التوقف من النصوص
sw = stopwords.words('english')
l1 =[];l2 =[]
s1_tokens = {w for w in s1_tokens if not w in sw}
s2_tokens = {w for w in s2_tokens if not w in sw}
# تشكل مجموعة تحتوي على كلمات رئيسية لكلا السلسلتين
vector = s1_tokens.union(s2_tokens)
for w in vector:
	if w in s1_tokens: l1.append(1) # إنشاء شعاع
	else: l1.append(0)
	if w in s2_tokens: l2.append(1)
	else: l2.append(0)
c = 0
# الآن يمكننا تطبيق معادلة التشابه
for i in range(len(vector)):
		c+= l1[i]*l2[i]
# طباعة الناتج
print("similarity: ", c / float((sum(l1)*sum(l2))**0.5))

النتيجة:

similarity:  0.75

أي أن نسبة التشابه بين الجملتين تصل إلى 75% وفق هذا المقياس، وهي نتيجة منطقية.

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...