4.5.1.1. Operator AND
Sebelum mengoperasikan operator AND, perlunya mencari bobot dari masing-masing term yang telah didapat dari kesesuaian dengan query. Berikut ini
pada kode program 4.27 implementasi dari pengambilan bobot :
Kode Program 4.27 Implementasi Pencarian Bobot W_ij
public ListString TF_IDF_ANDControl koneksi, InvertedIndexBasic ii, String cari {
try { StringTokenizer token2 = new StringTokenizercari, .,-
[]{}|-+=?:;; while token2.hasMoreTokens {
String nxtTkn2 = token2.nextToken; listTerm.addnxtTkn2;
Term_Pasal cr1 = koneksi.CariIdTermnxtTkn2; String ID_TERM = cr1.getId_term_pasal;
cr DF Term_Pasal cr2 = koneksi.TotalDFJnxtTkn2;
Double DF = cr2.getDf_j; listDF.addDF;
String test = ii.printSearch2nxtTkn2; if test = null {
StringTokenizer tokenTest = new StringTokenizertest, .,-[]{}|-+=?:;txt;
while tokenTest.hasMoreTokens { String dok = tokenTest.nextToken.toString;
Indeks_Pasal cr3 = koneksi.cariW_ij2ID_TERM, dok;
Double W_ij = cr3.getW_ij; list_wij.addW_ij;
listDok.adddok; }
} }
hasilAND = new InvertedIndexBasic.ANDlistTerm, listDF, list_wij, listDok;
System.out.println; } catch SQLException ex {
Logger.getLoggerOperatorAND_OR.class.getName.logLevel.SEVERE, null, ex;
} return hasilAND;
}
Pada kode program 4.28 di bawah ini berfungsi untuk menjumlahkan Wij berdasarkan query dan mengurutkan dokumen pasal berdasarkan Wij secara
descending :
public ListString ANDLinkedListString listTERM, LinkedListDouble list_DF, LinkedListDouble list_Wij,
LinkedListString list_dok { ListString hasilAkhir = new ArrayList;
MapString, Double mp0 = new HashMap; MapString, Double mp = new HashMap;
System.out.printlnlist term size : + listTERM.size; System.out.printlnlist DF size : + list_DF.size;
System.out.printlnlist wij size : + list_Wij.size; System.out.printlnlist dok size : + list_dok.size;
for int i = 0; i listTERM.size; i++ { String currentTerm = listTERM.geti;
Double currentDF = list_DF.geti; mp.putcurrentTerm, currentDF;
} this.sortByValuesAscendingmp;
int sizeListTermOrdered = listTermOrdered.size; System.out.printlnSize Term Ordered : +
sizeListTermOrdered; ListString listA = new ArrayList;
ListString listB = new ArrayList; ListString listC = new ArrayList;
ListDouble listA1 = new ArrayList; ListDouble listB1 = new ArrayList;
int ambil = 0; while sizeListTermOrdered 0 {
if ambil == 0 { for int j = 0; j 2; j++ {
if j == 0 { String termORdered = listTermOrdered.getj;
for int i = 0; i listTERM.size; i++ { if listTERM.geti.equalstermORdered {
indekDF1 = i; dDF1 = list_DF.geti;
} }
} else { String termORdered = listTermOrdered.getj;
System.out.printlnTerm ke- + j + = + termORdered;
for int i = 0; i listTERM.size; i++ { if listTERM.geti.equalstermORdered {
indekDF2 = i; System.out.printlnindekDF2 putaran1
: + indekDF2; dDF2 = list_DF.geti;
System.out.printlnisi DF2 putaran 1 : + dDF2;
} }
} }
ambil = ambil + 2; sizeListTermOrdered = sizeListTermOrdered - ambil;
if indekDF1 = 0 { for int i = 0; i indekDF1; i++ {
nilaiDF1 = list_DF.geti; countDF1 = countDF1 + nilaiDF1
} } else if indekDF1 == 0 {
countDF1 = 0; }
if indekDF2 = 0 { for int i = 0; i indekDF2; i++ {
nilaiDF2 = list_DF.geti; countDF2 = countDF2 + nilaiDF2;
} } else if indekDF2 == 0 {
countDF2 = 0; }
int batasA = int countDF1 + dDF1; String idDok;
Double wij_; for int i = int countDF1; i batasA; i++ {
idDok = list_dok.geti; listA.addidDok;
wij_ = list_Wij.geti; listA1.addwij_;
}
System.out.printlnlist A : + listA; int batasB = int countDF2 + dDF2;
String idDok2; Double wij2_;
for int i = int countDF2; i batasB; i++ { idDok2 = list_dok.geti;
listB.addidDok2; wij2_ = list_Wij.geti;
listB1.addwij2_; }
System.out.printlnlist B : + listB; }
else if ambil 0 { countDF2 = 0; hapus jmlh countDF putaran awal
listB.removeAlllistB; for int j = ambil; j ambil + 1; j++ {
String termORdered = listTermOrdered.getj;
for int i = 0; i listTERM.size; i++ { if listTERM.geti.equalstermORdered {
indekDF2 = i; dDF2 = list_DF.geti;
} }
} ambil = ambil + 1;
sizeListTermOrdered = sizeListTermOrdered - 1; System.out.printlnsizeOrder saat ini : +
sizeListTermOrdered; if indekDF2 0 {
for int i = 0; i indekDF2; i++ {
nilaiDF2 = list_DF.geti; countDF2 = countDF2 + nilaiDF2;
} } else if indekDF2 == 0 {
countDF2 = 0; }
int batasB = int countDF2 + dDF2; String idDok2;
Double wij2_; for int i = int countDF2; i batasB; i++
{ idDok2 = list_dok.geti;
listB.addidDok2; wij2_ = list_Wij.geti;
listB1.addwij2_; }
System.out.printlnlist B : + listB; }
listC = listA; System.out.printlnlist C : +listC
listA = this.intersectionlistA, listB; System.out.printlnintersection : + listA;
} penentuan urutan berdasarkan bobot wij :
Double Wij_C = 0.0, Wij_B = 0.0, TotalWij; String A, B, C;
System.out.printlnlistA.size : +listA.size; for int a = 0; a listA.size; a++ {
A = listA.geta; System.out.printlnA : + A;
for int c = 0; c listC.size; c++ { C = listC.getc;
if C.equalsA { Wij_C = listA1.getc;
break; }
}
Kode Program 4.28 Implementasi Pengurutan Dokumen Pasal Berdasarkan W_ij
Pada kode program 4.28 terdapat pemanggilan method intersection yang berfungsi untuk pemotongan pada posting list yang terdapat dikedua list yang
berbeda. Berikut ini pada kode program 4.29 merupakan uraian dari method intersection
:
Kode Program 4.29
Implementasi Intersection
for int b = 0; b listB.size; b++ { B = listB.getb;
if B.equalsA {
Wij_B = listB1.getb; break;
} }
TotalWij = Wij_C + Wij_B; System.out.printlnTotalWij : + TotalWij;
mp0.putA, TotalWij; }
hasilAkhir = sortByValuesDescendingmp0; return hasilAkhir;
}
public T ListT intersectionListT list1, ListT list2 { ListT list = new ArrayListT;
for T t : list1 { if list2.containst {
list.addt; }
} return list;
}
Berikut ini pada kode program 4.30 merupakan implementasi untuk mengurutkan hasil list id_pasal secara descending berdasarkan bobot wij :
Kode Program 4.30 Implementasi Pengurutan List secara Descending
Setelah didapatkan hasil urutan id_pasal, maka selanjutnya sistem menjalankan tahap pencarian tentang dan dokumen pasal berdasarkan id_pasal
yang disajikan pada kode program 4.31 berikut ini :
Kode Program 4.31 Implementasi Pencarian Dokumen Pasal di Basis Data
ListString hasilDescending = new ArrayList; public K, V extends ComparableV ListString
sortByValuesDescendingfinal MapK, V map { ComparatorK valueComparator = new ComparatorK {
public int compareK k1, K k2 { int compare = map.getk2.compareTomap.getk1;
if compare == 0 { return 1;
} else { return compare;
} }
}; MapK, V sortedByValues = new TreeMapK, VvalueComparator;
sortedByValues.putAllmap; Set set = sortedByValues.entrySet;
Iterator i = set.iterator; while i.hasNext {
Map.Entry me = Map.Entry i.next; System.out.printlnme.getKey;
hasilDescending.addme.getKey.toString; }
return hasilDescending; }
public Pasal AmbilPasalString id_pasal throws SQLException { PreparedStatement statement = null;
ResultSet rs2 = null; conn.setAutoCommitfalse;
String sql = SELECT id_pasal, tentang, dok_pasal from pasal + where id_pasal = + id_pasal + ;
statement = conn.prepareStatementsql; rs2 = statement.executeQuery;
Pasal pasal = new Pasal; while rs2.next {
pasal.setId_pasalrs2.getString1; pasal.setTentangrs2.getString2;
pasal.setDok_psl_streamrs2.getBinaryStream3; }
conn.commit; return pasal;
}
4.5.2. Pencarian pada Kasus document to document