Implementasi Sistem QA

4.2 Implementasi Sistem QA

Sistem QA diimplementasikan dengan menggunakan JSP sebagai antarmuka sistem dengan pengguna, dan JENA sebagai antarmuka sistem dengan Sistem QA diimplementasikan dengan menggunakan JSP sebagai antarmuka sistem dengan pengguna, dan JENA sebagai antarmuka sistem dengan

Gambar 4.4 Nilai properti sebuah instance

4.2.1 Implementasi Antarmuka Pengguna

Antarmuka sistem dengan pengguna dibangun menggunakan JSP. Terdapat dua halaman JSP yang berfungsi sebagai antarmuka sistem dengan pengguna. Halaman homepage (index.jsp) merupakan halaman awal saat pengguna memasuki sistem, sedangkan halaman jawaban (answer.jsp) berfungsi untuk menampilkan jawaban pertanyaan pengguna.

Gambar 4.5 Halaman homepage

Gambar 4.5 dan Gambar 4.6 memperlihatkan tampilan homepage dan halaman jawaban. Kode program untuk kedua halaman tersebut dapat dilihat pada lampiran

2 dan lampiran 3.

Gambar 4.6 Halaman jawaban

Baik pada homepage maupun halaman jawaban disertakan (include) halaman header (header.jsp) yang diletakkan pada awal halaman dan halaman footer (footer.jsp) yang diletakkan di akhir halaman. Sintaks yang digunakan untuk menyertakan kedua halaman tersebut adalah <%@ include file=

"header.jsp" %> dan <%@ include file= "footer.jsp" %> .

Kode program untuk halaman header dan footer dapat dilihat pada lampiran 4 dan lampiran 5. Pada file footer.jsp diletakkan sebuah form yang berfungsi sebagai tempat untuk memasukkan pertanyaan. Sintaks untuk mendefinisikan form tersebut sebagai berikut:

<form action="answer.jsp" method="get"> <div align="center"><strong>Pertanyaan :</strong> <input name="pertanyaan" type="text" size="100"> <input type="submit" value="Cari Jawaban">

</div> </form>

Setelah menekan tombol cari jawaban, pertanyaan akan diteruskan ke modul QP untuk diproses. Gambar 4.7 dan Gambar 4.8 memperlihatkan halaman header dan halaman footer.

Gambar 4.7 halaman header

Gambar 4.8 halaman footer

Apabila jawaban pertanyaan berupa nama orang, maka jawaban akan dimunculkan dalam bentuk link ke halaman informasi detail tentang orang (persondetail.jsp). Apabila jawaban berupa judul film, maka akan dimunculkan dalam bentul link ke halaman informasi detail film (moviedetail.jsp). Sedangkan jenis jawaban lainnya akan dimunculkan dalam bentuk teks biasa. Gambar 4.9 dan

Gambar 4.10 memperlihatkan contoh halaman informasi detail tentang orang dan film. Kode program untuk kedua halaman tersebut dapat dilihat pada lampiran 8 dan lampiran 9.

Gambar 4.9 halaman informasi detail orang

Sistem akan memberikan tanggapan kepada pengguna melalui halaman jawaban. Apabila pertanyaan yang dimasukkan pengguna benar dan dapat diproses oleh sistem maka, sistem akan menampilkan pertanyaan beserta jawaban (Gambar 4.11a) kepada pengguna. Namun apabila jawaban tidak ditemukan, maka sistem akan memberitahu pengguna bahwa jawaban atas pertanyaan yang dimaksud tidak dapat ditemukan (Gambar 4.11b). Apabila terjadi kesalahan pada kalimat pertanyaan yang mengakibatkan sistem tidak dapat memrosesnya, maka pengguna akan diberitahu (Gambar 4.11c)

Gambar 4.10 halaman informasi detail film

Ab

Gambar 4.11 Tanggapan sistem kepada pengguna

4.2.2 Implementasi Antarmuka Ontologi

Agar informasi yang tersimpan dalam ontologi dapat diakses oleh sistem, dibutuhkan sebuah mekanisme yang menghubungkan sistem dengan ontologi. Dalam implementasi ini digunakan JENA ontology API sebagai antarmuka sistem dengan ontologi. Mekanisme untuk membangun hubungan tersebut didefinisikan dengan sintaks berikut:

import com.hp.hpl.jena.ontology.*; import com.hp.hpl.jena.util.*; import com.hp.hpl.jena.rdf.model.ModelFactory;

final String inputFileName = "http://localhost:8080/QAFilm/QAFilm.owl";

OntModel m = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM); InputStream in = FileManager.get().open(inputFileName); m.read(new InputStreamReader(in),"");

4.2.3 Implementasi Modul QP

Modul QP diimplementasikan sebagai sebuah file JSP (qproc.jsp). File modul ini disertakan pada halaman jawaban (answer.jsp). Langkah pertama yang dilakukan pada modul ini adalah mengambil nilai parameter pertanyaan sebagai berikut: pertanyaan = request.getParameter("pertanyaan");

Langkah berikutnya adalah menghilangkan semua stopwords dari kalimat pertanyaan. Mekanisme untuk menghilangkan stopwords didefinisikan dalam sintaks sebagai berikut:

querystring = "SELECT DISTINCT ?kt WHERE { ?Qproc <"+NS+"hassw> ?kt}";

