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

حساب التشابه بين ملفين نصيين بخوارزميّة تشابة جيب التّمام calculating similarity between text file by cosine

اذهب الى الأسفل

حساب التشابه بين ملفين نصيين بخوارزميّة تشابة جيب التّمام calculating similarity between text file by cosine  Empty حساب التشابه بين ملفين نصيين بخوارزميّة تشابة جيب التّمام calculating similarity between text file by cosine

مُساهمة من طرف أحمد مناع السبت مارس 19, 2022 10:08 am

أهلا بكم


في هذا المقال سوف نتعرّف على أفضل الطرق المستخدمة في البحث عن المستندات ذاتِ العلاقة و هي خوارزميّة تشابه-جيب التّمام


المحتويات :

المقدّمة
تعريف خوارزمية  تشابه-جيب التّمام(cosine Similarity)
المفهوم الرّياضي لتشابه-جيب التّمام Math Behind Cosine Similarity
تطبيق عمليّ على بيانات رقميّة
تطبيق عمليّ على بيانات نصيّة

المقدمة :


يُستخدم خوارزمية تشابه-جيب التّمام في علم البيانات على سبيل المثال لا الحصر مع البيانات النصيّة  لمعرفة مدى تطابق النّصوص مع بعضها البعض في عمليات البحث، وهناك العديد من محرّكات البحث مثل غوغل (google) و بينغ (Bing) التي تستخدم هذا المقياس في إيجاد الكلمات المطابقة في النصوص، بالإضافة إلى استخدامه في عملياتِ استرجاعِ البيانات واكتشاف عمليات السّرقات الأدبيّة والعديد من الاستخدامات الأخرى.وفي هذا المقال عزيزي القارئ سوف نتطرق بالشرح المفصل ل خوارزميّة تشابه-جيب التّمام لحساب التشابهة بين البيانات النصية و الرقمية


تعريف ماهية تشابه-جيب التّمام cosine Similarity


تشابه-جيب التّمام هو عبارةٌ عن مقياسٍ من خلاله نستطيع أن نحدّد مدى تطابق المستندات بغضّ النظر عن حجمها، ورياضيّاً هو عبارة عن مقياس جيب تمام الزّاوية cosine بين متجهَين في فضاءٍ ثنائيّ الأبعاد، ويمكن أن يكون هذان المتجهَان عبارةً عن بياناتٍ رقميّة أو نصيّة حيث يتم التعامل مع كائنات البيانات في مجموعة البيانات على أنها متجه

المفهوم الرّياضي لتشابه-جيب التّمام Math Behind Cosine Similarity


الشّكل التالى يوضّح الزّاوية بين متجهَين في فضاءٍ ثنائيّ الأبعاد.و تكون الزّاوية مقياساً للتشابه بين متجهَين، إذا كانت قيمةُ جيب التّمام تساوي 1 ذلك يعني أنّ المتجهَين متطابقان وأنّ الزّاوية بينهما تساوي صفراً، وأمّا إذا كانت قيمةُ جيب التّمام أصغرَ من الواحد فهذا يحدّد مدى تقاطع هذَين المتجهَين، وبالتالي نسبياً مدى التشابه بين كلمة البحث والبيانات.

حساب التشابه بين ملفين نصيين بخوارزميّة تشابة جيب التّمام calculating similarity between text file by cosine  SBisy6H4Bu0hiyPTAozew3hvSBv0XTXOkdSKweDL9DoRv667o24EHOXrrPDezBhKcNgP6XsfsfsPe4NCQO9g4W5v0-ZWo-tZgumHuF-ZgMt4NKC99-MiTeJn4zWz1nwcTrKX9DPp

المعادلة الرّياضية لحساب تشابه-جيب التّمام هي:

حساب التشابه بين ملفين نصيين بخوارزميّة تشابة جيب التّمام calculating similarity between text file by cosine  14218af5dab93f1710c591960e60bbd0
الكود:
Cos(A, B) = A . B / ||A|| * ||B||

حيث أنّ :
  • A ,B هما عبارةٌ عن المتجهَين الذَين نبحث عن تشابهٍ بينهما
  • || A || و || B || = طول المتجهين "A" و "B".
  • || V || * || A || = حاصل الضرب الاتجاهي للمتجهين "A" و "B".



و بالنظر للمعادلة السابقة نحد أن مقايس جيب التمام تساوي البسط حاصلَ ضربِ عناصر المتجهَين مقسوما على المقام هو حاصلُ ضرب الجذر التربيعيّ لمجموع مربعات عناصر المتّجهَين

تطبيق عمليّ على بيانات رقميّة


مثال 1 : أوجد التشابة بين المتجهين X , Y رياضيا على فرض أن المتجهة X
الكود:
x = { 3, 2, 0, 5 }

