يعد هذا تطبيقًا أساسيًا لمحرك بحث عن الملفات يعتمد على لغة بايثون للإجابة على الاستعلامات في الملفات النصية على النظام المحلي. لقد استخدمنا "ترجيح مصطلح tf-idf" و"تشابه جيب التمام" لترتيب مدى ملاءمة المستندات المطابقة. يتم حساب حسابات tf-idf مسبقًا مما يجعل البحث أسرع كثيرًا. أيضًا لتسريع البحث تم استخدام Stemming (Porter Stemmer). يتم توفير واجهة مستخدم أساسية باستخدام مكتبة Python's Tkinter.
python2 createIndex_tfidf.py stopwords.dat testIndex.dat titleIndex.dat
سيتم تشغيل createIndex_tfidf.py مرة واحدة فقط لحساب قيم tdf-idf في المجموعة
python2 queryIndex_tfidf.py stopwords.dat testIndex.dat titleIndex.dat
بشكل عام، يتم إنشاء ثلاثة ملفات مختلفة في هذه الخطوة:
titleIndex.dat
يخزن هذا الملف معرف المستند الفريد (معرف المستند) الذي تم تعيينه لكل مستند في المجموعة.
testIndex.dat
في هذا يتم إنشاء ملف فهرس (يُعرف أيضًا باسم بنية بيانات الفهرس المقلوب) والذي يحتوي على معلومات حول جميع المصطلحات الفريدة (باستثناء كلمات الإيقاف) التي تظهر في جميع المستندات. يتم منح كل مستند معرفًا فريدًا يبدأ من 0 كما هو مخزن في فهرس العنوان. دات. يتم تخزين المعلومات الخاصة بالمصطلح في ملف الفهرس كما يلي: term|docID0:pos1,pos2;docID1:pos3,pos4,pos5;…..|tf0,tf1,tf2...|idf هنا tf0,tf1,tf2 يمثل تكرار المصطلح في docID0 وdocID1 وdocID2 على التوالي. يمثل idf تردد المستند العكسي ويمثل pos1 موضع المصطلح في المستند المعني وهكذا.
خطوط.dat
يقوم هذا الملف بتخزين المعلومات حول الأسطر التي يوجد بها المصطلح في المستندات المختلفة. يتم تمثيل معلومات هذا السطر على النحو التالي: term|docID0:line1,line2;docID1:line3,line4,line5
قبل إنشاء هذه الملفات، يتم فحص جميع مصطلحات المستندات في قائمة كلمات الإيقاف. إذا ظهر مصطلح في كلمات الإيقاف، فسيتم تخطيه وإلا فسيتم تخزين معلوماته في هذه الملفات أعلاه. أيضًا، كل مصطلح ينبع من Porter Stemmer قبل إضافته إلى الفهرس.
في هذا، أولاً وقبل كل شيء، يتم تخزين جميع المعلومات من الملفاتlines.dat وtitleIndex.dat وtestIndex.dat مرة أخرى باستخدام القاموس في Python.
الآن، الأنواع المختلفة للاستعلامات المدعومة هي:
استعلامات كلمة واحدة (OWQ) هذا استعلام بمصطلح واحد ومخرجاته عبارة عن قائمة من المستندات التي تحتوي على المصطلح المطلوب بالإضافة إلى أرقام الأسطر حيث يوجد المصطلح في المستند المعني.
استعلامات الكلمات المتعددة (MWQ) الإدخال في MWQ عبارة عن سلسلة من الكلمات، والإخراج هو قائمة المستندات التي تحتوي على أي من مصطلحات الاستعلام مع أرقام الأسطر.
استعلامات العبارة (PQ) الإدخال في PQ هو مرة أخرى سلسلة من الكلمات، والمستندات المطابقة هي تلك التي تحتوي على جميع مصطلحات الاستعلام بالترتيب المحدد.
الآن بعد أن عثرنا على قائمة المستندات التي يوجد بها الاستعلام، فقد حان الوقت لترتيبها. يعتمد نظام التصنيف الذي استخدمناه هنا على tf-idf. Tf-Idf هو نظام ترجيح يعين لكل مصطلح في المستند وزنًا بناءً على تردد المصطلح (tf) وتكرار المستند العكسي (idf). تعتبر المصطلحات ذات درجات الوزن الأعلى أكثر أهمية. إنها واحدة من أكثر أنظمة الترجيح شيوعًا في استرجاع المعلومات.
تكرار المصطلح (tf) للمصطلح خاص بالوثيقة. إنه في الأساس عدد مرات ظهور المصطلح t في المستند D. ومن المنطقي تمامًا اختيار tf كمعلمة لأنه كلما ظهر المصطلح بشكل أكبر في المستند، يصبح أكثر أهمية. يمكننا تمثيل مستند بواسطة متجه حجمه يساوي الرقم. من المصطلحات الفريدة في المستند وتشير كل قيمة إلى عدد المصطلحات في المستند المحدد. يُعرف تمثيل المستندات كمتجهات في مساحة متجهة مشتركة بنموذج الفضاء المتجه وهو أمر أساسي جدًا لاسترجاع المعلومات. ولكن هنا عيب واحد. مع زيادة حجم المستند، سيزداد وزن tf مع زيادة تكرار المصطلحات. لذا فإن المستند الذي يحتوي على نفس المعلومات الموجودة في مستند آخر، والذي تم نسخه أكثر من مرة، سيعتبر أكثر أهمية. للقضاء على هذا العيب، سنقوم بتقسيم كل قيمة في المتجه على معيارها بحيث يصبح المتجه متجهًا للوحدة.
لا يمكننا فقط استخدام تكرارات المصطلح لحساب وزن المصطلح في المستند، لأن tf يعتبر جميع المصطلحات ذات أهمية متساوية. ومع ذلك، فإن بعض المصطلحات تحدث بشكل نادر وتكون أكثر تمييزًا من غيرها. إذا استخدمنا tf كمقياس للتصنيف، ثم إذا بحثنا في موضوع مثل الموجات الصوتية، فقد ينتهي بنا الأمر بالحصول على الكثير من المستندات التي تحتوي على موجات ضوئية وموجات أخرى، حيث أن تكرار المصطلح هو المعلمة الوحيدة.
للتخفيف من هذا التأثير، نستخدم تردد الوثيقة العكسي. تكرار المستند للمصطلح هو في الأساس عدد المستندات التي تحتوي على المصطلح. لذا فإن تكرار المستند العكسي (idf) للمصطلح هو عدد المستندات الموجودة في المجموعة مقسومًا على تكرار المستند للمصطلح. بشكل عام، وجد أن عامل idf كبير جدًا ويتم الحصول على نتائج أفضل إذا استخدمنا السجل (idf). نظرًا لأن السجل دالة متزايدة، فيمكننا استخدامها دون إعاقة نتائجنا.
لقد قمنا بتعريف كل من tf وidf، والآن يمكننا دمجهما لإنتاج النتيجة النهائية للحد t في الوثيقة d. سنقوم مرة أخرى بتمثيل المستند كمتجه، حيث يمثل كل إدخال وزن tf-idf للمصطلح المقابل في المستند. إن وزن tf-idf للمصطلح t في المستند d هو ببساطة ضرب tf الخاص به في idf الخاص به.
الآن بعد أن قمنا ببناء متجهات كل مستند بناءً على وزن tf-idf. لقد حان الوقت للإجابة على استعلام باستخدام متجهات المستند المحددة. أولا وقبل كل شيء، سوف نقوم بإنشاء متجه الاستعلام نفسه على أساس مماثل كما أنشأنا متجه المستند، أي على أساس درجة tf-idf (مع الأخذ في الاعتبار الاستعلام عن المستند نفسه). الآن بعد أن أصبح لدينا متجه الاستعلام الخاص بنا جاهزًا، سنجد جميع المستندات التي يوجد بها استعلامنا. الآن سنأخذ المنتج النقطي لمتجه الاستعلام ومتجه المستند الذي يوجد فيه الاستعلام. كلما كان المنتج النقطي أكثر تشابهًا، كان متجه الاستعلام مع متجه المستند مما يعني أن الزاوية بين متجه المستند ومتجه الاستعلام تكون صغيرة. تسمى هذه التقنية لإيجاد التشابه بين الاستعلام والمستند بتشابه جيب التمام.