Ini adalah implementasi dasar mesin pencari file berbasis python untuk menjawab pertanyaan dalam file teks di sistem lokal. Kami telah menggunakan "bobot istilah tf-idf" dan "kesamaan kosinus" untuk menentukan peringkat relevansi dokumen yang cocok. Perhitungan tf-idf telah dihitung sebelumnya sehingga pencarian menjadi jauh lebih cepat. Juga untuk mempercepat pencarian Stemming (Porter Stemmer) telah digunakan. Antarmuka Pengguna dasar menggunakan perpustakaan Tkinter Python disediakan.
python2 createIndex_tfidf.py stopwords.dat testIndex.dat titleIndex.dat
createIndex_tfidf.py hanya akan dijalankan sekali untuk menghitung nilai tdf-idf pada korpus
python2 queryIndex_tfidf.py stopwords.dat testIndex.dat titleIndex.dat
Secara keseluruhan tiga file berbeda dibuat pada langkah ini:
judulIndex.dat
File ini menyimpan docId unik (id dokumen) yang ditetapkan untuk setiap dokumen di korpus.
tesIndex.dat
Dalam hal ini file indeks dibuat (juga dikenal sebagai struktur data indeks terbalik) yang berisi informasi tentang semua istilah unik (kecuali stopwords) yang muncul di semua dokumen. Setiap dokumen diberi id unik mulai dari 0 seperti yang disimpan dalam titleIndex. itu. Informasi mengenai suatu term disimpan dalam file indeks sebagai berikut: term|docID0:pos1,pos2;docID1:pos3,pos4,pos5;…..|tf0,tf1,tf2...|idf Here tf0,tf1,tf2 mewakili frekuensi istilah istilah di docID0,docID1,docID2 masing-masing. idf mewakili Frekuensi Dokumen Terbalik dan pos1 mewakili posisi istilah dalam masing-masing dokumen dan seterusnya.
garis.dat
File ini menyimpan informasi tentang baris-baris di mana istilah tersebut ada dalam berbagai dokumen. Informasi baris ini direpresentasikan sebagai : term|docID0:line1,line2;docID1:line3,line4,line5
Sebelum pembuatan file-file ini, semua istilah dalam dokumen diperiksa di daftar stopwords. Jika suatu istilah muncul di stopwords maka istilah tersebut dilewati, jika tidak maka informasinya akan disimpan dalam file-file di atas. Selain itu, setiap istilah berasal dari Porter Stemmer sebelum ditambahkan ke indeks.
Dalam hal ini, pertama-tama, semua informasi dari file baris.dat,titleIndex.dat dan testIndex.dat disimpan kembali menggunakan kamus dengan Python.
Sekarang, berbagai jenis Kueri yang didukung adalah:
Kueri Satu Kata (OWQ) Ini adalah kueri istilah tunggal dan outputnya berupa daftar dokumen yang berisi istilah yang ditanyakan beserta nomor baris di mana istilah tersebut ada di masing-masing dokumen.
Kueri Multi Kata (MWQ) Masukan dalam MWQ adalah rangkaian kata, dan keluarannya adalah daftar dokumen yang berisi istilah kueri beserta nomor barisnya.
Kueri Frasa (PQ) Masukan dalam PQ juga merupakan rangkaian kata, dan dokumen yang cocok adalah dokumen yang berisi semua istilah kueri dalam urutan yang ditentukan.
Sekarang kita telah menemukan daftar dokumen yang berisi kueri, sekarang saatnya untuk menentukan peringkatnya. Skema pemeringkatan yang kami gunakan di sini didasarkan pada tf-idf. Tf-Idf adalah skema pembobotan yang memberikan bobot pada setiap term dalam dokumen berdasarkan frekuensi term (tf) dan frekuensi invers dokumen (idf). Istilah dengan skor bobot lebih tinggi dianggap lebih penting. Ini adalah salah satu skema pembobotan paling populer dalam Pengambilan Informasi.
Frekuensi istilah (tf) suatu istilah bersifat spesifik dokumen. Ini pada dasarnya adalah jumlah kemunculan istilah t dalam dokumen D. Cukup logis untuk memilih tf sebagai parameter karena semakin banyak istilah yang muncul dalam dokumen, maka semakin penting. Kita dapat merepresentasikan suatu dokumen dengan vektor yang ukurannya sama dengan no. istilah unik dalam dokumen dan setiap nilai menunjukkan jumlah istilah dalam dokumen tertentu. Representasi dokumen sebagai vektor dalam ruang vektor umum dikenal sebagai model ruang vektor dan sangat mendasar dalam pengambilan informasi. Namun ada satu kelemahannya. Seiring bertambahnya ukuran dokumen, bobot tf akan meningkat seiring dengan meningkatnya frekuensi istilah. Jadi suatu dokumen yang memuat informasi yang sama dengan dokumen lain, disalin lebih dari satu kali akan dianggap lebih penting. Untuk menghilangkan kelemahan ini kita akan membagi setiap nilai dalam suatu vektor dengan normanya sehingga vektor tersebut menjadi vektor satuan.
Kita tidak bisa hanya menggunakan frekuensi term untuk menghitung bobot suatu term dalam dokumen, karena tf menganggap semua term sama pentingnya. Namun, beberapa istilah lebih jarang muncul dan lebih diskriminatif dibandingkan istilah lainnya. Jika kita hanya menggunakan tf sebagai ukuran untuk menentukan peringkat, maka jika kita mencari topik seperti gelombang suara, kita mungkin akan mendapatkan banyak dokumen yang berisi gelombang cahaya dan gelombang lainnya, karena frekuensi istilah adalah satu-satunya parameter.
Untuk mengurangi dampak ini, kami menggunakan frekuensi dokumen terbalik. Frekuensi dokumen suatu istilah pada dasarnya adalah jumlah dokumen yang memuat istilah tersebut. Jadi invers dokumen frekuensi (idf) suatu term adalah jumlah dokumen dalam korpus dibagi dengan frekuensi dokumen suatu term. Secara umum ditemukan bahwa faktor idf cukup besar dan hasil yang lebih baik diperoleh jika kita menggunakan log(idf). Karena log adalah fungsi yang meningkat, kita dapat menggunakannya tanpa mengganggu hasil kita.
Kita telah mendefinisikan tf dan idf, dan sekarang kita dapat menggabungkan keduanya untuk menghasilkan skor akhir dari istilah t dalam dokumen d. Kami akan kembali merepresentasikan dokumen sebagai vektor, dengan setiap entri menjadi bobot tf-idf dari istilah terkait dalam dokumen. Bobot tf-idf suatu suku t dalam dokumen d hanyalah perkalian tfnya dengan idfnya.
Sekarang kita telah membangun vektor setiap dokumen berdasarkan bobot tf-idf. Saatnya menjawab pertanyaan dengan menggunakan vektor dokumen yang diberikan. Pertama-tama kita akan membuat vektor kueri itu sendiri dengan dasar yang sama seperti kita membuat vektor dokumen, yaitu berdasarkan skor tf-idf (mengingat kueri dokumen itu sendiri). Sekarang setelah vektor kueri kita siap, kita akan menemukan semua dokumen yang berisi kueri kita. Sekarang kita akan mengambil perkalian titik dari vektor kueri dan vektor dokumen di mana kueri tersebut ada. Semakin tinggi perkalian titiknya semakin mirip vektor query dengan vektor dokumen yang berarti sudut antara vektor dokumen dan vektor query semakin kecil. Teknik menemukan kesamaan antara kueri dan dokumen disebut kesamaan kosinus.