Probabilistic Model PM Implementasi Proses

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