query = QueryFactory.create(querystring) ; qexec = QueryExecutionFactory.create (query,m);

try { results = qexec.execSelect() ; for ( ; results.hasNext() ; ) {

soln = results.nextSolution() ; kt = soln.getLiteral("kt").getString(); kt = kt+" ";

pertanyaan = pertanyaan.replaceAll(kt,""); } } catch (Exception e) {out.print("maaf ada kesalahan "+e);} finally { qexec.close() ; }

Pada sintaks tersebut di atas, variabel m adalah model ontologi yang telah dibuat sebelumnya, dan variabel querystring berisi sintaks query dalam bahasa SPARQL.

Langkah selanjutnya melakukan proses parsing kalimat menjadi satuan- satuan kata. Sintaks untuk melakukan proses parsing sebagai berikut:

i = 1; StringTokenizer st = new StringTokenizer(pertanyaan); while (st.hasMoreTokens()) {

kata[i] = st.nextToken();

i++;

Setelah itu dilakukan proses pengecekan kata tanya dan kata kunci yang sesuai dengan pola yang diijinkan. Kode program modul QP dapat dilihat pada lampiran

6. Keluaran dari modul QP adalah kata-kata kunci. Keluaran ini diteruskan ke modul QR.

4.2.4 Implementasi Modul QR

Pada modul QR, sasaran jawaban dan kata-kata kunci digunakan untuk menentukan variabel query dan statement-statement query. Modul QR akan dijalankan apabila kalimat pertanyaan dinyatakan valid.

Variabel query dan statement-statement query didapat dengan mengeksekusi query. Berikut adalah isi dari variabel querystring dan mekanisme eksekusi query untuk mendapatkan variabel query.

querystring = "SELECT ?qvar "+

"WHERE { ?Qproc <"+NS+"dpobj> ?qvar."+

"?Qproc <"+NS+"hasdp> '"+dp1+"'}";

query = QueryFactory.create(querystring) ; qexec = QueryExecutionFactory.create (query,m);

try { results = qexec.execSelect() ; for ( ; results.hasNext() ; ){

soln = results.nextSolution() ; qvar1 = soln.getLiteral("qvar").getString();

} finally { qexec.close() ; }

Sedangkan untuk mendapatkan statement-statement query, mekanisme eksekusi query sebagai berikut:

querystring = "SELECT DISTINCT ?dtpsubject ?dtppredicate ?dtpobject "+

"WHERE { ?dtp <"+NS+"dpsub> ?dtpsubject."+ "?dtp <"+NS+"dppre> ?dtppredicate."+ "?dtp <"+NS+"dpobj> ?dtpobject."+ "?dtp <"+NS+"hasdp> ?dp."+

"filter regex ('"+dp1+" "+dp2+"',?dp,'i')}";

query = QueryFactory.create(querystring) ; qexec = QueryExecutionFactory.create (query,m);

try { results = qexec.execSelect() ; for ( ; results.hasNext() ; ){ soln = results.nextSolution() ; statsubject = soln.getLiteral("dtpsubject").getString(); statpredicate = soln.getLiteral("dtppredicate").getString(); statobject = soln.getLiteral("dtpobject").getString(); statement = statsubject+" <"+NS+statpredicate+"> "+statobject;

querystat = querystat+statement+".";

Keseluruhan kode program untuk modul QR dapat dilihat pada lampiran 7. Setelah mendapat variabel query dan statement-statement query, sebuah query kembali dieksekusi untuk mendapatkan jawaban pertanyaan. Berikut adalah isi variabel querystring dan mekanisme eksekusi query untuk mendapatkan jawaban pertanyaan.

querystring = "SELECT DISTINCT "+qvar1+" "+qvar2+ " WHERE {"+querystat+queryfilterall+"}";

query = QueryFactory.create(querystring) ; qexec = QueryExecutionFactory.create (query,m);

try { results = qexec.execSelect() ; for ( ; results.hasNext() ; ){ soln = results.nextSolution();

answer1 = soln.getLiteral(qvar1).getString(); answer2 = soln.getLiteral(qvar2).getString();

if (qvar1.equalsIgnoreCase("?mtitle")) { answer1="<a href='moviedetail.jsp?answerdetail=" + answer1 + "'>" + answer1 + "</a>";

} if (qvar2.equalsIgnoreCase("?mtitle")) { answer2 = "<a href='moviedetail.jsp?answerdetail=" + answer2 + "'>" + answer2 + "</a>";

} if (qvar1.equalsIgnoreCase("?pname")) { answer1 = "<a href='persondetail.jsp?answerdetail=" + answer1 + "'>" + answer1 + "</a>";

} if (qvar2.equalsIgnoreCase("?pname")) { answer2 = "<a href='persondetail.jsp?answerdetail=" + answer2 + "'>" + answer2 + "</a>";

if (kt.equalsIgnoreCase("apakah") || kt.equalsIgnoreCase("siapa")) {

allanswer = allanswer + "<b>" + answer1 +"</b> "+op+"<b> "+answer2+ "</b><br>";

} else {

allanswer = allanswer + dp1+" <b>" + answer2 +": </b> "+answer1+ "<br>";

} } finally { qexec.close() ; }

Langkah terakhir pada modul QR adalah memberikan tanggapan kepada pengguna dalam bentuk jawaban (Gambar 4.11a) atau pemberitahuan jika jawaban tidak ditemukan (Gambar 4.11b).