4.5.1. Probabilistic Model PM
Dalam proses perhitungan kemiripan, PM akan melakukan preprocessing
terhadap koleksi untuk menentukan relevan set. Dalam proses tersebut, PM akan mencari bobot tiap kata. Berdasarkan bobot tiap
kata, PM dapat menentukan bobot sementara dokumen. Bobot dokumen yang bernilai = 0,5 akan dianggap sebagai relevan. Dokumen tersebut
akan dimasukkan ke dalam vector dokumen.
public void hitungBobotPerkataVectorKataDasar vector, double N { for int i = 0; i vector.size; i++ {
double peluang = Math.logN + 0.5 double vector.elementAti.getDf + 0.5;
vector.elementAti.setPeluangKatapeluang; }
}
List Code 4. 21 List hitungBobotPerKata
public VectorDokumen getDokumenRelevanByQueryDokumen[] listDok, HashMapInteger, HashMapInteger, IndexingController hash, VectorKataDasar
vector, Query query { int[] idQs = query.generateQquery;
VectorDokumen dokVector = new VectorDokumen; for int i = 0; i listDok.length; i++ {
Dokumen dokumen = listDok[i]; int idDok = dokumen.getIdDok;
int jumlah = 0; double peluangKataPerDok = 0;
for int j = 0; j idQs.length; j++ { int idKataQ = idQs[j];
if hash.containsKeyidKataQ {
HashMapInteger, IndexingController hashD = hash.getidKataQ; if hashD.containsKeyidDok {
IndexingController idc = hashD.getidDok; peluangKataPerDok += getPeluangKatavector, idc.getIdKata;
jumlah++; } } }
dokumen.setJumlahKataRelevanjumlah; dokumen.setPeluangKataPerDokumenpeluangKataPerDok;
listDok[i] = dokumen; }
Arrays.sortlistDok; for int i = 0; i listDok.length; i++ {
Dokumen dok = listDok[i]; if dok.getJumlahKataRelevan 0 {
if dok.getPeluangKataPerDokumen = 0.5 { dokVector.adddok;
} } } this.dokumenRelevan = dokVector;
this.R = dokumenRelevan.size; return dokVector; }
List Code 4. 22 List getDokumenRelevanByQuery
Pada list 4.22, metode getDokumenRelevanByQuery memanggil metode getPeluangKatavector, idc.getIdKata, hal tersebut berfungsi
untuk mengambil nilai bobot kata yang telah dihitung sebelumnya. Proses yang terpenting dalam tahap ini adalah mengambil memasukkan dokumen
relevan ke dalam vector. Untuk menghitung kemiripan dibutuhkan metode untuk mencari nilai df pada dokumen relevan. Berikut metode untuk
mencari df pada dokumen relevan.
public double getDFRelevanVectorDokumen dokumens, HashMapInteger, HashMapInteger, IndexingController hash, int idKata {
double df = 0; Object[] o = dokumens.toArray;
for int i = 0; i o.length; i++ { Dokumen object = Dokumen o[i];
int id = object.getIdDok; if hash.containsKeyidKata {
if hash.getidKata.containsKeyid { df++;
} }
} return df;
}
List Code 4. 23 getDFRelevan Pencarian PM dilakukan dengan menjalankan metode similarity.
Metode ini yang akan menghitung serta mengurutkan bobot dokumen terhadap sebuah query. Berikut pemaparan metode similarity.
public LinkedListPM similarityVectorKataDasar vector, HashMapInteger, HashMapInteger, IndexingController hash, Dokumen[] listDok, double nKata, Query
query throws SQLException { pm = new PM;
pm.setPercentage0; pm.N = listDok.length;
pm.hitungBobotPerkatavector, int pm.N; VectorDokumen dokumens = pm.getDokumenRelevanByQuerylistDok, hash,
vector, query; int[] q = query.generateQquery;
PM[] pms = new PM[listDok.length]; for int i = 0; i listDok.length; i++ {
Dokumen d = Dokumen listDok[i]; int idDok = d.getIdDok;
double similarity = 0; double wtfidf = 0;
for int j = 0; j q.length; j++ {
double w = 0; int idQT = q[j];
if hash.containsKeyidQT { HashMapInteger, IndexingController hashD = hash.getidQT;
IndexingController idx = hashD.getidDok; if idx = null {
int indexKata = idx.getIdKata; double df = vector.elementAtindexKata - 1.getDf;
pm.ni = df; pm.ri = pm.getDFRelevandokumens, hash, indexKata;
double kiri = double pm.getRi + 0.5 pm.getR - pm.getRi + 0.5;
double kanan = double pm.getN - pm.getNi - pm.getR + pm.getRi + 0.5 pm.getNi - pm.getRi + 0.5;
w = Math.logkiri kanan; wtfidf += Math.loglistDok.length df;
} } else {w = 0; }
similarity += w; }
PM pmTemp = new PM; pmTemp.setDokumend;
pm.setPercentagepm.getPercentage + similarity; pmTemp.setSimilaritysimilarity;
pmTemp.setTfidfwtfidf; pms[i] = pmTemp;
} Arrays.sortpms;
int no = 1; LinkedListPM list = new LinkedListPM;
for int i = 0; i pms.length; i++ { PM pmT = pms[i];
pmT.setPercentagepmT.getSimilarity pm.getPercentage 100; pmT.setNono;
if pmT.getSimilarity 0 { list.addpmT;
no++; }
} return list;
}
List Code 4. 24 similarity PM
4.5.2. Vector Space Model VSM