Perancangan E-Teacher pada Chatbot sebagai layanan tanya ...
Transcript of Perancangan E-Teacher pada Chatbot sebagai layanan tanya ...
Perancangan E-Teacher pada Chatbot sebagai layanan tanya jawab akademik
TUGAS AKHIR
Disusun dalam rangka memenuhi salah satu persyaratan
Untuk menyelesaikan program Strata-1 Departemen Teknik Informatika
Fakultas Teknik Universitas Hasanuddin
Makassar
Disusun Oleh :
MUH. ARYANDI
D42114301
DEPARTEMEN TEKNIK INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS HASANUDDIN
MAKASSAR
2018
ABSTRAK
Interaksi dengan guru saat ini merupakan salah satu cara untuk membuat
siswa bisa belajar dengan interaktif. Keperluan siswa akan belajar sangat beragam.
Ada yang belajar setelah pulang sekolah , ada pula yang belajar di malam hari
karena berbagai kesibukan. Internet sesungguhnya dapat bermanfaat bagi semua
orang karena fungsinya sebagai informasi tanpa batas. Semua orang pada dasarnya
membutuhkan informasi.
Manfaat Internet di bidang pendidikan, siswa dapat dengan mandiri
memanfaatkan situs-situs pendidikan secara berulang-ulang tanpa terikat oleh jam
pelajaran yang terbatas di kelas. Internet dapat dijadikan sebagai sumber belajar
bagi siswa, baik di kelas dalam mengerjakan tugas-tugas dari guru, maupun di
rumah, atau di mana saja yang dapat mengakses internet secara mandiri. Maka
dibutuhkan sistem untuk dapat menjawab pertanyaan siswa terkait pelajaran yang
bisa diakses setiap saat. Teknologi yang digunakan untuk mengimplementasinya
adalah dengan algoritma TF-IDF dan metode crawling sebagai dasar pembuatan
system chatbot ini.
Pada proses pengujian yang dilakukan menghasilkan tingkat akurasi dalam
memberikan jawaban berdasarkan pertanyaan yang di input oleh 20 user dengan
tingkat akurasi 97.25%.
Kata kunci : chatbot, Algoritma TF-IDF , E-Teacher, web crawler.
KATA PENGANTAR
Assalamu Alaikum Wr. Wb.
Puji dan syukur penulis panjatkan atas kehadirat Allah SWT karena berkat
Rahmat dan Karunia-Nya sehingga Tugas Akhir yang berjudul
“PERANCANGAN E-Teacher pada CHATBOT SEBAGAI LAYANAN
TANYA JAWAB PELAJARAN AKADEMIK” ini dapat diselesaikan sebagai
salah satu syarat dalam menyelesaikan jenjang Strata-1 pada Departemen Teknik
Informatika Fakultas Teknik Universitas Hasanuddin.
Penyusunan penelitian ini disajikan hasil suatu penelitian yang menyangkut
judul yang telah diangkat dan telah melalui proses pencarian dari berbagai sumber
baik jurnal penelitian, prosiding pada seminar-seminar nasional/internasional, buku
maupun dari situs-situs di internet.
Penulis menyadari bahwa dalam penyusunan dan penulisan skripsi ini tidak
lepas dari bantuan, bimbingan serta dukungan dari berbagai pihak, dari masa
perkuliahan sampai dengan masa penyusunan tugas akhir, sangatlah sulit untuk
menyelesaikan tugas akhir ini. Oleh karena itu, penulis dengan senang hati
menyampaikan terima kasih kepada:
1) Tuhan Yang Maha Esa atas semua berkat, karunia serta pertolongan-Nya
yang telah diberikan kepada kami disetiap langkah dalam pembuatan
program hingga penulisan laporan skripsi ini.
2) Kedua Orang tua penulis, Bapak dan Ibu serta saudara-saudara penulis,
yang selau memberikan dukungan, doa, dan semangat serta selalu sabar
dalam mendidik penulis sejak kecil;
3) Bapak Amil Ahmad Ilham, ST., M.IT., Ph.D., selaku pembimbing 1 dan
bapak Dr. Eng. Zulkifli Tahir, S.T., MSc. selaku pembimbing II yang selalu
menyediakan waktu, tenaga, pikiran dan perhatian yang luar biasa untuk
mengarahkan penulis dalam penyusunan tugas akhir;
4) Bapak Amil Ahmad Ilham, ST., M.IT., Ph.D selaku Ketua Departemen
Teknik Informatika Fakultas Teknik Universitas Hasanuddin atas
bimbingannya selama masa perkuliahan penulis;
5) Staf Program Studi Teknik Informatika Universitas Hasanuddin.
6) Teman-teman Mahasiswa Program Studi Teknik Informatika 2014
Universitas Hasanuddin.
7) Teman-teman Komunitas Programmer Makassar yang senantiasa
memberikan dukungan kepada penulis dalam penyusunan tugas akhir.
8) Sekolah Koding yang menjadi wadah belajar bagi penulis dalam
menyelesaikan tugas akhir.
9) Makassar Digital Valley (MDV) yang telah menjadi tempat untuk belajar
dan berdiskusi untuk menyelesaikan penyusunan tugas akhir bagi penulis.
10) Serta seluruh pihak yang tak sempat kami sebutkan satu persatu yang telah
banyak meluangkan tenaga, waktu, dan pikiran selama penyusunan laporan
skripsi ini.
Akhir kata, penulis berharap semoga Allah SWT. berkenan membalas
segala kebaikan dari semua pihak yang telah banyak membantu. Semoga Tugas
Akhir ini dapat memberikan manfaat bagi pengembangan ilmu. Aamiin.
Wassalam
Makassar, Juli 2018
Penulis
DAFTAR ISI
halaman
HALAMAN JUDUL .................................................................................. i
LEMBAR PENGESAHAN ....................................................................... ii
ABSTRAK ................................................................................................... iii
KATA PENGANTAR ................................................................................ iv
DAFTAR ISI ............................................................................................... vii
DAFTAR GAMBAR .................................................................................. ix
DAFTAR TABEL ....................................................................................... x
BAB I PENDAHULUAN ............................................................................ 1
1.1 Latar Belakang ........................................................................... 1
1.2 Rumusan Masalah ...................................................................... 2
1.3 Tujuan Penelitian ...................................................................... 3
1.4 Manfaat Penelitian ................................................................... 3
1.5 Batasan Masalah Penelitian ...................................................... 3
1.6 Sistematika Penulisan ............................................................... 4
BAB II TINJAUAN PUSTAKA ................................................................ 6
2.1 Konsep Dasar Sistem ................................................................. 6
2.2 Algoritma TF-IDF ...................................................................... 11
2.3 Web Crawling ............................................................................ 13
2.4 Bahasa Pemrograman ................................................................. 14
2.5 Database .................................................................................... 24
2.6 Keyword Matching ..................................................................... 30
2.7 Chatbot ....................................................................................... 31
BAB III METODOLOGI PENELITIAN .................................................... 32
3.1 Tahapan Penelitian ..................................................................... 32
3.2 Waktu dan Lokasi Penelitian .................................................... 35
3.3 Pengumpulan Data .................................................................... 35
3.4 Instrumen Penelitian .................................................................. 36
3.5 Perancangan Implementasi Sistem ............................................ 37
3.6 Analisis Kinerja Sistem .............................................................. 42
BAB IV HASIL DAN PEMBAHASAN ..................................................... 57
4.1 Hasil Penelitian .......................................................................... 57
4.2 Pembahasan ............................................................................... 68
BAB V PENUTUP ..................................................................................... 70
A. Kesimpulan ................................................................................ 70
B. Saran ........................................................................................... 71
DAFTAR PUSTAKA ................................................................................. 72
LAMPIRAN ................................................................................................ 73
DAFTAR GAMBAR
Nomor halaman
Gambar 2.1 Cara kerja aplikasi web dengan PHP ....................................... 17
Gambar 2.2 Kode Vue.js .............................................................................. 22
Gambar 2.3 Jenjang database ....................................................................... 25
Gambar 3.1 Diagram tahapan penelitian ..................................................... 32
Gambar 3.2 Gambaran Umum Cara kerja system ....................................... 34
Gambar 3.3 Soucecode pengecekan di database ......................................... 34
Gambar 3.4 Data dalam database di phpmyadmin ...................................... 36
Gambar 3.5 Blok diagram tahap Pencocokan kata ...................................... 37
Gambar 3.6 Proses crawling pada website .................................................. 42
Gambar 3.7 Flowchart dari proses pemberian jawaban dari input user ....... 44
Gambar 3.8 Flowchart dari proses matching TF-IDF .................................. 45
Gambar 3.9 Pseudecode dari proses matching TF-IDF ............................... 46
Gambar 3.10 Flowchart dari proses crawling website ................................. 54
DAFTAR TABEL
Nomor halaman
Tabel 3.1 Total pembobotan antara kata input dan tiga record ................... 41
Tabel 3.2 Total nilai pembobotan untuk inputan pertanyaan user terhadap record
pertanyaan .................................................................................................... 50
Tabel 3.3 Perhitungan setiap recotd pertanyaan .......................................... 51
Tabel 3.4 Hasil pembobotan dengan proses filtering ................................... 56
Tabel 4.1 Hasil pegujian pencocokan user dengan database ...................... 60
Tabel 4.2 Hasil akurasi ................................................................................ 65
Tabel 4.3 Hasil proses pengujian crawling .................................................. 66
Tabel 4.4 Hasil akurasi ................................................................................ 67
BAB I
PENDAHULUAN
I.1 Latar Belakang
Interaksi dengan guru saat ini merupakan salah satu cara untuk
membuat siswa bisa belajar dengan interaktif. Keperluan siswa dalam
belajar akan sangat beragam. Ada yang belajar setelah pulang sekolah, dan
belajar di malam hari karena berbagai kesibukan. Internet dapat bermanfaat
bagi semua orang karena fungsinya sebagai informasi tanpa batas dan
semua orang pada dasarnya membutuhkan informasi.
Manfaat Internet di bidang pendidikan, siswa dapat mandiri dengan
memanfaatkan situs-situs pendidikan secara berulang-ulang tanpa terikat
oleh jam pelajaran yang terbatas dikelas. Internet dapat dijadikan sebagai
sumber belajar bagi siswa, baik dikelas dalam mengerjakan tugas-tugas dari
guru, maupun di rumah, atau di mana saja yang dapat mengakses internet
secara mandiri. Maka dibutuhkan sistem untuk dapat menjawab pertanyaan
siswa terkait pelajaran yang bisa diakses setiap saat. Teknologi yang bisa
digunakan adalah chatbot.
Chatbot / convensational agent merupakan program software yang
dirancang untuk mensimulasikan percakapan dengan cara mengirim pesan
dan sistem mengirim kembali respon spesifik berdasarkan query yang
dikirim. Jika query yang dikirim dan tidak di ketahui oleh sistem chatbot
maka akan dilakukan proses untuk mencari jawaban diluar dari data yang
dimiliki oleh sistem chatbot tersebut dengan teknik crawling/scrapping.
Dengan menggunakan web crawler yang bertujuan untuk melintasi
struktur hypertext dari web, dimulai dari sebuah alamat awal (yang disebut
seed) dan secara rekursif mengunjungi alamat web di dalam halaman web.
Web Crawler melakukan indexing kepada tiap halaman yang nantinya
digunakan sebagai sumber referensi tanpa harus menelusuri lagi, ketika
query pertanyaan yang sama dikirim kembali.
Melihat dari hal-hal diatas berkembangnya teknologi dapat kita
selaraskan dengan permasalahan yang terkait dengan pelajaran sekolah.
Penulis tertarik untuk mengimplementasikan e-Teacher pada chatbot yang
akan dibuat dalam bentuk website interaktif menggunakan metode web
crawling dan Algoritma Term Frequency dan Invers Document
Frequency(TF-IDF) agar dapat dimanfaatkan oleh siswa untuk bertanya
terkait pelajaran di sekolahnya. Judul yang penulis ambil untuk tugas akhir
ini adalah “PERANCANGAN SISTEM CHATBOT SEBAGAI LAYANAN
TANYA JAWAB PELAJARAN AKADEMIK”.
I.2 Rumusan Permasalahan
Berdasarkan latar belakang diatas, penulis merumuskan permasalahan
yaitu:
1. Bagaimana penerapan sistem chatbot pada layanan tanya jawab ?
2. Bagaimana proses yang ada pada chatbot untuk mengeluarkan
jawaban sesuai dengan pertanyaan dari user ?
3. Bagaimana mengimplementasikan metode Web Crawler pada sistem
chatbot dalam mengambil data dari beberapa website untuk menjawab
pertanyaan yang diberikan oleh user ?
I.3 Tujuan Penelitian
Tujuan akhir dari penelitian ini yaitu :
1. Untuk mengetahui penerapan sistem chatbot pada layanan tanya
jawab.
2. Untuk mengetahui proses yang ada pada chatbot untuk menjawaban
sesuai dengan pertanyaan dari user.
3. Untuk mengimplementasikan metode Web Crawler pada aplikasi
chatbot yang menjawab pertanyaan yang diberikan oleh user.
I.4. Manfaat Penelitian
Dengan dilakukannya penelitian ini, diharapkan manfaat yang
didapatkan antara lain :
1. Dengan chatbot ini , siswa dapat bertanya terkait pelajaran akademik
kapanpun dan dimanapun
2. Dengan chatbot ini , siswa mampu mendapatkan informasi yang dicari
terkait pelajaran akademik dengan mudah dan cepat
I.5 Batasan Masalah
Untuk kemudahan dan lebih terperincinya pembahasan penulisan,
permasalahan yang dibahas dalam tugas akhir ini dibatasi pada :
1. Sistem chatbot ini bersifat Knowladge base dimana pertanyaan sudah
disediakan di dalam basis data
2. Pertanyaan hanya dapat ditanyakan terkait mata pelajaran non
perhitungan / dalam hal ini pelajaran biologi di tingkatan SMA
3. Sistem chatbot ini dirancang hanya pada fitur chat yang di masukkan
menggunakan bahasa yang baku / tidak singkat dan terstruktur.
4. Jika tidak menemukan jawaban di sistem chatbot, maka akan
dilakukan web crawling pada website di belajaronlineku.com/forum.
1.6 Sistematika Penulisan
Laporan Tugas Akhir ini dibagi dalam lima bab yang tersusun secara
sistematis, yaitu:
BAB I PENDAHULUAN
Bab ini menjelaskan tentang latar belakang pengambilan topik
Sistem dan web crawling yang berbasis website pembelajaran sebagai
skripsi, perumusan masalah, tujuan penelitian, batasan masalah, metode
penulisan dan sistematika penulisan.
BAB II LANDASAN TEORI
Bab ini akan membahas mengenai penjelasan-penjelasan umum
mengenai teori-teori yang berkaitan seperti konsep dasar dan pengertian
tentang Sistem chatbot dan web crawling yang berbasis website
pembelajaran menggunakan Algoritma Term Frequency dan Invers
Document Frequency(TF-IDF) untuk melakukan pembobotan dan
Algoritma Bubble Sort untuk memilih .
BAB III METODOLOGI PENELITIAN
Dalam bab ini membahas mengenai perancangan Sistem chatbot
pada website pembelajaran dengan metode pembobotan kata menggunakan
algoritma Term Frequency dan Invers Document Frequency(TF-IDF) , dan
metode web crawling . Disini akan dibahas berbagai aspek yang perlu
dipertimbangkan dalam pembuatan aplikasi berbasis web tersebut dan
konsep perancangannya.
BAB IV IMPLEMENTASI DAN PENGUJIAN SISTEM
Bab ini berisi contoh eksekusi program serta hasil pengujian dalam
bentuk hasil kuesioner.
BAB V PENUTUP
Bab ini berisi tentang kesimpulan dan saran dari penelitian yang
dilakukan.
BAB II
LANDASAN TEORI
2.1. Konsep Dasar Sistem
Konsep dasar sistem terbagi menjadi beberapa bagian yaitu pengertian
sistem, karakteristik sistem dan klasifikasi sistem.1
a. Pengertian Sistem
Menurut Satzinger, Jackson dan Burd (2010) mendefinisakan sistem
sebagai sekumpulan komponen yang saling berhubungan dan bekerja
bersama untuk mencapai suatu tujuan2. Menurut Jerry FitzGerald
(2008) sistem didefinisikan sebagai berikut:
“Suatu sistem adalah suatu jaringan kerja dari prosedur- prosedur
yang saling berhubungan, berkumpul bersama-sama untuk melakukan
suatu kegiatan atau menyelesaikan suatu sasaran tertentu”.3
Sedangkan sistem yang lebih menekankan pada elemen
didefinisikan oleh Ladjamudin (2005) sebagai berikut:
“Sistem merupakan suatu bentuk integrasi antara satu komponen
dengan komponen lainnya, karena sistem memiliki sasaran yang
berbeda untuk setiap kasus yang terjadi yang ada didalam sistem
tersebut” 2
Dari definisi diatas, dapat disimpulkan bahwa sistem adalah
kumpulan elemen-elemen atau sub-sub yang saling berintegrasi dan
saling berhubungan satu sama lain membentuk satu kesatuan utuh
untuk melaksanakn suatu fungsi guna mencapai suatu tujuan tertentu3.
b. K arakteristik Sistem
Karakteristik sistem menurut Ladjamudin (2005) antara lain
sebagai berikut : 2
a) Komponen Sistem
Suatu sistem terdiri dari sejumlah komponen yang saling
berinteraksi, yang artinya saling bekerjasama membentuk
suatu kesatuan. Komponen-komponen sistem atau elemen-
elemen sistem dapat berupa suatu subsistem atau bagian-
bagian dari sistem. Setiap subsistem mempunyai karakteristik
dari sistem yang menjalankan suatu fungsi tertentu dan
mempengaruhi proses sistem secara keseluruhan. 2
b) Batasan Sistem
Batasan sistem (boundary) merupakan daerah yang
membatasi antara suatu sistem dengan sistem yang lainnya
atau dengan lingkungan luarnya. Batas sistem ini
memungkinkan suatu sistem dipandang sebagai suatu
kesatuan. 2
c) Lingkungan luar sistem
Lingkungan luar (environment) dari sistem adalah apapun
di luar batas dari sistem yang mempengaruhi operasi sistem.
Lingkungan luar sistem dapat bersifat menguntungkan dan
dapat juga bersifat merugikan. Lingkungan luar yang
menuntungkan merupakan energi dari sistem dan dengan
demikian harus tetap dijaga dan dipelihara, sedangkan
lingkungan luar yang merugikan harus ditahan dan
dikendalikan karena kalau tidak akan mengganggu
kelangsungan hidup dari sistem. 2
d) Penghubung Sistem
Penghubung (interface) sistem merupakan media yang
menghubungkan antara satu subsistem dengan subsistem
yang lainnya. Dengan penghubung satu subsistem dapat
berinteraksi dengan subsistem yang lainnya membentuk satu
kesatuan. 2
e) Masukan Sistem
Masukan (input) sistem adalah energi yang dimasukkan
ke dalam sistem. Masukan dapat berupa perawatan dan
masukan sinyal maintenance input yang merupakan energi
yang dimasukkan agar sistem dapat berjalan serta sinyal input
yang merupakan energi yang diproses untuk mendapatkan
keluaran sistem berupa informasi. 2
f) Keluaran Sistem
Keluaran (output) sistem adalah hasil dari energi yang
diolah dan diklasifikasikan menjadi keluaran yang
berguna. 2
g) Pengolahan Sistem
Pengolahan sistem merupakan suatu bagian yang
mengolah masukan (input) dan memprosesnya agar menjadi
output informasi yang berguna. 2
h) Sasaran sistem
Suatu sistem pasti mempunyai tujuan (goal) atau sasaran
(objective). Sasaran dari sistem sangat menentukan masukan
(input) yang dibutuhkan sistem dan keluaran (output) yang
dihasilkan dari sistem. Suatu sistem dikatakan berhasil bila
mengenai sasaran atau tujuannya. 2
c. Klasifikasi Sistem
Sistem dapat diklasifikasikan dari beberapa sudut padang, yaitu: 3
1. Sistem diklasifikasikan sebagai sistem abstrak (abstract
system) dan sistem fisik (physical system).
Sistem abstrak adalah sistem yang berupa pemikiran atau ide-
ide yang tidak tampak secara fisik, misalnya seperti sistem
teologia yang merupakan sistem yang berupa pemikiran-
pemikiran hubungan antaran manusia dan Tuhan. Sedangkan
sistem fisik adalah sistem yang ada secara fisik, misalnya
seperti sistem komputer, sistem akutansi, sistem produksi dan
lain sebagainya. 3
2. Sistem diklasifikasikan sebagai sistem alamiah (natural
system) dan sistem buatan manusia (human made system)
Sistem alamiah adalah sistem yang terjadi melalui proses
alam, tidak dibuat oleh manusia, misalnya seperti sistem
perputaran bumi. Sedangkan sistem manusia adalah sistem
yang dirancang oleh manusia, misalnya seperti sistem
informasi yang merupakan sistem yang melibatkan interaksi
antara manusia dan komputer (human-machine system). 3
3. Sistem diklasifikasikan sebagai sistem tertentu (deterministic
system) dan sistem tak tentu (probabilistic system)
Sistem tertentu adalah sistem yang beroperasi dengan tingkah
laku yang sudah dapat diprediksi, interaksi diantara bagian-
bagiannya dapat dideteksi dengan pasti, sehingga keluaran
dari sistem dapat diramalkan. Sistem komputer merupakan
salah satu contoh dari sistem tertentu yang tingkah lakunya
dapat dipastikan berdasarkan program-program yang
dijalankan. Sedangkan sistem tak tentu adalah sistem yang
kondisi masa depannya tidak dapat di prediksi karena
mengandung unsur probabilitas. 3
4. Sistem diklasifikasikan sebagai sistem tertutup (closed
system) dan sistem terbuka (open system)
Sistem tertutup adalah sistem yang tidak berhubungan dan
tidak terpengaruh dengan lingkungan luarnya, sistem ini
bekerja otomatis tanpa campur tangan dari pihak lainnya.
Secara teoritis sistem tertutup ini ada, tetapi kenyataannya
tidak ada sistem yang benar-benar tertutup, yang ada
hanyalah relatively closed system (secara relatif tertutup).
Sedangkan sistem terbuka adalah sistem yang berhubungan
dan terpengaruh dengan lingkungan luar atau subsistem yang
lainnya, sistem ini menerima masukan dan menghasilkan
keluaran untuk lingkungan luar atau subsistem yang lain.
Karena sistem ini sifatnya terbuka dan terpengaruh dengan
lingkungan luar maka sistem ini harus memiliki sistem
pengendalian yang baik. Sistem yang baik harus dirancang
sedemikian rupa, sehingga relatif tertutup karena sistem
tertutup akan bekerja secara otomatis dan terbuka hanya
untuk pengaruh yang baik saja. 3
2.2. Algoritma TF-IDF
Algoritma TF-IDF (term frequency – inverse document frequency)
merupakan algoritma dengan metode pembobotan yang menggabungkan
metode TF (term frequency) dan metode IDF (inverse document
frequency). 4
Metode TF (term frequency) merupakan pengukuran yang paling
sederhana dalam pembobotan. Pada metode ini, masing-masing term
diasumsikan mempunyai proporsi kepentingan sesuai jumlah terjadinya
(munculnya) dalam teks (dokumen). Term frequency dapat memperbaiki
nilai recall pada information retrival, tetapi tidak selalu memperbaiki nilai
precision. Hal ini di sebabkan term yang frequent cenderung muncul di
banyak teks, sehingga term-term tersebut memiliki kekuatan pembeda
(keunikan) yang kecil.4
Metode IDF (inverse document frequency) adalah metode
pembobotan term yang lebih condong (fokus) untuk memperhatikan
kemunculan term pada keseluruhan kumpulan teks. Pada IDF, term yang
jarang muncul pada keseluruhan koleksi teks dinilai lebih berharga. Nilai
kepentingan tiap term diasumsikan berbanding terbalik dengan jumlah
teks yang mengandung term tersebut. 4
Pada term frequency (tf), terdapat beberapa jenis formula yang
digunakan, yaitu: 4
a. Tf biner (binery tf), yang hanya memperhatikan apakah suatu kata
ada atau tidak ada dalam dokumen, jika ada diberi nilai satu, jika
tidak diberi nilai nol.
b. Tf murni (raw tf), nilai tf diberikan berdasarkan jumlah kemunculan
suatu kata di dokumen. Contohnya jika muncul lima kali maka kata
tersebut akan bernilai lima.
c. Tf logaritmik, hal ini untuk menghindari dominansi dokumen yang
mengandung sedikit kata dalam query, namun mempunyai frekuensi
yang tinggi.
d. Tf normalisasi, menggunakan perbandingan antara frekuensi sebuah
kata dengan jumlah keseluruhan kata pada dokumen.
Berdasarkan jenis formula diatas, perhitungan bobot TF menggunakan
formula 1 menjadi sebagai berikut : 4
𝑤"# = 𝑡𝑓"# ∗ (log ∗-./0
+ 1) .........................................(1).
2.3. Web Crawling
Web Crawler adalah suatu program atau script otomat yang relatif
simple, dengan metode tertentu melakukan scan atau “crawl” ke semua
halaman-halaman internet untuk membuat index dari data yang dicari.
Nama lain untuk web crawl adalah web spider, web robot, bot, crawl dan
automatic indexer.5
Web crawl dapat digunakan untuk beragam tujuan. Penggunaan yang
paling umum terkait dengan search engine. Search engine menggunakan
web crawl untuk mengumpulkan informasi mengenai apa yang ada di
halaman - halaman web public. Tujuan utamanya adalah mengumpukan
data sehingga ketika pengguna internet mengetikkan kata pencarian di
komputer, search engine dapat dengan segera menampilkan website yang
relevan. Cara kerja dari web crawler adalah sebagai berikut :5
1. Mesin pencari web bekerja dengan cara menyimpan informasi tentang
banyak halaman web, yang diambil langsung dari WWW. Halaman ini
diambil dengan web crawler — browser web otomatis yang mengikuti
setiap pranala yang dilihatnya. Isi setiap halaman lalu dianalisis untuk
menentukan cara mengindeksnya (misalnya, kata-kata diambil dari
judul, subjudul, atau field khusus yang disebut meta tag). Data tentang
halaman web disimpan dalam sebuah database indeks untuk digunakan
dalam pencarian selanjutnya.
2. Mesin pencari juga menyimpan dan memberikan informasi hasil
pencarian berupa pranala yang merujuk pada file, seperti file audio, file
video, gambar, foto dan sebagainya.
3. Ketika seorang pengguna mengunjungi mesin pencari dan memasukkan
query, maka kata kunci pada mesin mencari indeks dan memberikan
daftar halaman web yang paling sesuai dengan kriterianya.
2.4. Bahasa Pemograman
Bahasa pemrograman, atau sering diistilahkan juga dengan bahasa komputer,
adalah instruksi standar untuk memerintah komputer. Bahasa pemrograman ini
merupakan suatu himpunan dari aturan sintaks dan semantik yang dipakai untuk
mendefinisikan program komputer. Adapun bahasa pemrograman yang
digunakan dalam pengerjaan sistem ini adalah: hypertext markup language
(HTML) dan PHP.
2.4.1. Hypertext Markup Language (HTML)
a. Penamaan Dokumen HTML
Tidak ada aturan yang baku untuk penamaan dokumen HTML. Artinya, kita
bebas memilih nama untuk dokumen tersebut. Hanya ekstensinya saja yang
perlu untuk diperhatikan. Suatu file teks akan dianggap sebagai dokumen
HTML jika memiliki ekstensi “.htm” atau “.html”. Maka setiap membuat
dokumen HTML, harus menyimpan ke dalam salah satu ekstensi tersebut,
misalnya Katalog.htm, Produk.htm, Servis.html, Kontak.html, dan lain
sebagainya. 6
b. Struktur HTML Document
Document HTML dapat di bagi mejadi dua bagian yaitu bagaian header
(kepala) dan body (badan). Setiap document HTML harus di awali dan di tutup
dengan tag HTML seperti : <HTML></HTML>, tag HTML memberi tahu
browser bahwa yang di dalam kedua tag adalah document HTML. 7
a. HEAD
Bagian header dari document HTML diapit oleh tag
<HEAD></HEAD>, di dalam bagian ini biasanya dimuat tag TITLE
yang menampilkan judul dari halaman pada browser. Selain itu
bookmark juga megunakan tag TITLE untuk memberi mark suatu
website. Browser menyimpan “titile” sebagai bookmark dan juga untuk
keperluan pencarian (searching) biasanya title digunakan sebagai
keyword. Header juga memuat tag META yang biasanya di gunakan
untuk menentukan informasi tertentu mengenai document HTML, anda
bisa menentukan author, keywords, dan lainnya pada tag META. 7
b. BODY
Document body digunakan untuk menampilkan text, image link dan
semua yang akan di tampilkan pada web page. 7
2.4.2. PHP Hypertext Preprocessor (PHP)
PHP adalah bahasa scripting yang menyatu dengan HTML dan
dijalankan pada server side. Artinya semua sintaks yang kita berikan akan
sepenuhnya dijalankan pada server sedangkan yang dikirimkan ke browser
hanya hasilnya. 8
Ketika dipanggil dari web browser, program yang ditulis dengan
PHP akan diparsing di dalam web server oleh interpreter PHP dan
diterjemahkan ke dalam dokumen HTML, yang selanjutnya akan
ditampilkan kembali ke web browser. Pada proses program PHP dilakukan
di lingkungan web server. PHP dikatakan sebagai bahasa sisi server (server-
side). Oleh sebab itu, kode PHP tidak akan terlihat pada saat user memilih
perintah “View Source” pada web browser9. Dalam PHP setiap nama
variable diawali tanda dollar ($). Misalnya nama variable a dalam PHP
ditulis dengan $a. Jenis suatu variable ditentukan pada saat jalannya
program dan tergantung pada konteks yang digunakan. 8
A. Cara Kerja PHP
Cara kerja aplikasi web yang ditulis dengan PHP dapat diilustrasikan
dengan gambar dibawah ini.
Berikut adalah keterangan dari gambar di atas: 10
1. User menulis www.abcd.com/catalog.php ke dalam address bar dari
web browser (IE, Mozilla Firefox, Opera, dll).
2. Web browser mengirimkan pesan diatas ke komputer server
(www.abcd.com) melalui internet, meminta halaman catalog.php.
Gambar 2.1. Cara kerja aplikasi web dengan PHP10
3. Web server (misalnya Apache), program yang berjalan di komputer
server, akan menangkap pesan tersebut, lalu meminta interpreter PHP
(program lain yang juga berjalan di komputer server) untuk mencari
file catalog.php dalam disk drive.
4. Interpreter PHP membaca file catalog.php dari disk drive.
5. Interpreter PHP akan menjalankan perintah-perintah atau kode PHP
yang ada dalam file catalog.php. Jika kode dalam file catalog.php
melibatkan akses terhadap database (misalnya MySQL) maka
interpreter PHP juga akan berhubungan dengan MySQL untuk
melaksanakan perintah-perintah yang berkaitan dengan database.
6. Interpreter PHP mengirimkan halaman dalam bentuk HTML ke
apache.
7. Melalui internet, apache mengirimkan halaman yang diperoleh dari
interpreter PHP ke komputer user sebagai respon atas permintaan
yang diberikan.
8. Web browser dalam komputer user akan menampilkan halaman yang
dikirim oleh apache.
B. Struktur Kontrol
a. IF
Konstruksi IF digunakan untuk melakukan eksekusi suatu statement
secara bersyarat.
b. WHILE
Arti dari statemant while adalah memberikan perintah untuk menjalankan
statement dibawahnya secara berulang-ulang, selama syaratnya terpenuhi.
10
c. FOR
Cara penulisan statement FOR adalah sebagai berikut:
for (ekspresi1; ekspresi2 ; ekspresi3) statement
ekspresi1 menunjukkan nilai awal untuk suatu variable,
ekspresi2 menunjukkan syarat yang harus terpenuhi untuk
menjalankan statement,
ekspresi3 menunjukkan pertambahan nilai untuk suatu variable. 11
d. SWITCH
Statement SWITCH digunakan untuk membandingkan suatu variable
dengan beberapa nilai serta menjalankan statement tertentu jika nilai
variable sama dengan nilai yang dibandingkan. Struktur Switch adalah
sebagai berikut: 11
switch (variable)
case nilai:
statement
case nilai:
statemant
case nilai:
statement
e. REQUIRE
Statement Require digunakan untuk membaca nilai variable dan
fungsi-fungsi dari sebuah file lain. Cara penulisan statement Require
adalah : require(namafile); statement require tidak dapat dimasukkan
diadalam suatu struktur looping misalnya while atau for. Karena hanya
memperbolehkan sekali saja pemangggilan file yang sama. 10
f. INCLUDE
Statement include akan menyertakan isi suatu file tertentu. Include
dapat diletakkan didalam suatu looping misalkan dalam statement for atau
while. 10
C. Kelebihan PHP
Beberapa kelebihan PHP dibandingkan dengan bahasa
pemrograman yang lain, yaitu: 8
2. PHP mudah dibuat dan memiliki kecepatan akses tinggi.
3. PHP dapat berjalan pada web server yang berbeda dan dalam
sistem operasi yang berbeda pula. PHP dapat berjalan di sistem
operasi UNIX, Windows, Windows NT, dan Macintosh.
4. PHP diterbitkan secara gratis (open source).
5. PHP juga dapat berjalan pada web server Microsoft Personal Web
Server, Apache, IIS, Xitami dan sebagainya.
6. PHP termasuk bahasa yang bersifat embedded (bisa diletakkan
atau ditempel pada tag HTML).
7. PHP termasuk server side programming.
2.4.3. Javascript (JS)
JavaScript adalah bahasa pemrograman web yang bersifat Client
Side Programming Language. Client Side Programming Language adalah
tipe bahasa pemrograman yang pemrosesannya dilakukan oleh client.
Aplikasi client yang dimaksud merujuk kepada web browser seperti Google
Chrome dan Mozilla Firefox.12
Bahasa pemrograman Client Side berbeda dengan bahasa
pemrograman Server Side seperti PHP, dimana untuk server side seluruh
kode program dijalankan di sisi server.
Untuk menjalankan JavaScript, kita hanya membutuhkan aplikasi
text editor dan web browser. JavaScript memiliki fitur: high-level
programming language, client-side, loosely tiped dan berorientasi objek.
JavaScript pada awal perkembangannya berfungsi untuk membuat interaksi
antara user dengan situs web menjadi lebih cepat tanpa harus menunggu
pemrosesan di web server. Sebelum javascript, setiap interaksi dari user
harus diproses oleh web server.
Bayangkan ketika kita mengisi form registrasi untuk pendaftaran
sebuah situs web, lalu men-klik tombol submit, menunggu sekitar 20 detik
untuk website memproses isian form tersebut, dan mendapati halaman yang
menyatakan bahwa terdapat kolom form yang masih belum diisi.
Untuk keperluan seperti inilah JavaScript dikembangkan.
Pemrosesan untuk mengecek apakah seluruh form telah terisi atau tidak,
bisa dipindahkan dari web server ke dalam web browser.
2.4.4. VUEJS
Vue.js (https://vuejs.org/) yang membawa tagline “The Progressive
JavaScript Framework” merupakan javascript framework yang membantu
dalam membuat sebuah website / aplikasi yang membutuhkan banyak
interaksi di dalamnya, biasanya berupa Single Page Application. Vue.js
merupakan framework javascript yang paling diminati karena kemudahan
dalam mempelajari dan mengimplementasikan di dalam website/aplikasi.
Vue.js seperti framework Javascript modern lainnya juga mengusung
konsep component based dimana setiap blok layout dianggap sebagai
komponen yang independen dan memiliki style serta fungsi sendiri yang
terisolir sehingga mudah untuk digunakan ulang oleh setiap halaman
website. Setiap komponen tersebut nantinya akan disusun menjadi blok-
blok yang saling terkait dan membangun sebuah tampilan utuh sebuah
halaman website. 13
Menggunakan komponen berarti akan membuat custom tag di
HTML template, secara mudah komponen di Vue.js bisa dibuat sederhana
dengan kode berikut :
Gambar 2.2. Kode Vue.js
2.4.5. Laravel
Laravel merupakan framework PHP yang menekankan pada
kesederhanaan dan fleksibilitas pada desainnya. Laravel dirilis dibawah
lisensi MIT dengan sumber kode yang disediakan di Github. Sama seperti
framework PHP lainnya, Laravel dibangun dengan basis MVC (Model-View
Controller). Laravel dilengkapi command line tool yang bernama “Artisan”
yang bisa digunakan untuk packaging bundle dan instalasi bundle.
Framework Laravel dibuat oleh Taylor Otwell, proyek Laravel dimulai pada
April 2011. 14
Awal mula proyek ini dibuat karena Otwell sendiri tidak
menemukan framework yang up-to-date dengan versi PHP.
Mengembangkan framewrok yang sudah ada bukan merupakan ide yang
bagus karena keterbatasan sumber daya. Dikarenakan beberapa
keterbatasan tersebut, Otwell membuat sendiri framework dengan nama
Laravel. Oleh karena itu Laravel menisyaratkan PHP versi 5.3 keatas.
(Rohman, 2014). Laravel merupakan framework aplikasi web yang
ekspresif dan sintaks yang elegan. Laravel berusaha mencoba menjadi
framework yang mudah digunakan dengan mengurangi tugas-tugas umum
yang sering digunakan dalam sebagian besar proyek - proyek web seperti
otentikasi, routing, session, dan caching. Laravel membuat proses
development yang menyenangkan bagi pengembang tanpa mengurangi
fungsionalitas aplikasi. Dengan harapan, pengembang dapat membuat
rangkaian kode-kode terbaik. Laravel berusaha untuk menggabungkan yang
terbaik dari apa yang ada dalam framework web lain, termasuk framework
yang menggunakan bahasa lain, seperti Ruby on Rails, ASP.NET MVC, dan
Sinatra. Laravel merupakan framework yang mudah diakses, powerful dan
menyediakan tools yang diperlukan untuk skala aplikasi besar. Laravel juga
merupakan sebuah aplikasi luar biasa dari sebuah kumpulan program
kontrol, sistem migrasi yang ekspresif dan dukungan tools yang dibutuhkan
dalam menguji aplikasi yang terintegrasi dengan beberapa aplikasi lainnya.
2.5 Database
Kumpulan dari item data yang saling berhubungan satu dengan yang
lainnya yang diorganisasikan berdasarkan sebuah skema atau struktur
tertentu, tersimpan di hardware komputer dan dengan software untuk
melakukan manipulasi untuk kegunaan tertentu. Kegunaan dari database
sebagai berikut 15:
• Salah satu komponen penting dalam sistem informasi, karena
merupakan dasar dalam menyediakan informasi
• Menentukan kualitas informasi : akurat, tepat pada waktunya dan
relevan. Informasi dapat dikatakan bernilai bila manfaatnya lebih efektif
dibandingkan dengan biaya mendapatkannya.
• Mengurangi duplikasi data (data redudancy)
• Hubungan data dapat ditingkatkan (data relatability)
• Mengurangi pemborosan tempat simpanan luar
Dalam database dikenal beberapa jenjang data sbb :
Database
Field
Record
Filedata/item
Characters
Gambar 2.3. Jenjang Database 15
• Characters : merupakan bagian data yang terkecil, dapat berupa
karakter numerik, huruf ataupun karakter-karakter khusus (special
characters) yang membentuk suatu item data / field 15.
• Field : merepresentasikan suatu atribut dari record yang
menunjukkan suatu item dari data, seperti misalnya nama, alamat
dan lain sebagainya. Kumpulan dari field membentuk suatu record.
Ø field name: harus diberi nama untuk membedakan field yang
satu dengan lainnya
Ø field representation: tipe field (karakter, teks, tanggal, angka,
dsb), lebar field (ruang maksimum yang dapat diisi dengan
karakter-karakter data) 15.
Ø field value: isi dari field untuk masing-masing record.
• Record : Kumpulan dari field membentuk suatu record. Record
menggambarkan suatu unit data individu yang tertentu. Kumpulan
dari record membentuk suatu file. Misalnya file personalia, tiap-tiap
record dapat mewakili data tiap-tiap karyawan15.
• File: File terdiri dari record-record yang menggambarkan satu
kesatuan data yang sejenis. Misalnya file mata pelajaran berisi data
tentang semua mata pelajaran yang ada15.
• Database : Kumpulan dari file / tabel membentuk suatu database15
2.5.1 Tipe File Database
Dalam database dikenal 5 (lima) jenis tipe file dengan definisi sebagai berikut 15:
1. File Induk (master File)
a. file induk acuan (reference master file) : file induk yang recordnya
relatif statis atau nilai yang jarang berubah. Misalnya file daftar gaji,
file mata pelajaran15.
b. file induk dinamik (dynamic master file): file induk yang nilai dari
recordnya sering berubah atau sering dimutakhirkan (update)
sebagai hasil dari suatu transaksi. Misalnya file induk data barang,
yang setiap saat harus di up-date bila terjadi transaksi15.
2. File Transaksi (transaction file)
File ini bisa disebut file input; digunakan untuk merekam data hasil dari
transaksi yang terjadi. Misalnya file penjualan yang berisi data hasil
transaksi penjualan15.
3. File Laporan (Report file)
File ini bisa disebut output file, yaitu file yang berisi informasi yang
akan ditampilkan15.
4. File Sejarah (history file)
File ini bisa disebut file arsip (archival file) merupakan file yang berisi
data masa lalu yang sudah tidak aktif lagi, tetapi masih disimpan sebagai
arsip15.
5. File Pelindung (backup file)
File ini merupakan salinan dari file yang masih aktif di dalam database
pada suatu saat tertentu. File ini digunakan sebagai pelindung atau
cadangan bila file database yang aktif mengalami kerusakan atau
hilang15.
2.5.2 MySQL
MySQL adalah sebuah program database server yang mampu
menerima dan mengirimkan data sangat cepat, multi user serta
menggunakan peintah dasar SQL (Structured Query Language). MySQL
merupakan dua bentuk lisensi, yaitu FreeSoftware dan Shareware.
MySQL yang biasa digunakan adalah MySQL FreeSoftware yang
berada dibawah Lisensi GNU/GPL ( General Public License ). 16
MySQL merupakan sebuah database server yang free, artinya bebas
menggunakan database untuk keperluan pribadi atau usaha tanpa harus
membeli atau membayar lisensinya. Selain database server, MySQl
merupakan program yang dapat mengakses suatu database yang berposisi
sebagai Server, yang berarti program yang posisinya sebagai Client. Jadi
MySQL adalah sebuah database yang dapat digunakan sebagai Client
maupun server. Database MySQL merupakan suatu perangkat lunak yang
berbentuk database relasional atau disebut Relational Database
Management System (RDBMS ) yang menggunakan suatu bahasa
permintaan yang bernama SQL (Structured Query Language ). 16
SQL (Structured Query Language) adalah sebuah bahasa
permintaan database yang terstruktur. Bahasa SQL ini dibuat sebagai
bahasa yang dapat merelasikan beberapa tabel dalam database maupun
merelasikan antar database. SQL dibagi menjadi tiga bentuk query, yaitu:
16
A. DDL ( Data Definition Language )
DDL adalah sebuah metode Query SQL yang berguna untuk
mendefinisikan data pada sebuah database, Query yang dimiliki DDL
adalah: 4
• CREATE : Digunakan untuk membuat database dan Tabel
• Drop : Digunakan untuk menghapus Tabel dan database.
• Alter : Digunakan untuk melakukan perubahan struktur tabel yang telah
dibuat, baik menambah Field (Add), mengganti nama field (Change)
ataupun menamakannya kembali (Rename), dan menghapus Field
( Drop ).
B. DML ( Data Manipulation Language )
DML adalah sebuah metode query yang dapat digunakan apabila
DDL telah terjadi,sehingga fungsi dari query DML ini untuk melakukan
manipulasi database yang telah dibuat. Query yang dimiliki DML adalah:
16
• INSERT : Digunakan untuk memasukkan data pada tabel database
• UPDATE : Digunakan untuk pengubahan terhadap data yang ada pada
tabel database.
• DELETE : Digunakan untuk penghapusan data pada tabel database
C. DCL ( Data Control Language )
DCL adalah sebuah metode query SQL yang digunakan untuk
memberikan hakotorisasi dalam mengakses database, mengalokasikan
space, pendefinisian space, dan pengauditan penggunaan database. Query
yang dimiliki DCL adalah: 16
• GRANT : Untuk mengizinkan user mengakses tabel dalam database.
• REVOKE : Untuk membatalkan izin hak user, yang ditetapkan oleh
perintah GRANT.
• COMMIT : Mentapkan penyimpanan database.
• ROLLBACK : Membatalkan penyimpanan database edited.
2.5.3 Masuk ke MySQL
Untuk membuat koneksi ke server, diperlukan program MySQL
Client. Setelah menginstal perangkat lunak MySQL server baik pada
Windows atau produk yang lain dengan Unix. Kemudian instalkan
program pada tempat yang sama sesuai dengan program server yang di
instal. Pada Linux : default direktori /usr/local/mysql/bin sedangkan
Windows, dikenal dengan mysql.exe dan terletak pada default direktori
C:\mysql\bin. Adapun metode yang d i p i l i h sesuai dengan sistem
operasi yang digunakan, t a h a p t e r a k h i r akan berakhir pada deretan
perintah siap untuk menjalankan program MySQL Client untuk koneksi
ke server MySQL. 16
2.6 Keyword Matching
Keyword matching menurut Dictionary of Algorithm and Data
Structures, National Institute of Standard and Technology (NIST) adalah
proses untuk menemukan pola atau pattern susunan karakter string didalam
bagian dari isi teks. Keyword matching atau bisa disebut juga string
matching merupakan bagian penting dari sebuah proses pencarian string
(string searching) dalam sebuah dokumen. Hasil dari pencarian sebuah
string dalam dokumen tergantung dari metode string matching yang
diterapkan. Salah satu metode string matching yaitu Approximate String
Matching yang mencocokkan string dengan membedakan susunan karakter
dalam string yang dicocokkan, memiliki jumlah, maupun urutan karakter
dalam suatu string. Banyak algoritma yang bisa digunakan untuk string
matching dengan metode ini, misalnya Brute Force Algorithm,
Backtracking Algorithm, Greedy Algorithm, dan lain-lain.4
2.7 Chatbot
Chatbot adalah karakter bahasa alami yang berkomunikasi dengan
penggunanya, atau orangorang yang sedang chatting di messenger, web
instan, email, usenet, forum web, atau bahkan melalui komunikasi suara
seperti telepon. Chatbot juga kadang-kadang disebut chat robot, bot,
chatterbot, botchatting, chatterbox, V-Host, V-People, agent, dan manusia
virtual. Sebuah chatbot dapat dikaitkan dengan sebuah avatar, animasi yang
juga dapat mencakup sintesis pidato sehingga chatbot mungkin muncul
lebih hidup melalui animasi virtual reality dan suara. Sebuah chatbot juga
dapat memiliki teknologi pengenalan suara, sehingga bot hanya melalui
teks. Chatbot memiliki botmaster, yaitu orang di belakang layar yang
bertanggung jawab untuk menciptakan kepribadian bot dan melepaskannya
ke tempat umum melalui internet. Membuat bot lebih seperti menciptakan
karakter untuk sebuah novel atau skenario daripada seperti menulis sebuah
program computer.17
BAB III
METODOLOGI PENELITIAN
3.1. Tahapan Penelitian
Tahapan pada penelitian ini sebagaimana ditunjukkan pada gambar 3.1.
Gambar 3.1. Diagram tahapan penelitian
Tahapan secara garis besar dijelaskan sebagai berikut :
1. Pada studi literatur, pencarian penelitian dilakukan terkait sistem pencocokan
pola teks menggunakan algoritma keyword matching. Pada tahap ini dilakukan
pencarian dokumentasi hasil penelitian-penelitian sebelumnya yang terkait
dengan topik penelitian.
2. Pada tahap ini, dilakukan penetapan berbagai kebutuhan penelitian dan
disiapkan guna untuk menunjang penelitian dan pembuatan sistem.
1.Studiliteraturterkait
2.Identifikasikebutuhanpenelitian
3.Memasukkan
datapertanyaandidatabase
4.Prosesanalisa
pertanyaaninputanuser
5.ImplementasiAlgoritmaTF-IDF
7.Crawlingwebsiteuntuk
mencarijawabandiluar
database
8.KesimpulanPenelitian
3. Setelah menyiapkan kebutuhan penelitian, pengambilan data yang berupa soal
yang memiliki jawaban sebagai bahan untuk pengujian sistem.
4. Mengecek proses pemberian jawaban dari input user yang ada di record
database. Jika inputan tidak ada di database maka dilakukan proses pembobotan
kata inputan terhadap semua record di database.
5. Pada proses pencocokan kata di inputan dan record di database menggunakan
algoritma TF-IDF. Algoritma ini memberikan sebuah pembobotan setiap kata
yang ada di teks. Data akan di bobot untuk menentukan apakah pertanyaan
tersebut sesuai dengan output yang akan diberikan.
6. Jika proses pencocokan data dari inputan user tidak ada di dalam database. Maka
pencarian jawaban akan dilakukan diluar dari database menggunakan teknik
web crawling. Web crawling bertugas untuk melakukan scan / pemindaan ke
halaman website dengan mengambil semua data dari tag HTMLnya. Dengan
memanfaatkan atribut yang ada di dalam halaman website, maka dapat
mengambil teks yang ada di dalam halaman tersebut.
7. Setelah melakukan tahapan-tahapan di atas, diperolehlah kesimpulan
berdasarkan penelitian yang telah dilakukan.
Gambar 3.2. Gambaran Umum Cara kerja sistem
Dari Gambar 3.2 diatas dapat dijelakan bahwa penelitian ini terbagi menjadi
beberapa tahapan untuk menghasilkan output berupa jawaban dari input pertanyaan
user. Tahap pertama, data inputan dari user akan dicek terlebih dahulu di dalam
database dengan menggunakan query seperti berikut :
Gambar 3.3. soucecode pengecekan di database
Jika proses query dilakukan tidak menemukan inputan yang sama dari
pertanyaan di dalam database maka hasil pencarian bernilai 0, maka dilakukan
pencarian dengan cara membobotkan setiap kata dari inputan user untuk
dicocokkan di database.
Ya
Dalam melakukan pembobotan , algoritma yang digunakan adalah TF-IDF.
Apabila pembobotan lebih dari 1 record yang memiliki bobot, maka dilakukan
proses sorting berdasarkan bobot. Semakin besar bobot maka semakin besar record
tersebut sebagai output / jawaban. Sebaliknya, jika tidak ada satupun yang terbobot
maka dilakukan proses crawling untuk mencari jawaban diluar dari database.
Pada proses crawling, akan ada proses scan ke halaman website lain.
Dimana tag HTML dihalaman website tersebut akan di ambil berdasarkan class dan
id yang ditargetkan. Setelah dilakukan scan maka dilakukan pembobotan seperti
proses sebelumnya untuk menentukan output/jawaban di dalam proses crawling
tersebut.
3.2. Waktu dan Lokasi Penelitian
Waktu penelitian dilakukan selama dua bulan, dimulai sejak di setujuinya
proposal penelitian ini pada bulan Maret 2018. Lokasi penelitian dilakukan di
Laboratorium SEIS Departemen Teknik Informatika Universitas Hasanuddin.
3.3. Persiapan Data
Data yang disiapkan yaitu data-data pertanyaan dan jawaban yang di ambil
dari berbagai referensi buku dan internet untuk dimasukkan ke dalam database.
Data tersebut diproses sesuai inputan dari user untuk dijadikan output/jawaban.
Untuk menguji tingkat keakuratan sistem dalam menjawab pertanyaan,
maka data yang digunakan sebanyak 400 data.
Gambar 3.4. Data dalam database di phpmyadmin
3.4. Instrumen Penelitian
Instrumen yang digunakan dalam penelitian ini meliputi :
1. Software
a. Mac OS X High Sierra
b. Atom Text Editor
c. Framework PHP(Laravel)
d. Framework Javascript (VUEjs)
e. BOTMAN
f. XAMPP
g. Git dan
h. Web Browser
2. Hardware
a. Macbook Pro
b. Modem
c. Printer
3.5. Perancangan Implementasi Sistem
Rancangan sistem ini bertujuan untuk memberikan gambaran terhadap
sistem yang akan dibuat dan dikembangkan, serta untuk memperjelas detail dan alur
proses dari sistem. Dalam perencangan sistem ini terbagi menjadi dua langkah
secara garis besar yaitu tahap pencocokan kata dan proses crawling.
3.5.1 Pencocokan Kata
Blok diagram untuk pencatatan dapat dilihat pada gambar 3.5. berikut:
Gambar 3.5. Blok diagram tahap Pencocokan kata
a. Tahap pertama adalah user memberikan inputan berupa pertanyaan.
b. Setelah dilakukan proses penginputan pertanyaan maka terlebih
dahulu dilakukan pengecekan query pada database dengan sesuai
inputan user. Jika query ada maka proses selesai dan langsung
memberikan output jawaban yang ada di database. Sebaliknya, jika
tidak ada maka dilakukan proses pembobotan setiap kata di
pertanyaan di database, artinya setiap kata akan dilakukan proses
pencocokan terhadap kata yang ada di setiap record di database.
InputUser Prosespencocokan
Kata
Prosespembobotan
Kata
OutputJawaban
berdasarkanbobotterbesar
c. Berikutnya, data yang memiliki bobot dari proses sebelumnya akan
dilakukan pembobotan untuk setiap kata di record database yang
akan dijumlahkan disetiap kata untuk mendapatkan bobot total pada
setiap record tersebut. Rumus algoritma TF-IDF untuk
membobotkan suatu teks terdiri dari 2 tahap yaitu;
1. Proses Filtering
Pada proses ini, inputan user dibagi menjadi dua kata yaitu kata yang penting dan
kata yang kurang penting. Proses ini sangat dibutuhkan untuk meningkatkan akurasi
pembobotan. Pada proses pembobotan dibutuhkan kata yang penting karena kata
yang tidak penting dimasukkan ke dalam pembobotan, maka besar kemungkinan
jawaban yang diberikan oleh output tidak sesuai dengan input yang diberikan.
Maksud dari kata yang tidak penting adalah di, jelaskan , ke , pergi , termasuk tanda
baca yang terdapat di setiap record walaupun record tersebut tidak memiliki
kesamaan dengan pertanyaan yang di input oleh user. Setelah melakukan proses
filtering, maka kata-kata yang penting disimpan dan dilakukan proses selanjutnya
yaitu pembobotan kata menggunakan algoritma TF-IDF.
2. Proses pembobotan kata
Pada proses pembobotan kata, algoritma yang digunakan yaitu algoritma TF-
IDF. Algoritma ini sangat cocok dalam melakukan pembobotan dalam sekala yang
banyak. Rumus untuk menentukan bobot adalah sebagai berikut
𝑤"# = 𝑡𝑓"#𝑥(𝑙𝑜𝑔-./0
+ 1)…………………………..(2)
Keterangan :
• Wij adalah bobot term (tj) terhadap dokumen (di).
• tfij adalah jumlah kemunculan term (tj) dalam dokumen (di).
• D adalah adalah jumlah semua dokumen yang ada dalam database.
• dfj adalah jumlah dokumen yang mengandung term (tj) (minimal ada satu
kata yaitu term (tj)).
Untuk menghitung tf menggunakan konsep TF BINARY, dimana sebanyak
apapun kata dari inputan user yang muncul pada record dari database hanya akan
terhitung 1 poin pada saat pembobotan.
Berapapun besar nilai tfij, apabila D = dfj, maka akan didapatkan hasil 0
(nol), dikarenakan hasil dari log 1, untuk perhitungan IDF. Untuk itu dapat
ditambahkan nilai 1 pada sisi IDF. Berikut merupakan contoh kasus yang
menggunakan 2 tahap diatas.
Misalnya,
Query : Jelaskan yang dimaksud dengan kingdom monera mirip hewan.
Sehingga didapatkan query terms (Q):
- Jelaskan
- Yang
- Dimaksud
- Dengan
- Kingdom
- Monera
- Mirip
- Hewan
Untuk contoh record pertanyaan di database terdapat:
Record 1 (d1) = Sebutkan contoh dari kingdom pada hewan di biologi
Record 2 (d2) = apa yang dimaksud dengan kingdom monera
Record 3 (d3) = penjelasan kingdom monera mirip hewan yang ada di
pelajaran biologi
Jadi total jumlah record yang ada di dalam database (D) = 3
Untuk setiap query pertanyaan dan record pada database, dilakukan
pemotongan string berdasarkan tiap kata dalam menyusunnya, menghilangkan
tanda baca, angka dan stopword. Setelah melalui proses ini, maka kata sebutkan,
contoh, dari, apa, yang, dimaksud dengan, jelaskan, penjelasan, di pada ketiga
dokumen dihapus sehingga ketiga record di database tersebut menyisakan kata
sebagai berikut :
Record 1 (d1) = kingdom hewan biologi
Record 2 (d2) = kingdom monera
Record 3 (d3) = kingdom monera mirip hewan pelajaran biologi
Semakin besar nilai perhitungan bobot yang diperoleh maka semakin tinggi
tingkat kemiripian record pada database terhadap inputan user. Contoh untuk
perhitungan bobot (w) term query kingdom dalam record 2 (d2) = kingdom biologi,
yaitu: kingdom muncul pada record pertama, di record ketiga dan kedua muncul
kata kingdom, maka query kingdom pada semua record di database memiliki
pembobotan sebesar 1, total record database sebanyak tiga record (D)=3, dari
ketiga dokumen tersebut, kata kingdom muncul pada semua dokumen. sehingga
total record yang mengandung kata kingdom adalah tiga dokumen (df)=3.
Berikut tabel total pembobotan antara kata dari inputan user terhadap ketiga
record yang ada di dalam database.
Tabel 3.1. Total pembobotan antara kata input dan tiga record
Dari hasil tabel 3.1 pembobotan query dari inputan pertanyaan user yakni Jelaskan
yang dimaksud dengan simbiosis mutualisme akan mirip dengan record
database yang ketiga. Karena keluaran/jawaban dari inputan user adalah jawaban
dari record pertanyaan ketiga.
3.5.2 Proses Crawling Website
Proses crawling merupakan tahap akhir dari sistem apabila inputan user
yang dilakukan pembobotan didalam database masih tidak di temukan / total data
pembobotannya adalah 0. Maka dilakukan proses pencarian jawaban diluar dari
database, proses tersebut menggunakan web crawling. Konsep ini menggunakan
teknik pencarian teks berdasarkan tag HTML yang ada di halaman. Selain itu, class
dan id yang menentukan filter yang sesuai dengan yang dicari.
Gambar 3.6. Proses crawling pada website
Seperti yang dilihat pada gambar 3.6, metode crawling mengambil semua
tag HTML yang terdapat pada website tersebut. Kemudian tag HTML yang telah
didapat itu difilter sesuai dengan apa yang di inginkan dengan menggambil class
atau id yang ditargetkan.
3.6 Analisis Kinerja Sistem
3.6.1 Awalan Chat
Pada chatbot, user dapat melakukan percakapan pada sistem dengan
berbagai kata sapaan seperti hai, hallo, assalamualaikum. Dalam membalas
percakapan sistem akan bersifat acak. Semakin banyak user menyapa, maka bot
akan memberikan respon untuk memberikan pertanyaan kepadanya. Selain
menyapa bot dapat memberikan pertanyaan dengan berterima kasih atau
menunjukkan bahwa jawaban yang diberikan kurang jelas.
3.6.2 Proses Menjawab Pertanyan
Pada proses menjawab pertanyaan yang diinput oleh user dilakukan dua
tahap yaitu, mencocokkan pertanyaan yang diinput oleh user dengan database
menggunakan algoritma TF-IDF dan apabila data tidak ada di database maka
dilakukan proses crawling untuk mencari jawaban di luar dari database. Sebelum
memasuki proses ini, proses yang dilakukan adalah proses pencocokan biasa,
dengan mencocokan inputan utuh user ke dalam database. Jika inputannya ada/
cocok di salah satu record database, maka hasil output / jawaban diberikan ke user.
Jika pada proses langsung tersebut tidak ditemukan pertanyaan yang sesuai, maka
dilakukan pembobotan setiap kata yang di input oleh user yang membobot setiap
pertanyaan yang ada di dalam database dengan menggunakan algoritma TF-IDF.
Berikut flowchart terkait cara menjawab sistem
Gambar 3.7. Flowchart dari proses pemberian jawaban dari input user
3.6.2.1 Proses Matching Text Menggunakan Algoritma TF-IDF
Pada proses pencocokan teks didatabase berdasarkan inputan user ke dalam
sistem dilakukan berbagai hal untuk menemukan pola jawabann. Cara yang dipilih
adalah pembobotan kata menggunakan algoritma TF-IDF. Proses ini digunakan
ketika tidak ada jawaban dari inputan user di database. Pertama, sistem memanggil
database untuk mengambil semua pertanyaan-pertanyaan yang ada di dalam
database. Kemudian setiap record yang ada di dalam database akan dibandingkan
dengan pertanyaan inputan di user.
Gambar 3.8. Flowchart dari proses matching TF-IDF
Jika kata di record sama dengan kata di inputan user, maka dilakukan proses
pembobotan kata. Proses pembobotan memiliki aturan yaitu dengan memberikan
pembobotan yang berbeda setiap kata berdasarkan kepentingan kata tersebut.
Misalnya, jika kata sama adalah kata yang tidak terlalu berpengaruh dipertanyaan
seperti Jelaskan , pengertian , sebutkan , apa , yang , dimaksud , dengan , dll. Maka
tidak dilakukan pembobotan / diberikan pembobotan senilai 0, karena kata tersebut
tidak merujuk ke pertanyaan yang spesifik. Akan tetapi , jika kata dari pertanyaan
tersebut adalah poin penting untuk mendapatkan jawaban. Maka akan dilakukan
pembobotan bernilai 1. Berikut pseudecode tentang penggunaan TF-IDF pada
system
Deklarasi
status , apakahTelahMasuk: boolean
angka, poin , kemunculandiDokumen ,nomorHasils3 ,pembobotanTFIDF nomorHasils ,nomorHasilsFix : integer
pilihan_crawl, tfKemunculan, tfKemunculanAll : array
{proses pemilahan kata untuk menentukan kecocokan data yang di input dengan yang ada di database}
for each hasil from database do
for i ← 0 to i < count(jumlah kata di database pertanyaan)
if input_kata_user ← kata_di_database
if kata telah dicek
return tfKemunculanAll += 1
else
return tfKemunculanAll = 1
end if
end for
end for
{proses untuk memilah kata yang tidak perlu untuk di bobot}
foreach kata yang ada didatabase
for j←0 to j < count(Kdata) {Kdata = kata di database validasi}
if input_kata_user ← kata_di_database
if kata telah dicek
return tfKemunculan += 1
else
return tfKemunculan = 1
end if
end for
end foreach
{proses pembobotan kata untuk output dari inputan user}
if j ← Tmax {Tmax = maksimum total kata pertanyaan}
if empty(tfKemunculan) {dicek apakah tfKemunculan tidak kosong}
for o ← 0 to count(TkataDB) {total kata pertanyaan di database}
if kata di database ← tfKemunculan
tfFix ←tfKemunculan;
idf ← log10(Tpertanyaan / Tmuncul)
{Tpertanyaan = total pertanyaan didatabase , Tmuncul = kemunculan kata pada database}
tf_idf ← tfFix x idf
pembobotanTFIDF ← tf_idf
end if
{masukkan data pertanyaan dan nilai bobotnya di database}
pilihan ← array(pembobotanTFIDF)
end for
end if
end if
{mengurutkan hasil pembobotan untuk menentukan jawabannya}
for i ← 1 to n - 1 do
for k ← n downto i + 1 do
if L[k] < L[k-1] then {pertukarkan L[k] dengan L[k-1]}
temp ← L[k]
L[k] ← L[k-1]
L[k-1] ← temp
Endif
Endfor
Endfor
Gambar 3.9. Pseudecode dari proses matching TF-IDF
Setelah melakukan pembobotan setiap kata, maka dilakukan pembobotan
secara keseluruhan untuk setiap record dengan menggunakan rumus algoritma TF-
IDF. Tujuannya adalah untuk menentukan record yang memiliki kecocokan
terbesar dari pertanyaan yang di input oleh user. Semakin besar nilai pembobotan,
maka kecocokan dengan inputan user akan semakin mirip. Kecocokan yang
memiliki nilai bobot paling besar dipilih untuk dijadikan sebagai output / jawaban
untuk user. Metode pengurutan menggunakan quick sort yang cocok untuk
mengurutkan data dengan cepat.
Berikut contoh pembobotan yang dilakukan pada setiap kata di record
database dan setiap kata di input pertanyaan oleh user.
Query / Inputan = pengertian kingdom monera mirip hewan pada
klasifikasi makhluk hidup
Record 1 (d1) = sebutkan klasifikasi system kingdom
Record 2 (d2) = siapa yang memperkenalkan klasifikasi kingdom makhluk
hidup
Record 3 (d3) = Sebutkan contoh dari kingdom pada hewan di biologi
Record 4 (d4) = apa yang dimaksud dengan kingdom monera
Record 5 (d5) = penjelasan kingdom monera mirip hewan yang ada di
pelajaran klasifikasi biologi
Record 6 (d6) = penjelasan kingdom monera mirip tumbuhan yang ada di
pelajaran klasifikasi biologi
Record 7 (d7) = contoh makhluk hidup dari kingdom monera
Record 8 (d8) = apa yang dimaksud dengan klasifikasi makhluk hidup
Record 9 (d9) = sebutkan tujuan dari klasifikasi makhluk hidup
Record 10 (d10) = manfaat dari klasifikasi makhluk hidup
Record 11 (d11) = jelaskan tata nama ilmiah makhluk hidup
Record 12 (d12) = sebutkan semua ciri - ciri dari klasifikasi makhluk hidup
Record 13 (d13) = sebutkan ciri - ciri dari klasifikasi makhluk hidup
berdasarkan persamaan
Record 14 (d14) = sebutkan ciri - ciri dari klasifikasi makhluk hidup
berdasarkan perbedaan
Record 15 (d15) = sebutkan ciri - ciri dari klasifikasi makhluk hidup
berdasarkan morfologi
Record 16 (d16) = sebutkan ciri - ciri dari klasifikasi makhluk hidup
berdasarkan anatomi
Record 17 (d17) = jelaskan tingkatan klasifikasi makhluk hidup
Record 18 (d18) = jelaskan tahapan klasifikasi makhluk hidup
Record 19 (d19) = jelaskan golongan klasifikasi system alami pada makhluk
hidup
Record 20 (d20) = jelaskan golongan klasifikasi system buatan pada makhluk
hidup
Record 21 (d21) = apa yang dimaksud kingdom / regnum pada klasifikasi
makhluk hidup
Record 22 (d22) = apa yang dimaksud filum / divisio pada klasifikasi makhluk
hidup
Record 23 (d23) = apa yang dimaksud kelas pada klasifikasi makhluk hidup
Record 24 (d24) = apa yang dimaksud ordo pada klasifikasi makhluk hidup
Record 25 (d25) = apa yang dimaksud famili pada klasifikasi makhluk hidup
Record 26 (d26) = apa yang dimaksud genus pada klasifikasi makhluk hidup
Record 27 (d27) = apa yang dimaksud spesies pada klasifikasi makhluk hidup
Proses selanjutnya adalah melakukan proses filtering untuk menghilang
kata-kata yang tidak penting untuk diberikan pembobotan. Maka kata-kata di input
dan record akan melakukan pembobotan sebagai berikut :
Query / Inputan = kingdom monera mirip hewan klasifikasi makhluk hidup
Record 1 (d1) = klasifikasi system kingdom
Record 2 (d2) = memperkenalkan klasifikasi kingdom makhluk hidup
Record 3 (d3) = contoh kingdom pada hewan di biologi
Record 4 (d4) = kingdom monera
Record 5 (d5) = kingdom monera mirip hewan pelajaran klasifikasi biologi
Record 6 (d6) = kingdom monera mirip tumbuhan pelajaran klasifikasi biologi
Record 7 (d7) = contoh makhluk hidup kingdom monera
Record 8 (d8) = klasifikasi makhluk hidup
Record 9 (d9) = tujuan klasifikasi makhluk hidup
Record 10 (d10) = manfaat klasifikasi makhluk hidup
Record 11 (d11) = tata nama ilmiah makhluk hidup
Record 12 (d12) = semua ciri klasifikasi makhluk hidup
Record 13 (d13) = ciri klasifikasi makhluk hidup berdasarkan persamaan
Record 14 (d14) = ciri klasifikasi makhluk hidup berdasarkan perbedaan
Record 15 (d15) = ciri dari klasifikasi makhluk hidup berdasarkan morfologi
Record 16 (d16) = ciri dari klasifikasi makhluk hidup berdasarkan anatomi
Record 17 (d17) = tingkatan klasifikasi makhluk hidup
Record 18 (d18) = tahapan klasifikasi makhluk hidup
Record 19 (d19) = golongan klasifikasi system alami makhluk hidup
Record 20 (d20) = golongan klasifikasi system buatan makhluk hidup
Record 21 (d21) = kingdom / regnum klasifikasi makhluk hidup
Record 22 (d22) = filum / divisio klasifikasi makhluk hidup
Record 23 (d23) = kelas klasifikasi makhluk hidup
Record 24 (d24) = ordo klasifikasi makhluk hidup
Record 25 (d25) = famili klasifikasi makhluk hidup
Record 26 (d26) = genus klasifikasi makhluk hidup
Record 27 (d27) = spesies klasifikasi makhluk hidup
Setelah melakukan filtering, maka dilakukan pembobotan dari hasil filtering
kata yang tidak penting. Rumus yang digunakan adalah rumus dari algoritma TF-
IDF untuk pembobotan. Contohnya pada inputan user untuk pembobotan inputan
user dengan record pertama (d1) yang ada di database.
Inputan user / query = kingdom monera mirip hewan klasifikasi makhluk hidup
Record 1 (d1) = klasifikasi system kingdom
Kata yang sama antara query dan record adalah dua kata, yaitu kingdom dan
klasifikasi TF, dengan menggunkan sifat BINARY yaitu sebanyak apapun kata
dari inputan user yang muncul di record database. Maka pembobotan tetap
terhitung 1, jika tidak ada maka terhitung 0. Pada kasus ini, kata kingdom dan
klasifikasi diberikan bobot masing-masing 1. Total kemunculan kingdom
dikeseluruhan record yang akan di berikan pembobotan adalah 8 record maka df
dari kingdom adalah 8 sedangkan df dari klasifikasi adalah 24. Untuk IDF yang
didapatkan maka hasil pembagian total record (27 record) yang akan dibobot dan
disimbolkan D dan total kemunculan kata disimbolkan df kemudian hasil tersebut
dilogaritmakan dengan basis 10.
Tabel 3.2. Total nilai pembobotan untuk inputan pertanyaan user terhadap
record pertanyaan
Untuk kata kingdom :
TF = 1
df= 8
IDF = log10(27/8) = 0.528274
W1 = TF*(IDF+1)
W1 = 1 * (0.528274 + 1)
W1 = 1.528274
Untuk kata klasifikasi :
TF = 1
df= 24
IDF = log10(27/24) = 0.0511525
W2 = TF*(IDF+1)
W2 = 1 * (0.0511525+ 1)
W2 = 1.0511525
Wtot = W1 + W2
Wtot = 1.528274 + 1.0511525
Wtot = 2.5794263
Maka total nilai pembobotan untuk inputan pertanyaan user terhadap record
pertanyaan pertama (d1) adalah 2.5794263.
Berikut table 3.3 perhitungan lengkap untuk setiap record pertanyaan yang ada
di dalam database.
Tabel 3.3. Perhitungan setiap recotd pertanyaan
Q kingd
om
mone
ra mirip
hew
an
klasifika
si
makhlu
k hidup
T
F
d1 1 0 0 0 1 0 0
d2 1 0 0 0 1 1 1
d3 1 0 0 1 0 0 0
d4 1 1 0 0 0 0 0
d5 1 1 1 1 1 0 0
d6 1 1 1 0 1 0 0
d7 1 1 0 0 0 1 1
d8 0 0 0 0 1 1 1
d9 0 0 0 0 1 1 1
d10 0 0 0 0 1 1 1
d11 0 0 0 0 1 1 1
d12 0 0 0 0 1 1 1
d13 0 0 0 0 1 1 1
d14 0 0 0 0 1 1 1
d15 0 0 0 0 1 1 1
d16 0 0 0 0 1 1 1
d17 0 0 0 0 1 1 1
d18 0 0 0 0 1 1 1
d19 0 0 0 0 1 1 1
d20 0 0 0 0 1 1 1
d21 1 0 0 0 1 1 1
d22 0 0 0 0 1 1 1
d23 0 0 0 0 1 1 1
d24 0 0 0 0 1 1 1
d25 0 0 0 0 1 1 1
d26 0 0 0 0 1 1 1
d27 0 0 0 0 1 1 1
df 8 4 2 2 24 22 22
D/df 3.375 6.75 13.5 13.5 1.125 1.22727
3
1.227
273
IDF 0.528
274
0.82
930
1.13
033
1.13
03
0.051152
5
0.08894
1
0.088
941
IDF+1 1.528
274
1.82
930
2.13
033
2.13
03
1.051152
5
1.08894
1
1.088
941 SUM (W)
Q kingd
om
mone
ra mirip
hew
an
klasifika
si
makhlu
k hidup
W
=
T
F
*
(I
D
F
+
1)
d1 1.528
274 0 0 0
1.051152
5 0 0 2.5794263
d2 1.528
274 0 0 0
1.051152
5
1.08894
1
1.088
941
4.75730846
6
d3 1.528
274 0 0
2.13
03 0 0 0
3.65860754
6
d4 1.528
274
1.82
930 0 0 0 0 0 3.35757755
d5 1.528
274
1.82
930
2.13
033
2.13
03
1.051152
5 0 0
8.66939760
9
d6 1.528
274
1.82
930
2.13
033 0
1.051152
5 0 0
6.53906384
1
d7 1.528
274
1.82
930 0 0 0
1.08894
1
1.088
941
5.53545971
7
d8 0 0 0 0 1.051152
5
1.08894
1
1.088
941
3.22903468
9
d9 0 0 0 0 1.051152
5
1.08894
1
1.088
941
3.22903468
9
d10 0 0 0 0 1.051152
5
1.08894
1
1.088
941
3.22903468
9
d11 0 0 0 0 1.051152
5
1.08894
1
1.088
941
3.22903468
9
d12 0 0 0 0 1.051152
5
1.08894
1
1.088
941
3.22903468
9
d13 0 0 0 0 1.051152
5
1.08894
1
1.088
941
3.22903468
9
d14 0 0 0 0 1.051152
5
1.08894
1
1.088
941
3.22903468
9
d15 0 0 0 0 1.051152
5
1.08894
1
1.088
941
3.22903468
9
d16 0 0 0 0 1.051152
5
1.08894
1
1.088
941
3.22903468
9
d17 0 0 0 0 1.051152
5
1.08894
1
1.088
941
3.22903468
9
d18 0 0 0 0 1.051152
5
1.08894
1
1.088
941
3.22903468
9
d19 0 0 0 0 1.051152
5
1.08894
1
1.088
941
3.22903468
9
d20 0 0 0 0 1.051152
5
1.08894
1
1.088
941
3.22903468
9
d21 1.528
274 0 0 0
1.051152
5
1.08894
1
1.088
941
4.75730846
6
d22 0 0 0 0 1.051152
5
1.08894
1
1.088
941
3.22903468
9
d23 0 0 0 0 1.051152
5
1.08894
1
1.088
941
3.22903468
9
d24 0 0 0 0 1.051152
5
1.08894
1
1.088
941
3.22903468
9
d25 0 0 0 0 1.051152
5
1.08894
1
1.088
941
3.22903468
9
d26 0 0 0 0 1.051152
5
1.08894
1
1.088
941
3.22903468
9
d27 0 0 0 0 1.051152
5
1.08894
1
1.088
941
3.22903468
9
Dari hasil pembobotan diatas , maka record d5 memiliki pembobotan lebih tinggi
dari yang lainnya. Maka keluaran jawaban dari input pertanyaan yang dimasukkan
oleh user adalah jawaban dari record d5
Jika pertanyaan yang di input oleh user telah diproses di database dan
setelah di proses tidak ada data/pertanyaan yang sesuai (dalam hal ini tidak ada
satupun nilai pembobotan disetiap record). Maka tahap selanjutnya yang akan
dilakukan adalah proses crawling/ mencari data di luar dari system database yang
nantinya bisa menjawab pertanyaan user.
3.6.2.2 Proses Crawling Website
Pada proses crawling pencarian data tidak dilakukan pada database sistem
melainkan di halaman yang ditargetkan untuk melakukan crawling.
Gambar 3.10. Flowchart dari proses crawling website
Pada tahap ini, sistem mengambil tag HTML pada website yang ingin di
crawling berdasarkan domain yang di targetkan. Setelah menargetkan domain yang
ingin di crawling data tersebut, proses selanjutnya melakukan filter tag-tag HTML
berdasarkan tag class dan id yang sudah tentukan. Selanjtnya, menyimpan text ke
dalam tag yang telah difilter sebelumnya ke dalam sebuah array, pada simulasi
disini menyimpan 2 jenis teks, yaitu teks untuk pertanyaan yang akan melakukan
proses pencocokan inputan dari user. Proses pencocokan sama seperti pencocokan
inputan user dan database. Pada proses ini, menampung jawaban yang akan
digunakan ketika pertanyaannya terpilih sebagai jawaban yang diberikan oleh user.
Berikut contoh pembobotan yang dilakukan pada setiap hasil crawling dan
setiap kata di input pertanyaan user.
Query / Inputan = jelaskan yang dimaksud dengan system pemerintahan
parlementer secara umum
Record 1 (d1) = pengertian umum system pemerintahan presidensial
Record 2 (d2) = pengertian umum system pemerintahan parlementer
Record 3 (d3) = perbedaan system pemerintahan parlementer
Record 4 (d4) = negara yang menerapkan system pemerintahan parlementer
Record 5 (d5) = negara yang menerapkan system pemerintahan presidensial
Record 6 (d6) = lembaga yang ada di system pemerintahan di indonesia
Sama seperti proses sebelumnya kata dicocokkan dengan record pada
database. Proses selanjutnya melakukan proses filtering untuk menghilang kata-
kata yang tidak penting untuk diberika pembobotan. Maka kata-kata di inputan dan
record yang akan dilakukan pembobotan adalah sebagai berikut :
Query / Inputan = system pemerintahan parlementer secara umum
Record 1 (d1) = secara umum system pemerintahan presidensial
Record 2 (d2) = secara umum system pemerintahan parlementer
Record 3 (d3) = perbedaan system pemerintahan parlementer presidensial
Record 4 (d4) = negara menerapkan system pemerintahan parlementer
Record 5 (d5) = negara menerapkan system pemerintahan presidensial
Record 6 (d6) = lembaga system pemerintahan Indonesia
Dari hasil filtering diatas maka diperoleh hasil pembobotan pada table 3.4
seperti dibawah.
Tabel 3.4. Hasil pembobotan dengan proses filtering
Q sistem pemerin
tahan
parlement
er secara umum
T
F
d1 1 0 0 1 1
d2 1 0 1 1 1
d3 1 0 1 0 0
d4 1 1 1 0 0
d5 1 1 0 0 0
d6 1 1 0 0 0
df 6 3 3 2 2
D/df 1 2 2 3 3
IDF 0 0.30102
9 0.301029
0.4771
2
0.4771212
5
IDF+
1 1
1.30102
9
1.3010299
9
1.4771
2
1.4771212
5
SUM
(W)
W
=
T
F
*
(I
D
F
+
1)
d1 1 0 0 1.4771
2
1.4771212
5
3.95424250
9
d2 1 0 1.3010299
9
1.4771
2
1.4771212
5
5.25527250
5
d3 1 0 1.3010299
9 0 0
2.30102999
6
d4 1 1.30102
9
1.3010299
9 0 0
3.60205999
1
d5 1 1.30102
9 0 0 0
2.30102999
6
d6 1 1.30102
9 0 0 0
2.30102999
6
Dari proses perhitungan pembobotan tersebut dapat diambil keluaran dengan
pembobotan tertinggi yaitu record kedua (d2) sebagai jawaban dari input
pertanyaan user, setelah melakukan crawling.
BAB IV
HASIL DAN PEMBAHASAN
4.1 Hasil Penelitian
4.1.1 Hasil Proses Chatbot
Pada proses chatbot, penulis melakukan beberapa skenario pertanyaan yang
akan dijawab oleh sistem tersebut. Pada kasus ini, sistem penulis menginputkan
pertanyaan tetapi pertanyaan yang diinput beragam soal yang akan ditanyakan
seperti penjelasan, contoh, dan detail. Kemudian menginput tentang perbedaan dan
persamaannya, dan sekaligus perbandingan / persamaan dari dua pertanyaan dalam
satu inputan. Berikut hasil skenario yang diberikan.
● Hasil pertama
Menginputkan satu pertanyaan yang akan dijawab oleh sistem. Pertanyaan
tersebut diolah dalam beberapa metode yang akan dijawab oleh sistem berupa
output jawaban.
● Hasil kedua
Menginput satu pertanyaan beserta contoh dan penjelasan yang lebih detail
terkait pertanyaan tersebut.
● Hasil ketiga
Menginput satu pertanyaan ditambahkan dengan contoh dan penjelasan
yang lebih detail. Kemudian pertanyaan selanjutnya berbeda dari pertanyaan
pertama. Jika pada proses user menginput ke sistem bahwa akan bertanya lebih
dari satu kali, maka sistem memberikan respon pertama yaitu apakah
pertanyaan user yang kedua berhubungan dengan inputan user selanjutnya.
Jika berhubungan, maka sistem menyimpan pertanyaan pertama ke dalam
historyn yang akan digunakan untuk menanyakan perbandingan ataupun
persamaan dengan soal yang selanjutnya.
● Hasil keempat
Menginput satu pertanyaan, kemudian menambahkan pertanyaan lagi,
setelah pertanyaan yang di input oleh user, maka inputan sebelumnya akan
tersimpan di history. Kemudian jika user melakukan inputan untuk pertanyaan
perbedaan ataupun persamaan maka sistem akan memberikan perbedaan /
persamaan dari dua inputan user tersebut. Terkhusus untuk persamaan, jika
keduanya tidak memiliki persamaan maka diberikan respon output / jawaban
tersebut tidak memiliki persamaan.
● Hasil kelima
Menginput pertanyaan yang bertujuan untuk membedakan dua
pembahasan yang berbeda oleh user. Pada proses ini, sistem akan mengenali
satu per satu dari pembahasan yang input. Selanjutnya, sistem membagi proses
tersebut dan mengubahnya menjadi query kemudian didapatkan jawabannya
setiap query yang di satukan untuk dijadikan sebuah output.
● Hasil keenam
Menginput pertanyaan yang bertujuan untuk mencari persamaan dari dua
pembahasan yang di input oleh user secara bersamaan. Prosesnya mirip dengan
mencari perbedaan, tetapi proses tersebut akan mengambil output dari table
yang khusus untuk persamaan setiap pembahasan. Jika setiap query tidak
memiliki persamaan satu sama lain. Maka keluaran dari sistem mengatakan
bahwa dua pembahasan tersebut tidak memiliki persamaan.
● Hasil ketujuh
Pada proses menggabungkan antara inputan user setiap pertanyaan,
kemudian menentukan perbedaan dan juga persamaan, lalu dapat menginput
pertanyaan terkait satu pembahasan dengan menambahkan contoh dan juga
detailnya. Pada proses ini dapat dilihat bagaimana sistem dapat menentukan
historynya pada setiap soal yang terus di input. Jika sistem mengidentifikasikan
pertanyaan diluar dari perbedaan dan persamaan. Maka, history dari sistem
tersebut hanya dapat mengingat satu pertanyaan sebelum saja.
4.1.2 Hasil Proses Pengujian Record Pada Database
User menginput di halaman chat terkait pertanyaan yang diperlukan dan
dijawab oleh sistem. Sehingga, ada beberapa tahapan yang akan dilakukan yaitu
mengecek langsung di database dengan menggunakan query biasa dan tahapan
melakukan pencocokan kata pada inputan user terhadap setiap record yang ada di
database. Pada pengujian ini user menginput pertanyaan sebanyak 30 secara
langsung yang akan diuji tingkat akurasi apabila menggunakan query sederhana dan
menggunakan metode pencocokan data. Melalui hasil pengujian ini maka
memberikan tingkat akurasi terhadap penggunaan sistem. Setelah,melihat tingkat
akurasi dalam pencocokan data pertanyaan yang di input oleh user dan yang
terdapat di record database.
4.1.2.1 Hasil Pengujian Pencocokan Input User Dengan Database Secara
Langsung
Pada tahap ini, inputan dari user langsung dicek pada database menggunakan
query biasa yaitu,
Select * from database where inputan_user = record_database
Setelah melakukan query diatas maka setiap record di database diperiksa
setiap recordnya untuk mencari pertanyaan yang sama.
Tabel 4.1. Hasil pegujian pencocokan user dengan database
Pertanyaan Jawaban Valid
sebutkan klasifikasi
system kingdom
Dalam biologi, kerajaan (bahasa Inggris: Kingdom; Latin: regnum, pl. regna) adalah tingkatan paling atas dari tingkatan klasifikasi makhluk hidup. Khusus dalam sistem tiga domain, kingdom adalah satu tingkat di bawah domain. Sistem klasifikasi yang berkembang saat ini adalah membagi makhluk hidup menjadi lima kingdom. Adapun kelima kingdom ini terdiri dari Monera, Protista, Fungi, Plantae, dan Animalia. Ada empat dasar penempatan makhluk hidup ke dalam salah satu kingdom, yaitu ada atau tidaknya inti sel, banyaknya sel yang tampak, cara
YA
pembuatan makanan, dan cara gerak makhluk hidup.
siapa yang
memperkenalkan
klasifikasi kingdom
makhluk hidup
C. Linnaeus. Olehnya, kelompok
makhluk hidup diklasifikasikan menjadi
dua kelompok, yakni animalia (hewan)
dan juga vegetabilia (tumbuhan).
Linnaeus memperkenalkan tentang
klasifikasi makhluk hidup dengan urutan
sebagai berikut (tertinggi ke terandah):
Kingdom – Filium (Hewan) / Divisio
(Tumbuhan) – Klass – Ordo – Famiia –
Genus – Spesies
YA
Pertanyaan Jawaban Valid
jelaskan tentang
kingdom monera
Makhluk hidup yang termasuk kelompok
kingdom monera, yaitu bakteri (misalnya
spirillum, basil, dan kokus) dan
sianobakteri (misalnya ganggang biru).
Anggota kingdom ini terdiri dari makhluk
hidup kecil (mikroorganisme) yang bersel
satu dengan struktur tubuh sangat
sederhana. Selnya tidak memiliki
membran inti (prokariotik) yang
YA
melindungi inti sel. kelompok kingdom
monera hanya dapat dilihat dengan
menggunakan mikroskop.
Monera berkembang biak dengan
membelah diri secara langsung
(amitosis).
jelaskan tentang
kingdom protista
kingdom protista terdiri dari 2 macam :
a) Protista Mirip Hewan Protista adalah
makhluk hidup yang sederhana dan hidup
di tempat yang berair. Protista ada yang
bersel satu dan ada yang bersel banyak.
Anggota protista ada yang menyerupai
tumbuhan, menyerupai hewan, dan
menyerupai jamur. Anggota protista
dikatakan menyerupai tumbuhan karena
memperoleh makanan dengan cara
fotosintesis. Menyerupai hewan dan
jamur karena memperoleh makanan dari
organisme lain. Protista yang menyerupai
hewan di antaranya Amoeba dan
Paramaecium.
b) Protista Mirip Tumbuhan
Jenis Protista yang mirip tumbuhan
adalah Euglena viridis. Euglena viridis
mirip tumbuhan karena dapat membuat
YA
makanan sendiri melalui proses
fotosintesis. Ciri-ciri Euglena viridis di
antaranya hidup di air tawar, berklorofil,
dan bergerak dengan flagel atau bulu
cambuk.
Pertanyaan Jawaban Valid
jelaskan tentang
kingdom protista mirip
hewan
Pertanyaan untuk Protista Mirip Hewan
Protista adalah makhluk hidup yang
sederhana dan hidup di tempat yang
berair. Protista ada yang bersel satu dan
ada yang bersel banyak. Anggota protista
ada yang menyerupai tumbuhan,
menyerupai hewan, dan menyerupai
jamur. Anggota protista dikatakan
menyerupai tumbuhan karena
memperoleh makanan dengan cara
fotosintesis. Menyerupai hewan dan
jamur karena memperoleh makanan dari
organisme lain. Protista yang menyerupai
hewan di antaranya Amoeba dan
Paramaecium.
YA
Pertanyaan Jawaban Valid
jelaskan tentang
kingdom protista mirip
tumbuhan
Penjelasan untuk Protista Mirip
Tumbuhan
Jenis Protista yang mirip tumbuhan
adalah Euglena viridis. Euglena viridis
mirip tumbuhan karena dapat membuat
makanan sendiri melalui proses
fotosintesis. Ciri-ciri Euglena viridis di
antaranya hidup di air tawar, berklorofil,
dan bergerak dengan flagel atau bulu
cambuk.
YA
jelaskan tentang
kingdom fungi / jamur
Fungi merupakan makhluk hidup kecil
(mikroorganisme) yang berperan sebagai
pemakan (konsumen) dan dekomposer
(pengurai). Fungi memperoleh makanan
dengan cara menyerap (mengabsorpsi)
sisa makhluk hidup yang telah mati.
Makhluk hidup yang termasuk fungi
memiliki ciri berinti sel, berdinding sel,
tidak memiliki klorofil, dan cara
memperoleh makanan dengan saprofit
dan parasit. Beberapa filum atau divisi
yang masuk dalam kingdom fungi adalah:
Divisi Phycomycetes,
Ascomycetes,Basidiomycetes,Deuterom
ycetes
YA
Pertanyaan Jawaban Valid
Jelaskan yang dimaksud
dengan zat makanan
mikro
Zat makanan mikro adalah zat makanan
yang diperlukan tubuh dalam jumlah
yang sedikit, meliputi vitamin dan
mineral
YA
Sebutkan dan jelaskan
tiga contoh penyakit
pada sistem pencernaan
manusia
a. Partotitis atau infeksi pada kelenjar
parotis. Gangguan ini sering disebut
penyakit gondong
b. Kolik adalah rasa nyeri pada perut
karena makan makanan yang
mengandung zat yang merangsang,
seperti cabai atau lada
c. Diare merupakan feses keluar dalam
bentuk encer karena adanya infeksi pada
kolon
YA
Jelaskan yang dimaksud
dengan defekasi
defekasi adalah proses pelepasan feses YA
Sebutkan dan jelaskan
dua jenis gangguan
pencernaan pada
lambung
a. Ulkus (tulang lambung) adalah radang
pada dinding lambung
b. Kolik adalah rasa nyeri pada perut
karena makan makanan yang
mengandung zat yang merangsang,
misalnya cabai dan lada.
YA
Sebutkan 3 ciri
mikroskop elektron
a. menggunakan elektron sebagai
pengganti cahaya YA
b. bayangan dapat diperbesar hingga
sejuta kali
c. tidak bisa dipakai untuk mengamati
objek yang masih hidup
Apa perbedaan sel
prokariotik dan sel
eukariotik
Sel eukariotik mempunyai membran inti,
sedangkan sel prokariotik punya YA
Sebutkan bagian-bagian
sel bakteri beserta
fungsinya
a. dinding sel, sebagai pelindung dan
pemberi bentuk yang tetap pada sel
b. membran plasma, sebagai pelindung
molekular sel dari lingkungan di
sekitarnya
c. sitoplasma, mengandung enzim-enzim
yang berperan dalam metabolisme sel
d. mesosom, sebagai penghasil energi
e. ribosom, sebagai tempat sintesis
protein
f. DNA, sebagai pembawa informasi
genetik
g. RNA, sebagai pembawa kode-kode
genetik sesuai dengan pesanan DNA
YA
Pertanyaan Jawaban Valid
Sebutkan komponen
utama penyusun
sitoplasma
– cairan sel (sitosol)
YA
– jaringan benang (filamen) dan serabut
yang saling berhubungan
– substansi simpanan dalam sitoplasma
– organel-organel sel
Sebutkan 3 faktor yang
mempengaruhi spesiasi
– domestikasi
– mekanisme isolasi
– poliploidi
YA
Apa yang dimaksud
dengan domestikasi dan
poliploidi
– Domestikasi merupakan usaha
pembudidayaan hewan dan tumbuhan
liar.
– Poliploidi adalah suatu kondisi pada
organisme tertentu yang memiliki lebih
dari sepasang kromosom.
YA
Jelaskan cabang biologi
ekologi adalah
hubungan timbal balik antara mahluk
hidup dengan lingkungan YA
Sebutkan 4 penyakit
pada tumbuhan yang
disebabkan oleh virus
– CMV menyerang timun
- BMV menyerang buncis
- TMV menyerang tembakau
- WMV menyerang gandum
YA
jelaskan bakteri
berdasarkan cara
memperoleh makanan
autotrof : yaitu bakteri yang mampu
membuat makanan sendiri
Heterotrof : yaitu bakteri yang tidak
dapat membuat makanan sendiri,
makanan diperoleh dari mahluk hidup
lain.
YA
Tabel 4.2. Hasil akurasi
Total Siswa Jawaban Valid Jawaban Tidak
Valid Nilai
20 389 11 97.25%
Dari hasil yang telah diberikan oleh user, terkait 20 pertanyaan yang secara
acak. Adapun teknik dalam pengujian yang dilakukan yaitu pengujian akurasi
system dalam memberikan jawaban ke user. Berikut perhitungan akurasi
pertanyaan dari user disebut dengan formula (1)
𝐴𝑘𝑢𝑟𝑎𝑠𝑖 = 𝐽𝑢𝑚𝑙𝑎ℎ𝑝𝑒𝑟𝑡𝑎𝑛𝑦𝑎𝑎𝑛𝑏𝑒𝑛𝑎𝑟
𝑡𝑜𝑡𝑎𝑙𝑝𝑒𝑟𝑡𝑎𝑛𝑦𝑎𝑎𝑛𝑥100%…(1)
Ada beberapa kendala yang terjadi saat melakukan penginputan pertanyaan,
yakni pertanyaan yang diluar dari mata pelajaran biologi dan pertanya yang
menggunakan kosa kata yang kurang jelas. Pada kolom valid memperlihatkan
tingkat akurasi dari jawaban yang diberikan oleh sistem ke user yang melakukan
inputan pertanyaan sebelumnya. Pada pengujian ini, tingkat valid yang didapatkan
dari 20 user yang melakukan inputan sebanyak 20 pertanyaan adalah 97.25%
4.1.3 Hasil Proses Pengujian Crawling
Proses ini dilakukan apabila proses pencocokan data di database tidak
menemukan pertanyaan yang mirip dengan inputan dari user. Jika hal seperti ini
terjadi, maka dilakukan proses crawling atau pengambilan data diluar dari
database, yaitu sistem website yang lain. Hal ini dilakukan untuk memberikan
jawaban ke user dengan mengusahakan lagi mencari di halaman website jika
didalam database tidak menemukan jawaban. Berikut data pengujian yang
dilakukan untuk melihat tingkat akurasi mendapatkan jawaban dengan
menggunakan metode crawling pada website dengan menguji 10 pertanyaan yang
di input oleh user.
Tabel 4.3. Hasil proses pengujian crawling
Pertanyaan Data Crawling yang mirip
berdasarkan TF-IDF
Akurasi jawaban
yang valid
Pengertian data
primer Jelaskan tentang data primer akurat
Pengertian dari data
sekunder Jelaskan tentang data sekunder akurat
Apa yang dimaksud
dengan data primer
georgrafi
Apakah data primer diperlukan
dalam penelitian geografis ? Tidak akurat
Ciri – ciri dari data
sekunder pelajaran
geografi
Apa yang menjadi ciri khas
dalam sebuah penelitian geografi Tidak akurat
Sebutkan manfaat
data sekunder
Apa manfaat menggunakan data
sekunder akurat
Jelaskan unsur
geosfer Sebutkan unsur-unsur geosfer akurat
Jelaskan tentang
pendekatan ruangan
Apakah yang dimaksud dengan
pendekatan keruangan ( Spatial
Approach )
akurat
Kenapa data harus
diverifikasi
Mengapa suatu data perlu
diverifikasi akurat
Jelaskan tentang
pergeseran lempeng
Jelaskan mengapa benua dan
samudra bergeser Tidak akurat
Jelaskan tentang
pergeseran lempeng
Bagaimana cara mengukur
pergeseran lempeng benua atau
samudra
Tidak akurat
Tabel 4.4. Hasil akurasi
Total Siswa Total Akurat
Jawaban
Total Tidak
Akurat Jawaban
Nilai
20 96 26 87%
Tabel diatas merupakan pertanyaan user yang tidak dapat di dalam database
sistem. Sehingga proses yang akan dilakukan menggunakan metode crawling untuk
mendapatkan jawaban dari pertanyaan tersebut. Dari hasil diatas dihitung dengan
menggunakan formula 1, beberapa pertanyaan yang di input oleh user dan tidak
terdapat didatabase kemudian dilakukan pencarian jawaban dengan metode
crawling memiliki tingkat akurasi 87%. Hal ini disebabkan karena pertanyaan yang
ada diuser terdapat di website yang di crawling. Validasi akurasi jawaban
merupakan bentuk penilaian dari user apakah pertanyaan yang ditanyakan sesuai
dengan yang sistem berikan. Pada pengujian yang tidak akurat dikarenakan
keleluasaan user dalam menginput pertanyaan diluar pelajaran biologi, dimana di
website crawlingnya juga memiliki keterbatasan data pertanyaan.
4.2 Pembahasan
Dari beberapa hasil skenario / proses yang dilakukan dalam menginput
pertanyaan. Penyimpanan inputan sebelumnya berguna dalam hal pengambilan
keputusan untuk inputan selanjutnya, yaitu jika pada inputan selanjutnya user
meminta perbandingan ataupun persamaan dari setiap pembahasan. Maka
diperlukan data sebelumnya untuk melakukannya. Untuk mencari perbedaan dari
pertanyaan sekarang dan juga pertanyaan sebelumnya maka harus dipastikan bahwa
inputan sebelumnya masih ada / tersimpan di dalam history, karena jika tidak maka
keluaran / output di sistem akan mengatakan bahwa tidak ada yang bisa
dibandingkan. Jika diminta persamaan dari kedua pembahasan tersebut, maka
proses yang pertama adalah dengan mencocokkan tipe pembahasan dari setiap
inputan. Jika memiliki tipe pembahasan yang sama, sehingga akan di proses di tabel
persamaan yang sudah disiapkan sebelumnya.
Pada tahap pemilihan jawaban dari inputan yang diberikan oleh user
terhadap tabel database yang telah disiapkan. Dilakukan metode pembobotan kata
dengan menggunakan algoritma TF-IDF. Pada proses pembobotan tersebut akan
dipilih yang kata dari query inputan banyak bobotnya. Semakin banyak bobot yang
ada di query dengan pertanyaan yang sudah ada di database maka semakin besar
pula kesempatan pertanyaan yang didatabase akan menjadi output pada pertanyaan
user tersebut. Dalam hal ini, jika pada kasus yang sama terdapat banyak pertanyaan
yang ada di database yang terbobot, maka akan dilakukan pengurutan sesuai query
yang terbobot paling besar.
Jika pada pertanyaan yang di input oleh user tidak terdapat jawaban di
database. Maka dilakukan tahap crawling, yaitu proses scan di halaman website
untuk nantinya akan dikumpulkan data-data sesuai tag HTML yang telah
ditentukan. Kemudian, hasil data yang dikumpulkan akan dilakukan proses
pembobotan seperti proses sebelumnya yang menggunakan database, semakin
besar hasil pembobotan antara data crawling dengan data inputan user, maka data
tersebut akan di ambil dan dijadikan sebagai output dari pertanyaan user. Akan
tetapi jika jawaban dari proses query inputan user tidak ditemukan lagi. Maka akan
diberikan jawaban default yakni jawaban dari pertanyaan tersebut tidak ditemukan.
Banyak faktor yang mengakibatkan hal ini terjadi yaitu kurangnya data di database,
dan inputan dari user yang tidak bisa dimengerti oleh sistem sehingga sistem tidak
dapat memproses menggunakan metode pembobotan.
BAB V
PENUTUP
5.1 Kesimpulan
Dari hasil analisis yang telah dilakukan dalam pengujian sistem
chatbot untuk layanan tanya jawab , maka penulis dapat disimpulkan bahwa:
1. Pemilihan jawaban dari database berdasarkan inputan pertanyaan dari
user dapat ditentukan dengan cara dilakukan pembobotan kata
menggunakan metode pencocokan di dalam algoritma TF-IDF.
Pencocokan digunakan untuk mencari kemiripan inputan pertanyaan dari
user terhadap record pertanyaan yang sudah disediakan di database yang
nantinya akan dikeluarkan sebagai jawaban. Didalam sistem ini juga bisa
mencari perbedaan dan persamaan terkait dua pembahasan yang di input
oleh user baik secara bersamaan / dua pembahasan dalam satu input
maupun satu per satu / di input satu pembahasan kemudian di input lagi
pembahasan yang lain.
2. Jika inputan pertanyaan user tidak ditemukan, maka dilakukan proses
crawling pada website forum yang telah ada untuk menentukan tag
HTML yang ingin di crawling / diambil data tagnya. Setelah semua data
dari tag HTML yang ditargetkan selesai, maka dilakukan proses yang
sama seperti pada database yaitu melakukan pembobotan pertanyaan
dari user terhadap pertanyaan yang di dapat dari hasil crawling dengan
menggunakan metode pencocokan kata di dalam algoritma TF-IDF.
5.2 Saran
Sehubungan dengan selesainya proses pembuatan skripsi ini, penulis
bermaksud menyampaikan beberapa saran kepada para pembaca yakni:
1. Untuk pengembangan kedepannya bisa memberikan proses untuk
melakukan perbandingan dan persamaan dengan sebuah metode agar
nantinya sistem dapat berjalan dengan baik dan dapat berfikir sendiri
untuk mendapatkan jawaban.
2. Sistem yang telah dibuat penulis dapat dikembangkan menjadi suatu
sistem yang lebih terintegrasi dalam hal manajemen dan interaktif agar
bisa dimanfaatkan lebih maksimal oleh user.
3. Proses yang dibutuhkan dalam melakukan semua proses yang ada di
dalam sistem terbilang memakan waktu yang lama. Disarankan untuk
penelitian kedepannya berfokus pada peningkatan kecepatan proses dari
sistem namun tetap mendapatkan hasil akurat yang bagus.
DAFTAR PUSTAKA
Dharwiyanti, Sri, 2003. Pengantar UML. http://ikc.dinus.ac.id/umum/yanti-
uml.php diakses pada tanggal 28 April 2017
elib.unikom.ac.id/files/disk1/449/jbptunikompp-gdl-etifahnim1-22448-9-13.bab-
i.pdf diakses tanggal 30 April 2017
Pujianto, 2009. Pengertian Sistem dan Analisis Sistem. Universitas Gadjah Mada:
Yogyakarta
Akbar, Martha, 2012. Analisis Perbandinn Metode Pembobotan Kata TF.-IDF dan
TR-RF Terhada Performasi Kategori Teks. Universitas Telkom : Jakarta
Castillo, C. 2004. EffectiveWeb Crawling. (p. i). Dept. of Science: University of
Chile
Hasyim, Nur. 2003. HTML dan CSS. http://ikc.dinus.ac.id/umum/nurhasyim-
htmlcss.php diakses 30 Agutus 2015
http://dir.unikom.ac.id/s1-final-project/fakultas-teknik-dan-ilmu-
komputer/manajemen-informatika/2011/jbptunikompp-gdl-ninarostin-
25930/6-unikom-n-i.pdf/pdf/6-unikom-n-i.pdf diakses 30 April 2017
Widigdo, Anon Kuncoro, 2003. Dasar Pemrograman PHP dan MySQL:
Yogyakarta
A. Goker, D. John. 2009. Information Retrieval : Searching in 21st Century,
Chippenham: Wiley
Raharjo, Budi. Dkk. 2014. Modul Pemrograman WEB (HTML, PHP, & MySQL.
Bandung : Modula.
Heriyanto. 2015. Pencarian Dokumen Teks Arsip Surat dengan Metode Indexing
dan Query. semnasIF 2015 UPN “Veteran” Yogyakarta
Fadli . 2012. “Pengertian Javascript Dan Fungsinya Didalam Pemograman
Situs/Web”. 12 Desember 2017. http://infopengertian.biz/pengertian-
javascript-dan-fungsinya-didalam-pemograman-situsweb.html
Sandi , Anugerah . 2016. “Referensi Belajar Framework VueJS 2” . 20 Desember
2017. https://www.codepolitan.com/referensi-belajar-framework-vuejs-2-
5a123ba594aea
Nugroho , Muchammad Dwi Cahyo .2017. “Pengertian Laravel:Fitur, Kelebihan
dan Kekurangan”. http://www.ayongoding.id/pengertian-laravel/
Irmansayah, Faried. 2003.Pengantar Database : Jakarta
Widigdo, Anon Kuncoro, 2003. Dasar Pemrograman PHP dan MySQL:
Yogyakarta
S. Wallace, Richard. (2010) Pandorabots. [Online]. http://www.pandorabots-
.com/botmaster/en/
LAMPIRAN
1. SourceCodeBotManLaravel(PHP)
<?php
namespaceApp\Http\Controllers;
useBotMan\BotMan\BotMan;
useIlluminate\Http\Request;
useIlluminate\Support\Facades\DB;
useIlluminate\Support\Facades\Session;
useApp\Conversations\ExampleConversation;
useIlluminate\Foundation\Inspiring;
useBotMan\BotMan\Messages\Incoming\Answer;
useBotMan\BotMan\Messages\Outgoing\Question;
useBotMan\BotMan\Messages\Outgoing\Actions\Button;
useBotMan\BotMan\Messages\Attachments\Image;
useBotMan\BotMan\Messages\Outgoing\OutgoingMessage;
useScrapper;
classBotManControllerextendsController
{
/**
*PlaceyourBotManlogichere.
*/
publicfunctionhansip()
{
$botman=app('botman');
$botman->hears('{data}',function($bot,$data){
$bot->reply('tes');
});
$botman->listen();
}
publicfunctionhandle()
{
$botman=app('botman');
$botman->hears('{data}',function($bot,$data){
$dataAwalanTanya=0;
$data_sapaan_arr=[];
$list_tdk_penting=[];
//tes
$data_kata_tot=[];
$data_kata_tot1=[];
$contohTanyaList=[];
$detailTanyaList=[];
$daftarTanyaPerbedaan=[];
$perbedaanTanyaList=[];
$kataTdkPenting=DB::table('kt_tdk_penting')->get();
foreach($kataTdkPentingas$kataTdkPentings){
array_push($list_tdk_penting,$kataTdkPentings->kata);
}
$dataKataTdkPenting=implode('|',$list_tdk_penting);
$db_sapaan=DB::table('tb_sapaan')->get();
foreach($db_sapaanas$sapaan){
array_push($data_sapaan_arr,$sapaan->kata);
}
$data_sapaan=implode('|',$data_sapaan_arr);
$tanyaSpesifikDetail=DB::table('tanya_spesifik')->where('jenis_tanya','detail')->get();
foreach($tanyaSpesifikDetailas$detailTanya){
array_push($detailTanyaList,$detailTanya->tanya);
}
$daftarTanyaDetail=implode('|',$detailTanyaList);
$tanyaSpesifikContoh=DB::table('tanya_spesifik')->where('jenis_tanya','contoh')->get();
foreach($tanyaSpesifikContohas$contohTanya){
array_push($contohTanyaList,$contohTanya->tanya);
}
$daftarTanyaContoh=implode('|',$contohTanyaList);
$perbedaanSpesifikDetail=DB::table('tanya_spesifik')->where('jenis_tanya','perbedaan')->get();
foreach($perbedaanSpesifikDetailas$perbedaanTanya){
array_push($perbedaanTanyaList,$perbedaanTanya->tanya);
}
$daftarTanyaPerbedaan=implode('|',$perbedaanTanyaList);
//endquerypadadatabasedandeklarasivariabel
if(stristr((string)$data_sapaan,$data,true)&&stristr($data,'bertanya')===false){
if(empty(Session::get('sapaan'))){
Session::put('sapaan',1);
}else{
$nilai=Session::get('sapaan')+1;
Session::put('sapaan',$nilai);
}
if(stristr($data,'assalamualaikum')||stristr($data,'heik')){
$bot->reply('waalaikumsalamwrwb,adayangbisasayabantu?');
}else{
if(Session::get('sapaan')>2){
$bot->reply('janganterusmenyapa,kamusudahkerenkokhehe');
}else{
$jawabChat=$this->jawaban_chat('sapaan');
$bot->reply($jawabChat);
}
}
}elseif(stristr($data,'bertanya')){
$dataExplode=explode('',$data);
if(!empty(Session::get('soal'))){
if(empty(Session::get('bertanyaRelasi'))){
$chatExt=(count($dataExplode)<3)?'pertanyaanandakurangjelas,tapisayakiraandainginbertanya.':'';
$jawabChat=$chatExt.'apakahadahubungannyadengansoalberikutnya?';
Session::put('bertanyaRelasi',true);
}else{
$bot->reply('andatetapbertanyatentangsoalsebelumnya');
$jawabChat='silahkanbertanyaterkaitsoalsebelumnya';
}
}else{
$chatExt=(count($dataExplode)<3)?'pertanyaanandakurangjelas,tapisayakiraandainginbertanya.':'';
$jawabChat=$chatExt.''.$this->jawaban_chat('bertanya');
}
$bot->reply($jawabChat);
}elseif(stristr($data,'terimakasih')||stristr('thank|thanks|arigato',$data)){
Session::flush();//janganpakaiflush,hapussajayangmemangutkdihapus
$jawabChat=$this->jawaban_chat('terima_kasih');
$bot->reply($jawabChat);
}elseif(stristr($data,'kurangjelas')||stristr($data,'tidakjelas')||stristr($data,'kurangdimengerti')||stristr($data,'tidakmengerti')){
$jawabChat=$this->jawaban_chat('kritik');
$bot->reply($jawabChat);
}else{//elsebreakdown
if(!empty(Session::get('bertanyaRelasi'))){
if(stristr($data,'ya')){
Session::forget('bertanyaRelasi');
$bot->reply('ok,silahkanbertanyaterkaitsoalsebelumnya');
}elseif(stristr($data,'tidak')){
Session::forget('soal');
Session::forget('bertanyaRelasi');
$bot->reply('tidakyah?oke,silahkanbertanyaterkaitsoalyanglain');
}else{
$bot->reply('mohonjawabdenganbenar,apakahandamaubertanyaterkaitsoalyangsamaatautidak?');
}
}else{
$hasil=explode('',$data);
if(!empty(Session::get('soal'))&&count($hasil)>1){
if(empty(Session::get('soal2'))){//jikasoal2belumada
$hasilSes=explode('',Session::get('soal'));
if(stristr($daftarTanyaContoh,$data)){
Session::put('levelSoal','contoh');
array_push($hasilSes,'contoh');
if(!empty(Session::get('jenis_tanya'))){Session::forget('jenis_tanya');}
$kata_tdk_singkat=$this->levenshteinProses($kataTdkPenting,$hasilSes);
if(count($kata_tdk_singkat)>0){
for($a=0;$a<count($kata_tdk_singkat);$a++){
array_push($data_kata_tot,$kata_tdk_singkat[$a]);
array_push($data_kata_tot1,$kata_tdk_singkat[$a]);
}
}
$pilihan=$this->prosesTFIDF($data_kata_tot,$dataKataTdkPenting,$data_kata_tot1);
$bot->reply((string)$pilihan);
}elseif(stristr($daftarTanyaDetail,$data)){
Session::put('levelSoal','detail');
array_push($hasilSes,'detail');
if(!empty(Session::get('jenis_tanya'))){Session::forget('jenis_tanya');}
$kata_tdk_singkat=$this->levenshteinProses($kataTdkPenting,$hasilSes);
if(count($kata_tdk_singkat)>0){
for($a=0;$a<count($kata_tdk_singkat);$a++){
array_push($data_kata_tot,$kata_tdk_singkat[$a]);
array_push($data_kata_tot1,$kata_tdk_singkat[$a]);
}
}
$pilihan=$this->prosesTFIDF($data_kata_tot,$dataKataTdkPenting,$data_kata_tot1);
$bot->reply((string)$pilihan);
}else{
if(stristr($data,'beda')){
if(!empty(Session::get('jenis_tanya'))){Session::forget('jenis_tanya');}
$kata_tdk_singkat=$this->levenshteinProses($kataTdkPenting,$hasil);
if(count($kata_tdk_singkat)>0){
for($a=0;$a<count($kata_tdk_singkat);$a++){
array_push($data_kata_tot,$kata_tdk_singkat[$a]);
array_push($data_kata_tot1,$kata_tdk_singkat[$a]);
}
$pilihan=$this->prosesTFIDF($data_kata_tot,$dataKataTdkPenting,$data_kata_tot1);
$bot->reply(Session::get('jawaban'));
$bot->reply('sedangkan');
$bot->reply((string)$pilihan);
}else{
$bot->reply('pertanyaanandayangkeduatidakjelas');
}
}else{
$pertanyaan1Soal=$this->pertanyaan1Soal($data,$kataTdkPenting,$hasil,$dataKataTdkPenting);
Session::put('soal2',$data);
Session::put('jawaban2',$pertanyaan1Soal);
$bot->reply($pertanyaan1Soal);
}
}
}else{//jikasoal2sudahada
$perbedaan2Soal=DB::table('prefiks_kalimat')->where('jenis_prefiks','perbedaan')->get();
$persamaan2Soal=DB::table('prefiks_kalimat')->where('jenis_prefiks','persamaan')->get();
foreach($perbedaan2Soalas$bedaSoal){
if(stristr($data,$bedaSoal->prefiks)){
$poinBeda=1;
$prefiksSama=$bedaSoal->prefiks;
break;
}else{
$poinBeda=0;
}
}
foreach($persamaan2Soalas$samaSoal){
if(stristr($data,$samaSoal->prefiks)){
$poinSama=1;
$prefiksSama=$samaSoal->prefiks;
break;
}else{
$poinSama=0;
}
}
if($poinBeda==1){
$awweh=$this->perbedaan2soals($data,$kataTdkPenting,$prefiksSama,$dataKataTdkPenting);
if($awweh=='kosong'){
//pakaikanlevehsteinuntukmenghilangkankatatidakpenting
$dataPerbedaan='dariduasoaltersebutperbedaanantara'.Session::get('soal').'dengan'.Session::get('soal2').'yaitusebagaiberikut.'.Session::get('jawaban').'sedangkan'.Session::get('jawaban2');
$bot->reply($dataPerbedaan);
}else{
if($awweh=='2SoalAda'){
$bot->reply('perbedaandari2pernyataandiatasadalah'.Session::get('jawaban').'sedangkan'.Session::get('jawaban2'));
}else{
$bot->reply('tolongberikanduasoaluntukditanyakanperbedaanya');
}
}
}elseif($poinSama==1){
$persamaan=$this->persamaan2soals($data,$kataTdkPenting,$prefiksSama,$dataKataTdkPenting);
$bot->reply($persamaan);
}else{
$pertanyaan1Soal=$this->pertanyaan1Soal($data,$kataTdkPenting,$hasil,$dataKataTdkPenting);
Session::forget('soal2');
Session::forget('jawaban2');
Session::put('soal',$data);
Session::put('jawaban',$pertanyaan1Soal);
$bot->reply($pertanyaan1Soal);
}
//endjikasoal2sudahada
}
}else{
//berikanjugapersamaan
$perbedaan2Soal=DB::table('prefiks_kalimat')->where('jenis_prefiks','perbedaan')->get();
$persamaan2Soal=DB::table('prefiks_kalimat')->where('jenis_prefiks','persamaan')->get();
foreach($perbedaan2Soalas$bedaSoal){
if(stristr($data,$bedaSoal->prefiks)){
$poinBeda=1;
$prefiksSama=$bedaSoal->prefiks;
break;
}else{
$poinBeda=0;
}
}
foreach($persamaan2Soalas$samaSoal){
if(stristr($data,$samaSoal->prefiks)){
$poinSama=1;
$prefiksSama=$samaSoal->prefiks;
break;
}else{
$poinSama=0;
}
}
if($poinBeda==1){
$perbedaan=$this->perbedaan2soals($data,$kataTdkPenting,$prefiksSama,$dataKataTdkPenting);
if($perbedaan=='2SoalAda'){
$bot->reply('berikutperbedaandari2soaltersebut');
$bot->reply(Session::get('jawaban'));
$bot->reply('sedangkan');
$bot->reply(Session::get('jawaban2'));
}elseif($perbedaan=='kosong'){
$bot->reply('tolongberikanduasoaluntukditanyakanperbedaanya2'.Session::get('soal').'='.Session::get('soal2'));
}else{
$bot->reply($perbedaan);
}
}elseif($poinSama==1){
$persamaan=$this->persamaan2soals($data,$kataTdkPenting,$prefiksSama,$dataKataTdkPenting);
$bot->reply($persamaan);
}
else{
$pertanyaan1Soal=$this->pertanyaan1Soal($data,$kataTdkPenting,$hasil,$dataKataTdkPenting);
Session::put('jawaban',$pertanyaan1Soal);
Session::put('soal',$data);
$bot->reply($pertanyaan1Soal);
}
}
}
}
});
$botman->listen();
}
/*
====================================================================
prosesuntukbertanyaterkait1soaltertentu
====================================================================
*/
publicfunctionpertanyaan1Soal($data,$kataTdkPenting,$hasil,$dataKataTdkPenting)
{
$data_kata_tot=[];
$data_kata_tot1=[];
if(count($hasil)>1){
if(!empty(Session::get('jenis_tanya'))){Session::forget('jenis_tanya');}
$kata_tdk_singkat=$this->levenshteinProses($kataTdkPenting,$hasil);
if(count($kata_tdk_singkat)>0){
for($a=0;$a<count($kata_tdk_singkat);$a++){
array_push($data_kata_tot,$kata_tdk_singkat[$a]);
array_push($data_kata_tot1,$kata_tdk_singkat[$a]);
}
$pilihan=$this->prosesTFIDF($data_kata_tot,$dataKataTdkPenting,$data_kata_tot1);
//disinitadisessionputuntuksoaldanjawaban1
return$pilihan;
}else{
$dataHasil='kosong';
$data_testingRequest=$this->requestJawaban($dataHasil);
return$data_testingRequest;
}
}else{
$data_testingRequest=$this->requestJawaban($hasil[0]);
return$data_testingRequest;
}
$data_kata_tot=[];
$data_kata_tot1=[];
}
/*
====================================================================
prosesmelakukanpersamaandari2soal
====================================================================
*/
publicfunctionpersamaan2soals($data,$kataTdkPenting,$prefiksSama,$dataKataTdkPenting)
{
$data_kata_tot=[];
$data_kata_tot1=[];
if(stristr($data,'dan')){
$dataBeda='dan';
}elseif(stristr($data,'dengan')){
$dataBeda='dengan';
}elseif(stristr($data,'atau')){
$dataBeda='atau';
}else{
$dataBeda='kosong';
}
if($dataBeda=='kosong'){
return$dataBeda;
}else{
$dataSama=explode($dataBeda,$data);
$dataSamaPertama=$dataSama[0];
$dataSamaKedua=$prefiksSama.''.$dataSama[1];
//prosesdatapembedapertama
$hasilBeda1=explode('',$dataSamaPertama);
Session::put('jenis_tanya','persamaan');
$hasilDataPembeda1=$this->levenshteinProses($kataTdkPenting,$hasilBeda1);
if(count($hasilDataPembeda1)>0){
for($a=0;$a<count($hasilDataPembeda1);$a++){
array_push($data_kata_tot,$hasilDataPembeda1[$a]);
array_push($data_kata_tot1,$hasilDataPembeda1[$a]);
}
$pilihan=$this->prosesTFIDF($data_kata_tot,$dataKataTdkPenting,$data_kata_tot1);
Session::put('jawaban',$pilihan);
Session::put('soal',$dataSamaPertama);
}
//prosesdatapembedakedua
$data_kata_tot=[];
$data_kata_tot1=[];
$hasilBeda2=explode('',$dataSamaKedua);
$hasilDataPembeda2=$this->levenshteinProses($kataTdkPenting,$hasilBeda2);
if(count($hasilDataPembeda2)>0){
for($a=0;$a<count($hasilDataPembeda2);$a++){
array_push($data_kata_tot,$hasilDataPembeda2[$a]);
array_push($data_kata_tot1,$hasilDataPembeda2[$a]);
}
$pilihans=$this->prosesTFIDF($data_kata_tot,$dataKataTdkPenting,$data_kata_tot1);
Session::put('jawaban2',$pilihans);
Session::put('soal2',$dataSamaKedua);
}
}
if(Session::get('jawaban')==Session::get('jawaban2')){
//masukkedatabase
$jawabanSpesifik=DB::table('persamaan_jawaban')->where('jenis_persamaan',Session::get('jawaban'))->first();
if(!empty($jawabanSpesifik)){
return$jawabanSpesifik->jawab_persamaan;
}else{
return'datakosong';
}
}else{
return'tidakterdapatpersamaanantaraduapernyataantersebut';
}
}
/*
====================================================================
prosesmelakukanperbedaandari2soal
====================================================================
*/
publicfunctionperbedaan2soals($data,$kataTdkPenting,$prefiksSama,$dataKataTdkPenting)
{
$data_kata_tot=[];
$data_kata_tot1=[];
if(stristr($data,'dan')){
$dataBeda='dan';
}elseif(stristr($data,'dengan')){
$dataBeda='dengan';
}elseif(stristr($data,'danjuga')){
$dataBeda='danjuga';
}else{
$dataBeda='kosong';
}
if($dataBeda=='kosong'){
return$dataBeda;
}else{
$dataPembeda=explode($dataBeda,$data);
$dataPembedaPertama=$dataPembeda[0];
$dataPembedaKedua=$prefiksSama.''.$dataPembeda[1];
//prosesdatapembedapertama
$hasilBeda1=explode('',$dataPembedaPertama);
if(!empty(Session::get('jenis_tanya'))){Session::forget('jenis_tanya');}
$hasilDataPembeda1=$this->levenshteinProses($kataTdkPenting,$hasilBeda1);
if(count($hasilDataPembeda1)>0){
for($a=0;$a<count($hasilDataPembeda1);$a++){
array_push($data_kata_tot,$hasilDataPembeda1[$a]);
array_push($data_kata_tot1,$hasilDataPembeda1[$a]);
}
$pilihan=$this->prosesTFIDF($data_kata_tot,$dataKataTdkPenting,$data_kata_tot1);
Session::put('jawaban',$pilihan);
Session::put('soal',$dataPembedaPertama);
}
//prosesdatapembedakedua
$data_kata_tot=[];
$data_kata_tot1=[];
$hasilBeda2=explode('',$dataPembedaKedua);
$hasilDataPembeda2=$this->levenshteinProses($kataTdkPenting,$hasilBeda2);
if(count($hasilDataPembeda2)>0){
for($a=0;$a<count($hasilDataPembeda2);$a++){
array_push($data_kata_tot,$hasilDataPembeda2[$a]);
array_push($data_kata_tot1,$hasilDataPembeda2[$a]);
}
$pilihans=$this->prosesTFIDF($data_kata_tot,$dataKataTdkPenting,$data_kata_tot1);
Session::put('jawaban2',$pilihans);
Session::put('soal2',$dataPembedaKedua);
}
if(empty(Session::get('soal'))||empty(Session::get('soal2'))){
if(empty(Session::get('soal'))&&!empty(Session::get('soal2'))){
$jawabKosong='mohonmaaf,soal|'.Session::get('soal').'|tidakjelasbagikami';
}elseif(!empty(Session::get('soal'))&&empty(Session::get('soal2'))){
$jawabKosong='mohonmaaf,soal|'.Session::get('soal2').'|tidakjelasbagikami';
}else{
$jawabKosong='mohonmaafkeduasoaltidakkamimengertikarenasoalnyatidakterlalujelasbagikami';
}
return$jawabKosong;
}else{
return'2SoalAda';
}
}
}
/*
====================================================================
proseslevenshteinnyauntuknormalisasikalimat
====================================================================
*/
publicfunctionlevenshteinProses($kataTdkPenting,$hasil)
{
$kata_tdk_singkat=[];
$poin=0;
for($i=0;$i<count($hasil);$i++){
foreach($kataTdkPentingas$kt_tdk_penting){
$levTdkPenting=levenshtein($hasil[$i],$kt_tdk_penting->kata,1,3,3);
if($levTdkPenting<5){
$poin=1;
//$bot->reply(''.$hasil[$i].'+'.$kt_tdk_penting->kata.'poinnya'.$levTdkPenting);
}else{
//$bot->reply(''.$hasil[$i].'-'.$kt_tdk_penting->kata.'poinnya'.$levTdkPenting);
}
}
if($poin!=1){
$kataDasar=DB::table('indeks')->get();
$shortest=-1;
foreach($kataDasaras$dasarKata){
$cekKata1=preg_replace("/^(di|[ks]e)/",'',$hasil[$i]);
$cekKata=preg_replace('/(i|an)$/','',$cekKata1);
$pjgKataHasil=strlen($hasil[$i]);
$pjgKataDasar=strlen($dasarKata->kata);
if($pjgKataHasil>$pjgKataDasar-3&&$pjgKataHasil<$pjgKataDasar+3){
$lev=levenshtein($cekKata,$dasarKata->kata,1,2,3);
if($lev==0){
$closest=$dasarKata->kata;
$shortest=0;
array_push($kata_tdk_singkat,$closest);
//$bot->reply($hasil[$i].'berubahmenjadi'.$closest.'withpoin'.$lev);
break;
}
if($lev<=$shortest||$shortest<0){
if($lev<5){
$closest=$dasarKata->kata;
array_push($kata_tdk_singkat,$closest);
}
$shortest=$lev;
//$bot->reply($hasil[$i].'berubahmenjadi'.$dasarKata->kata.'dgnpoin'.$lev.'='.$shortest);
}
}
}
}
$poin=0;
}
return$kata_tdk_singkat;
}
/*
====================================================================
prosesrequestjawaban/fallback
====================================================================
*/
publicfunctionrequestJawaban($dataHasil)
{
if($dataHasil=='kosong'){
return'kamitelahmecarididatabasekamidansudahmengecekdiluardarisistemkami,tapikamitidakmenemukanjawabanyangandatanyakan,ataumungkintolongtanyakandengankosakatayangmudahdimengerti';
}else{
$b=array(
"mohonmaaf,kata".$dataHasil.'tidakjelasuntukkamijawab',
$dataHasil."yangandamaksudtidakkamimengerti",
"mohonbertanyadenganmemperjelaskata".$dataHasil,
"sayatidaktaumaujawabapakalauhanyakata".$dataHasil
);
$rand_answer_b=array_rand($b,1);
return$b[$rand_answer_b];
}
}
/*
====================================================================
prosesTF-IDFuntukpembobotankata
====================================================================
*/
publicfunctionprosesTFIDF($data_kata_tot,$dataKataTdkPenting,$data_kata_tot1)
{
$ambilSingkatan=implode('',$data_kata_tot);
$status=false;
$angka=0;
$poin=0;
$kemunculanDiDokumen=0;
$kemunculanKataDiDokumen=[];
$pilihan=[];
$pilihan_crawl=[];
$tfKemunculan=[];
$tfKemunculanAll=[];
$pembobotanTFIDF=0;
if(!empty(Session::get('levelSoal'))){//diatasharusdihandlekalausoalnyabaru
$hasils=DB::table('tanyajawab')->where('tingkat_soal',Session::get('levelSoal'))->get();
$hasils_2=DB::table('tanyajawab')->where('tingkat_soal',Session::get('levelSoal'))->get();
}else{
$hasils=DB::table('tanyajawab')->where('tingkat_soal','jelaskan')->get();
$hasils_2=DB::table('tanyajawab')->where('tingkat_soal','jelaskan')->get();
}
$apakahTelahMasuk=false;
$nomorHasils3=0;
foreach($hasilsas$hasil){
for($i=0;$i<count($data_kata_tot1);$i++){
if(stristr($hasil->tanya,$data_kata_tot1[$i])!==false){
if($apakahTelahMasuk==false){
if(array_key_exists($data_kata_tot1[$i],$tfKemunculanAll)){
$tfKemunculanAll[$data_kata_tot1[$i]]+=1;
}else{
$tfKemunculanAll[$data_kata_tot1[$i]]=1;
}
$apakahTelahMasuk=true;
}
}
$apakahTelahMasuk=false;
}
}
$nomorHasils2=0;$nomorHasils2Fix=0;
foreach($hasils_2as$tambahan){
$tfKemunculan[]=array();
for($j=0;$j<count($data_kata_tot);$j++){
if(stristr($tambahan->tanya,$data_kata_tot[$j])!==false){
//disiniadaperulanganyangmelarangbeberapakatautkdiberikanpembobotan
if(stristr($dataKataTdkPenting,$data_kata_tot[$j])){
if(array_key_exists($data_kata_tot[$j],$tfKemunculan[$nomorHasils2Fix])){
$tfKemunculan[$nomorHasils2Fix][$data_kata_tot[$j]]+=0;
}else{
$tfKemunculan[$nomorHasils2Fix][$data_kata_tot[$j]]=0;
}
}else{
if(array_key_exists($data_kata_tot[$j],$tfKemunculan[$nomorHasils2Fix])){
$tfKemunculan[$nomorHasils2Fix][$data_kata_tot[$j]]+=1;
}else{
$tfKemunculan[$nomorHasils2Fix][$data_kata_tot[$j]]=1;
}
}
}
if($j==count($data_kata_tot)-1){
if(!empty($tfKemunculan[$nomorHasils2Fix])){
for($o=0;$o<count($data_kata_tot);$o++){
if(array_key_exists($data_kata_tot[$o],$tfKemunculan[$nomorHasils2Fix])){
$tfFix=$tfKemunculan[$nomorHasils2Fix][$data_kata_tot[$o]];
$idf=log10(count($hasils)/$tfKemunculanAll[$data_kata_tot[$o]]);
$tf_idf=$tfFix*$idf;
$pembobotanTFIDF+=$tf_idf;
}
}
$pilihan[]=array($tambahan->id,$pembobotanTFIDF,$tambahan->jawab,$tambahan->jenis_persamaan);
$pembobotanTFIDF=0;
$nomorHasils2Fix++;
}
}
}
$nomorHasils2++;
}
if(sizeof($pilihan)>1){
for($i=0;$i<sizeof($pilihan);$i++){
for($j=0;$j<(sizeof($pilihan)-1);$j++){
if($pilihan[$j][1]<$pilihan[$j+1][1]){
$temp1=$pilihan[$j+1][1];
$pilihan[$j+1][1]=$pilihan[$j][1];
$pilihan[$j][1]=$temp1;
$temp2=$pilihan[$j+1][0];
$pilihan[$j+1][0]=$pilihan[$j][0];
$pilihan[$j][0]=$temp2;
$temp3=$pilihan[$j+1][2];
$pilihan[$j+1][2]=$pilihan[$j][2];
$pilihan[$j][2]=$temp3;
$temp4=$pilihan[$j+1][3];
$pilihan[$j+1][3]=$pilihan[$j][3];
$pilihan[$j][3]=$temp4;
}
}
}
if($pilihan[0][1]==0){
$tdkAdaJawaban=array(
"cobatanyakanpertanyaanyangjelas,sayatidakmengertimaksuddaripertanyaanmu",
"mungkinpertanyaannyaharusjelasagarsayadapatmemberikanjawabanyangtepat",
"maaf,pertanyaanandaambigubagisaya.Cobaberikapertanyaanyangjelas"
);
$rand_answer_tdkAdaJawaban=array_rand($tdkAdaJawaban,1);
return$tdkAdaJawaban[$rand_answer_tdkAdaJawaban];
}else{
if(!empty(Session::get('jenis_tanya'))){
return$pilihan[0][3];
}else{
return$pilihan[0][2];
}
}
}
if(sizeof($pilihan)==1){
if(!empty(Session::get('jenis_tanya'))){
return$pilihan[0][3];
}else{
return$pilihan[0][2];
}
}
if(empty($pilihan)){
$hasilCrawling=$this->crawlingProses($ambilSingkatan,$dataKataTdkPenting);
return(string)$hasilCrawling;
}
}
publicfunctioncrawlingProses($ambilSingkatan,$dataKataTdkPenting)
{
$data_kata_tot=explode('',$ambilSingkatan);
$penambahanCrawling=0;$tfKemunculanAllCrawl=[];$apakahTelahMasukCrawl=false;
$crawler=Scrapper::request('GET','http://localhost/belajaronlineku/forum/');
$url=$crawler->filter('li.list_pertanyaan')->each(function($node){
$pertanyaan=$node->filter('p.pertanyaan')->text();
$jawaban=$node->filter('p.jawaban')->text();
return[
'pertanyaan'=>$pertanyaan,
'jawaban'=>$jawaban
];
$penambahanCrawling+=1;
});
for($a=0;$a<count($url);$a++){
for($i=0;$i<count($data_kata_tot);$i++){
if(stristr($url[$a]['pertanyaan'],$data_kata_tot[$i])!==false){
if($apakahTelahMasukCrawl==false){
if(array_key_exists($data_kata_tot[$i],$tfKemunculanAllCrawl)){
$tfKemunculanAllCrawl[$data_kata_tot[$i]]+=1;
}else{
$tfKemunculanAllCrawl[$data_kata_tot[$i]]=1;
}
$apakahTelahMasukCrawl=true;
}
}
$apakahTelahMasukCrawl=false;
}
}
$nomorHasils2Crawl=0;$nomorHasils2FixCrawl=0;$pembobotanTFIDFCrawl=0;$pilihanCrawl=[];
for($b=0;$b<count($url);$b++){
$tfKemunculanCrawl[]=array();
for($j=0;$j<count($data_kata_tot);$j++){
if(stristr($url[$b]['pertanyaan'],$data_kata_tot[$j])!==false){
if(stristr($dataKataTdkPenting,$data_kata_tot[$j])){
if(array_key_exists($data_kata_tot[$j],$tfKemunculanCrawl[$nomorHasils2FixCrawl])){
$tfKemunculanCrawl[$nomorHasils2FixCrawl][$data_kata_tot[$j]]+=0;
}else{
$tfKemunculanCrawl[$nomorHasils2FixCrawl][$data_kata_tot[$j]]=0;
}
}else{
if(array_key_exists($data_kata_tot[$j],$tfKemunculanCrawl[$nomorHasils2FixCrawl])){
$tfKemunculanCrawl[$nomorHasils2FixCrawl][$data_kata_tot[$j]]+=1;
}else{
$tfKemunculanCrawl[$nomorHasils2FixCrawl][$data_kata_tot[$j]]=1;
}
}
}
if($j==count($data_kata_tot)-1){
if(!empty($tfKemunculanCrawl[$nomorHasils2FixCrawl])){
for($o=0;$o<count($data_kata_tot);$o++){
if(array_key_exists($data_kata_tot[$o],$tfKemunculanCrawl[$nomorHasils2FixCrawl])){
$tfFixCrawl=$tfKemunculanCrawl[$nomorHasils2FixCrawl][$data_kata_tot[$o]];
$idfCrawl=log10(count($url)/$tfKemunculanAllCrawl[$data_kata_tot[$o]]);
$tf_idfCrawl=$tfFixCrawl*$idfCrawl;
$pembobotanTFIDFCrawl+=$tf_idfCrawl;
}
}
$pilihanCrawl[]=array($pembobotanTFIDFCrawl,$url[$b]['jawaban']);
$pembobotanTFIDFCrawl=0;
$nomorHasils2FixCrawl++;
}
}
}
$nomorHasils2Crawl++;
}
if(sizeof($pilihanCrawl)>1){
for($i=0;$i<sizeof($pilihanCrawl);$i++){
for($j=0;$j<(sizeof($pilihanCrawl)-1);$j++){
if($pilihanCrawl[$j][0]<$pilihanCrawl[$j+1][0]){
$temp1=$pilihanCrawl[$j+1][1];
$pilihanCrawl[$j+1][1]=$pilihanCrawl[$j][1];
$pilihanCrawl[$j][1]=$temp1;
$temp2=$pilihanCrawl[$j+1][0];
$pilihanCrawl[$j+1][0]=$pilihanCrawl[$j][0];
$pilihanCrawl[$j][0]=$temp2;
}
}
}
return$pilihanCrawl[0][1];
//$bot->reply($pilihanCrawl[0][1]);
}elseif(sizeof($pilihanCrawl)==1){
return$pilihanCrawl[0][1];
//$bot->reply($pilihanCrawl[0][1]);
}else{
return'kamitelahmencaridiberbagailuardarireferensikami,tapimasihbelumjugamendapattitikterang.jawabannyasulitdimengertiolehkami';
//$bot->reply('kamitelahmencaridiberbagailuardarireferensikami,tapimasihbelumjugamendapattitikterang.jawabannyasulitdimengertiolehkami');
}
}
publicfunctionjawaban_chat($tipe)
{
$jawab_user=[];
$jawabanChat=DB::table('jawaban_chat')->where('tipe_chat',$tipe)->get();
foreach($jawabanChatas$jawab){
array_push($jawab_user,$jawab->jawaban_chat);
}
$jawabRandom=array_rand($jawab_user,1);
return$jawab_user[$jawabRandom];
//$a=array(
//"hai,selamatdatangdiaidu,adayangbisakamibantu?",
//"selamatdatang,adayanginginsayabantu?",
//"halo,sayaaiduyangakanmembantuandadalamprosestanyajawab",
//"haihai,selamatdatang,semogaharimumenyenangkan",
//);
//$rand_answer_a=array_rand($a,1);
//$bot->reply($a[$rand_answer_a]);
}
/**
*@return\Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
publicfunctiontinker()
{
returnview('tinker');
}
/**
*Loadedthroughroutes/botman.php
*@paramBotMan$bot
*/
publicfunctionstartConversation(BotMan$bot)
{
$bot->startConversation(newExampleConversation());
}
}
2. SourceCodeBotManVueJS(Javascript)<template>
<div>
<divclass="arrow"></div>
<ulclass="ChatLog"id="textareaid">
<liclass="ChatLog__entry"v-for="messageinmessages":class="{'ChatLog__entry_mine':message.isMine}">
<imgclass="ChatLog__avatar"src="/logo.png"/>
<pclass="ChatLog__message">
{{message.text}}
<imgclass="ChatLog__message__image":src="message.attachment.url"v-if="message.attachment.type==='image'"/>
<videocontrolsclass="ChatLog__message__image"height="160"v-if="message.attachment.type==='video'"autoplay="">
<source:src="message.attachment.url"type="video/mp4">
</video>
<audiocontrolsclass="ChatLog__message__image"v-if="message.attachment.type==='audio'"autoplay="">
<source:src="message.attachment.url"type="audio/mp3">
</audio>
</p>
<divv-if="message.original.type==='actions'">
<divclass="btn"v-for="actioninmessage.original.actions"
@click="performAction(action.value,message.original)">
<imgv-if="action.image_url":src="action.image_url"style="max-height:25px"/>
{{action.text}}
</div>
</div>
</li>
</ul>
<inputtype="text"class="ChatInput"@keyup.enter="sendMessage"v-model="newMessage"placeholder="katakansesuatupadaku">
<buttonid="inputChat">Input</button>
</div>
</template>
<style>
#inputChat{
padding:10px;
border-radius:50%;
width:15%;
height:45px;
float:left;
}
input.ChatAttachment{
width:0.1px;
height:0.1px;
opacity:0;
overflow:hidden;
position:absolute;
z-index:-1;
}
.ChatAttachment+label{
cursor:pointer;
height:25px;
display:inline-block;
border-radius:5px;
background-color:white;
border:none;
padding:10px;
}
input.ChatInput{
width:80%;
float:left;
height:25px;
border-radius:5px;
border:none;
padding:10px;
}
.btn{
display:block;
padding:5px;
border-radius:5px;
margin:5px;
min-width:100px;
background-color:lightgrey;
}
ul.ChatLog{
list-style:none;
}
.ChatLog{
height:600px;
overflow:scroll;
margin:0auto;
padding:0px!important;
}
.ChatLog.ChatLog__entry{
margin:.5em;
}
.ChatLog__entry{
display:flex;
flex-direction:row;
align-items:flex-end;
max-width:100%;
}
.ChatLog__entry.ChatLog__entry_mine{
flex-direction:row-reverse;
}
.ChatLog__avatar{
flex-shrink:0;
flex-grow:0;
z-index:1;
height:50px;
width:50px;
border-radius:25px;
}
.ChatLog__entry.ChatLog__entry_mine
.ChatLog__avatar{
display:none;
}
.ChatLog__entry.ChatLog__message{
position:relative;
margin:012px;
}
.ChatLog__entry.ChatLog__message__image{
max-width:100%;
}
.ChatLog__entry.ChatLog__message::before{
position:absolute;
right:auto;
bottom:.6em;
left:-12px;
height:0;
content:'';
border:6pxsolidtransparent;
border-right-color:#ddd;
z-index:2;
}
.ChatLog__entry.ChatLog__entry_mine.ChatLog__message::before{
right:-12px;
bottom:.6em;
left:auto;
border:6pxsolidtransparent;
border-left-color:#08f;
}
.ChatLog__message{
background-color:#ddd;
padding:.5em;
border-radius:4px;
font-weight:lighter;
max-width:70%;
}
.ChatLog__entry.ChatLog__entry_mine.ChatLog__message{
border-top:1pxsolid#07f;
border-bottom:1pxsolid#07f;
background-color:#08f;
color:#fff;
}
</style>
<script>
constaxios=require('axios');
exportdefault{
props:{
apiEndpoint:{
default:'/botman',
},
userId:{
default:+(newDate()),
},
},
data(){
return{
messages:[],
newMessage:null
};
},
mounted(){
//letcontrol=document.getElementById("attachment");
//control.addEventListener("change",()=>{
//constfile=control.files[0];
//if(file){
//lettype=file.type.split('/')[0];
//constreader=newFileReader();
//if(type!=='video'&&type!=='audio'&&type!=='image'){
//type='file';
//}
//reader.addEventListener("load",()=>{
//this._addMessage(null,{
//type,
//url:reader.result
//},true);
//this.callAPI(null,false,type);
//control.value='';
//},false);
//reader.readAsDataURL(file);
//}
//},false);
},
methods:{
callAPI(text,interactive=false,attachment=null,callback){
letdata=newFormData();
constpostData={
driver:'web',
userId:this.userId,
message:text,
attachment,
interactive,
//attachment_data:document.getElementById('attachment').files[0]
};
Object.keys(postData).forEach(key=>data.append(key,postData[key]));
axios.post(this.apiEndpoint,data).then(response=>{
constmessages=response.data.messages||[];
messages.forEach(msg=>{
this._addMessage(msg.text,msg.attachment,false,msg);
});
if(callback){
callback(response.data);
}
});
},
performAction(value,message){
this.callAPI(value,true,null,(response)=>{
message.actions=null;
});
},
_addMessage(text,attachment,isMine,original={}){
this.messages.push({
'isMine':isMine,
'user':isMine?' ':' ',
'text':text,
'original':original,
'attachment':attachment||{},
});
varelement=document.getElementById("textareaid");
element.scrollTop=element.scrollHeight;
},
sendMessage(){
letmessageText=this.newMessage;
this.newMessage='';
if(messageText==='clear'){
this.messages=[];
return;
}
this._addMessage(messageText,null,true);
this.callAPI(messageText);
setTimeout(function(){
varelement=document.getElementById("textareaid");
element.scrollTop=element.scrollHeight;
},1000);
}
}
}
</script>