و المتجهة Y
الكود:
y = { 1, 0, 0, 0 }

الحل رياضيا :
الكود:
// حاصل ضرب عناصر المتجهين
x . y = 3*1 + 2*0 + 0*0 + 5*0 = 3

// مجموع الجذر التربيعى للمتجهة X
||x|| = √ (3)^2 + (2)^2 + (0)^2 + (5)^2 = 6.16

// مجموع الجذر التربيعى للمتجهة Y
||y|| = √ (1)^2 + (0)^2 + (0)^2 + (0)^2 = 1

// قسمة حاصل ضرب عناصر المتجهين على حاصل ضرب الجذر التربيعى لعناصر الاتجاهين
∴ Cos(x, y) = 3 / (6.16 * 1) = 0.49


وتكون النّتيجة كما في التالي: 0.49 تقريبا حيث أن قيمة تشابه جيب التمام محصورة بين [-1،1] ، وكلما كانت القيمة أكبر من سالب واحد ، كلما كانت أكثر تشابهًا وان كانت واحد صحيح كانت التشابه مطابقا تماما

الحل باستخدام شفرة جافا 

الكود:


import java.util.Arrays;
import java.util.List;

public class ComputerDecision {

    public ComputerDecision() {
    }

    // طريقة لحساب تشابة جيب التمام
    public double cosineSimilarity(List<Integer> vector1, List<Integer> vector2) {
        double result = 0;
        result = pointMulti(vector1, vector2) / sqrtMulti(vector1, vector2);

        return result;
    }

    // طريقة لحساب ضرب الجذر التربعيى
    private double sqrtMulti(List<Integer> vector1, List<Integer> vector2) {
        double result = 0;
        result = squares(vector1) * squares(vector2);
        result = Math.sqrt(result);
        return result;
    }

    //طريقة لحساب مجموع مربعات العناصر للمتجهة
    private double squares(List<Integer> vector) {
        double result = 0;
        for (Integer integer : vector) {
            result += integer * integer;
        }
        return result;
    }

    // طريقة لحساب حاصل ضرب كلا الاتجاهين
    private double pointMulti(List<Integer> vector1, List<Integer> vector2) {
        double result = 0;
        for (int i = 0; i < vector1.size(); i++) {
            result += vector1.get(i) * vector2.get(i);
        }
        return result;
    }

    public static void main(String[] args) {

        // انشاء المتجه الاول
        List<Integer> vectorX = Arrays.asList(3,2,0,5);
        // انشاء المتجهة الثاني
        List<Integer> vectorY = Arrays.asList(1,0,0,0);

        // انشاء كائن جديد من الفئة
 ComputerDecision obj = new ComputerDecision();
        
        // طباعة الناتج وذلك بتنفيذ طريقة حساب جيب التمام
        System.out.println("Cosine Similarity between X and Y:"+obj.cosineSimilarity(vectorX,vectorY));
    }
}

الاخراج :
Cosine Similarity between X and Y:0.48666426339228763


و الاختلاف فى النتيجة بسبب التقريب على الالة الحاسبة

تطبيقٌ عمليّ على بيانات نصيّة


لتطبيق حساب تشابه-جيب التّمام على البيانات النصية يجب تحويل المستندات إلى متّجهات رقميّة وذلك باتعباع الخطوات التالية :

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

مثال لنفترض لدى النصين التاليين :

الكود:
String txt1="i love egypit"
String txt2="i love egy"

والآن عزيزي القارئ في هذا المثال سوف نستخدم النص الاول txt1 كالاستعلام(query) الذي نبحث عن وجود متشابهٍ له في مجتوي النص الثاني txt2 باتباع الخطوات السابقة :

سرد ​​جميع الكلمات الموجودة فى المستند أو النص
الكود:
{i ,love ,egypit,egy}

حساب تردد كل كلمة فى المستند أو النص

الكلمةiloveegypitegy
النص الاول 1110
النص الثاني1101

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
أحمد مناع
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 1108
النقاط : 202034
التقيم : 144
الدولة : مصر
الجنس : ذكر

https://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

حساب التشابه بين ملفين نصيين بخوارزميّة تشابة جيب التّمام calculating similarity between text file by cosine  Empty رد: حساب التشابه بين ملفين نصيين بخوارزميّة تشابة جيب التّمام calculating similarity between text file by cosine

مُساهمة من طرف أحمد مناع الخميس مارس 14, 2024 3:20 am

السلام عليكم ورحمه الله وبركاته
أحمد مناع
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 1108
النقاط : 202034
التقيم : 144
الدولة : مصر
الجنس : ذكر

https://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

ََ

مواضيع ذات صلة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى