Nur Hamidah
Nur Hamidah
Oleh:
Nur Hamidah
09021181520128
Jangan berfikir apa yang saya dapat, tapi berfikirlah apa yang saya beri
~ J.F. Kennedy ~
You will never fall if you are afraid to climb, but there is no joy in
living your entire life on the ground
~ Anonim ~
Tak ada sidang yang lebih berat dan menakutkan melainkan sidang
dihadapan Allah Subhanahuwa ta’ala
~ Nur Hamidah ~
ABSTRACT
ABSTRAK
Puji dan syukur atas kehadirat Allah ta’ala atas segala nikmat, rahmat, dan
karuaniaNya sehingga penulis dapat menyelesaikan tugas akhir ini. Tugas akhir
Levenshtein Distance dan Cosine Similarity” disusun untuk memenuhi salah satu
Pada kesempatan ini, penulis ingin mengucapkan terima kasih kepada pihak-
1. Bapak Sofyan dan Ibu Tina Harnita selaku orang tua penulis, Muhammad
Agil Febriansyah dan Muhammad Aris Wijaya selaku saudara penulis serta
Keluarga besar yang telah memberikan dukungan baik moril maupun materil
kepada penulis
Universitas Sriwijaya
Universitas Sriwijaya
5. Ibu Novi Yusliani, M.T selaku pembimbing I Tugas Akhir dan ibu Desty
6. Bapak M. Fachrurrozi, M.T. selaku penguji I Tugas Akhir dan Ibu Rizki
Kurniati, M.T. selaku penguji II Tugas Akhir yang telah memberikan banyak
7. Seluruh Bapak dan Ibu Dosen Jurusan Teknik Informatika Fakultas Ilmu
kegiatan akademik
9. Sahabat Asrama Palembang Titi, Tika, Amel, Yulik, Okta, Inda, Vivi, Iga,
dan Marina yang selalu memberikan asupan semangat dan doa kepada penulis
10. Mbak Fit dan Lupina, sahabat penulis dari awal perkuliahan yang selalu ada
11. Teman satu bimbingan Tugas Akhir, dalam berbagi informasi dan
13. Kakak dan adik tingkat serta keluarga Mahasiswa Fasilkom Unsri
14. Seluruh pihak yang telah membantu dalam penyusunan dan penyempurnaan
tugas akhir ini di masa mendatang. Semoga tugas akhir ini dapat bermanfaat.
Penulis
DAFTAR ISI
Halaman
HALAMAN JUDUL……………………………………………………………….i
LEMBAR PENGESAHAN SKRIPSI……………………………………………..ii
TANDA LULUS UJIAN SIDANG SKRIPSI…………………………………….iii
HALAMAN PERNYATAAN……………………………………………………iv
MOTTO DAN PERSEMBAHAN………………………………………………..v
ABSTRACT………………………………………………………………………vi
ABSTRAK……………………………………………………………………….vii
KATA PENGANTAR …………………………………………………………viii
DAFTAR ISI.. …………………………………………………………………….x
DAFTAR TABEL……………………………………………………………….xv
DAFTAR GAMBAR ………………………………………………………….xvii
DAFTAR LAMPIRAN…………………………………………………………..xx
BAB I PENDAHULUAN
1.1 Pendahuluan …………………………………………………………I-1
1.2 Latar Belakang………………………….……………………………I-1
1.3 Rumusan Masalah……………………………………………………I-4
1.4 Tujuan Penelitian…………………………………………………….I-4
1.5 Manfaat Penelitian…………………………………………………...I-5
1.6 Batasan Masalah……………………………………………………..I-5
1.7 Sistematika Penulisan………………………………………………..I-6
1.8 Kesimpulan…………………………………………………………..I-8
BAB II KAJIAN LITERATUR
2.1 Pendahuluan ………………………………………………………...II-1
2.2 Landasan Teori
2.2.1 Spelling Checker………………………………………………II-1
2.2.2 Typographical Error…………………………………………..II-2
2.2.3 Preprocessing…………………………………………………II-5
2.2.4 Damerau Levenshtein Distance……………………………….II-6
2.2.5 N-gram………………………………………………………...II-7
2.2.6 Term Frequency-Inverse Document Frequency (tf-idf) ……....II-8
2.2.7 Cosine Similarity……………………………………………...II-9
2.2.8 Mean Reciprocal Rank (MRR) ……………………………...II-10
2.2.9 Rational Unified Process (RUP) ……………………………II-11
2.3 Penelitian Lain yang Relevan……………………………………...II-12
2.4 Kesimpulan………………………………………………………...II-14
DAFTAR PUSTAKA
DAFTAR TABEL
Halaman
Structure (WBS)……….…………………………………………III-11
Halaman
Unit Penelitian………………………………………………...III-15
Pengujian……………………………………………………..III-16
Penelitian……………………………………………………..III-21
PENDAHULUAN
1.1 Pendahuluan
Pada bab ini berisi tentang latar belakang masalah, rumusan masalah, tujuan
Bab ini juga berisi penjelasan mengenai tantangan dan tujuan proses
Distance dan algoritma Cosine Similarity pada sistem pengecekan kata salah ejaan.
Pengoreksian secara manual dapat memakan waktu yang lama karena dilakukan
kesalahan ejaan dan memberikan suggestion berupa kandidat kata (Soleh and
Purwarianti, 2011).
Sistem perbaikan ejaan kata dapat dibagi menjadi dua yaitu pencocokan
string kira-kira (inexact string matching) dan pencocokan string secara tepat (exact
menjadi dua yaitu approximate string matching yang merupakan pencocokan string
yang dibutuhkan untuk mengubah satu string menjadi string lain, dimana operasi
Levenshtein Distance menghasilkan kandidat kata dengan nilai jarak edit operasi
kesamaan dengan menentukan sudut antara dua vektor (Fahma, Cholissodin, dan
Perdana, 2018).
untuk mengecek kata salah ejaan dan memberikan saran kata berdasarkan kata salah
ejaan.
1.3 Rumusan Masalah
dalam penelitian ini adalah apakah algoritma Damerau Levenshtein Distance dan
algoritma Cosine Similarity dapat memberikan saran kata berdasarkan kata salah
ejaan. Untuk menyelesaikan permasalahan diatas, maka penelitian ini dibagi dalam
1. Sistem yang dihasilkan dapat memberikan saran kata berdasarkan kata salah
ejaan
2. Sistem hanya berfokus mengecek kata salah ejaan dan memberikan kandidat
tertinggi
BAB I PENDAHULUAN
perangkat lunak.
penelitian ini.
1.8 Kesimpulan
kata salah ejaan, dengan tujuan agar menghasilkan kandidat kata berdasarkan kata
algoritma Cosine Similarity serta penelitian yang relevan akan dijelaskan di bab 2.
BAB II
KAJIAN LITERATUR
2.1 Pendahuluan
Pada bab ini berisi penjelasan mengenai dasar-dasar teori yang berkaitan
dengan penelitian yang akan dilakukan dan menyajikan penelitian terdahulu yang
relevan.
Deteksi error dalam kata dapat dilakukan dengan aplikasi berbasis komputer
yang digunakan untuk mendeteksi dan menangani error dalam kata yang disebut
spelling checker. Spelling checker mencari segala jenis error yang terdapat dalam
tersebut.
spelling checker yaitu identifikasi (error detection) dan koreksi (error correction).
Selain itu, spelling checker dibagi menjadi dua tipe yaitu non-word error spell
checker dan real-word spell checker. Non-word error spell checker menangani
kata-kata salah ejaan yang terbentuk karena kesalahan ketik, sedangkan real-word
error spell checker mengutamakan menangani kata-kata pengganti kata yang error
Typographical error adalah suatu kesalahan yang terjadi pada saat proses
mengetik teks dan dapat mengubah arti dari suatu kata bahkan arti dari suatu
kalimat. Istilah ini mencakup kesalahan karena kegagalan mekanis atau slip tangan
atau jari, dan juga timbul akibat ketidaktahuan penulis seperti kesalahan ejaan.
Typographical error dapat disebabkan oleh, misalnya jari menekan dua tombol
Kesalahan bukan kata adalah kesalahan yang berfokus pada kata yang
terbentuk umumnya oleh kesalahan pengetikan. Kesalahan ejaan non kata ini
sebenarnya sesuai dengan kaidah bahasa namun tidak sesuai makna dalam
kalimat.
Tabel II-1. Contoh dari Bentuk Typographical error
sya makan nasi goreng sedangkan adik saya mkan nasi bungkus
saya makan nasi goreng sedangkan adik saya makan nasi bungkus
saya maakan nasi goreng sedangkan adik saya makan nqasi bungkus
saya makan nasi goreng sedangkan adik saya makan nasi bungkus
sayi makan nasi goyeng sedangkan adik saya makan nasi bingkus
saya makan nasi goreng sedangkan adik saya makan nasi bungkus
saay makan nasi goreng sedagnkan adik saya makan nasi bunguks
saya makan nasi goreng sedangkan adik saya makan nasi bungkus
Preprocessing adalah suatu proses awal mengelola data yang bertujuan untuk
mempersiapkan teks menjadi data yang akan mengalami pengolahan lebih lanjut.
a. Case Folding
dokumen, dari huruf besar ke huruf kecil. Jadi, hanya huruf ‘a’ sampai ‘z’
delimiter.
Saya mAkan nasi Goreng sedangkan adik saya makan Nasi bungkus
saya makan nasi goreng sedangkan adik saya makan nasi bungkus
b. Tokenizing
/ token ).
saya makan nasi goreng sedangkan adik saya makan nasi bungkus
jumlah minimum operasi yang dibutuhkan untuk mengubah satu string menjadi
string lain, di mana operasi yang digunakan sama dengan Levenshtein Distance
transposition diantara dua karakter (Jupin, Shi, & Obradovic, 2012). Damerau
Levenshtein Distance tidak hanya membedakan 4 operasi edit tersebut, namun juga
menyatakan bahwa operasi pada algoritma yang dikembangkan dapat sesuai dengan
sekitar 80% dari semua kesalahan penulisan manusia. Setiap kesalahan berupa
hilangnya karakter huruf, kelebihan karakter huruf, atau kesalahan urutan huruf dari
dua karakter huruf yang berbeda (contoh: dalam algoritma Damerau Levenshtein
ALGORITHM
for i 1 to m do { source prefixes initialization }
d[i][0] i
endfor
for j 1 to n do { target prefixes initialization }
d[0][j] j
endfor
{ using Damerau Levenshtein Distance Algorithm to check }
for i 1 to n do
for j 1 to m do
if (s[i] == t[j]) then
cost 0
else
cost 1
endif
d[i][j] minimum
(
d[i-1][j] + 1, { deletion }
d[i][j-1] + 1, { insertion }
d[i-1][j-1] + cost { subtitution }
)
if ( i>1 and j>1 and s[i] == t[j-1] and s[j-1] == t[i])
then
d[i][j] minimum
(
d[i][j],
d[i-2][j-2] + cost { transposition }
)
endif
endfor
end for
d[m][n] { return results }
2.2.5 N-Gram
kata dilakukan secara kontinuitas dari awal hingga akhir. Terdapat beberapa N-
Gram yaitu Unigram, Bigram, Trigram, dan Quadgram. Bigram adalah salah satu
akhir.
Karakter
bobot setiap kata (Herwijayanti, Ratnawati, & Muflikhah, 2018). Pada penelitian
ini, tf-idf digunakan untuk pembobotan atau pemberian ranking. Untuk menghitung
𝑁
𝑊𝑖𝑗 = 𝑡𝑓𝑖𝑗 x log 𝑛 (II-1)
Keterangan :
antara dua buah vektor. Dalam teks, fungsi ini digunakan sebagai pengukur
kesamaan antara query dengan setiap dokumen yang ada pada database. Dari
perhitungan ini, dihasilkan tingkat kesamaan pada dokumen yang sesuai dengan
atau similarity dengan menentukan sudut antara vektor dokumen dengan vektor
query dalam dimensi V pada bidang Euclidean. Hasil dari cosine similarity
memiliki nilai antara 0 sampai dengan 1. Nilai 0 merupakan nilai yang didapat
Setiawan, 2016). Rumus Cosine Similarity dapat dilihat pada persamaan II-2.
(II-2)
Keterangan :
Reciprocal Rank (RR) adalah inverse atau kebalikan dari peringkat target
dalam daftar saran kata yang ditampilkan. Mean Reciprocal Rank (MRR) adalah
rata-rata peringkat saran kata yang benar dari semua query. MRR merupakan
ukuran statistik yang cocok untuk evaluasi peringkat pencarian pertanyaan (Gan,
2015). Hasil dari MRR memiliki nilai antara 0 sampai dengan 1. Nilai 0 didapat
apabila tidak ada satupun target yang yang masuk dalam hasil kandidat kata yang
ditampilkan, sedangkan nilai 1 didapat apabila seluruh target berada pada peringkat
1 dari semua hasil kandidat kata yang ditampilkan. Rumus MRR dapat dilihat pada
persamaan II-3.
1
RR = 𝑟
𝑗𝑖
1 1 𝑄
MRR = ∑𝑞𝑗=1 𝑗
∑𝑖=1 𝑅𝑅𝑗𝑖 (II-3)
𝑞 𝑄𝑗
Keterangan :
q : Jumlah query
perangkat lunak yang menggunakan konsep object oriented, dan merupakan sebuah
proses yang iterative yang dapat menggunakan bahasa pemodelan UML (Unified
Unified Process.
Pada gambar tersebut dapat dilihat bahwa RUP memiliki 2 dimensi yaitu :
Transition.
Pada bagian ini memuat landasan teori dan beberapa penelitian yang telah
dilakukan oleh peneliti sebelumnya. Hal ini berkaitan dengan penelitian mengenai
2.3.1 Arina Indana Fahma, Imam Cholissodin, Rizal Setya Perdana (2018) :
insertion, deletion, dan substitution. Dari hasil pengujian 50 kata salah tersebut,
didapat nilai precision terbaik sebesar 0.97 pada uji coba typographical error jenis
insertion, dan nilai recall terbaik sebesar 1 yang didapatkan dari hasil uji coba
2.3.2 Viny Christanti M, Rudy, Dali S. Naga (2018) : Fast and Accurate
Jakarta, Indonesia.
yang dikombinasikan dengan Bigram dan Trigram. Penelitian tersebut terdiri dari
beberapa aspek penelitian yaitu akurasi, kecepatan, dan waktu. Algoritma Damerau
menghitung jarak kata dengan saran kata yang ada dikamus. N-Gram digunakan
untuk memprediksi satu kandidat kata mana yang paling tepat sebagai hasil koreksi.
berdasarkan hasil dari prediksi N-Gram. Dari hasil pengujian 5000 data tersebut,
18,89%.
2.4 Kesimpulan
dapat mendeteksi kesalahan tulisan dan memberikan saran kata. Algoritma yang
kesalahan kata yaitu insertion, deletion, substitution, dan transposition. Setelah itu
Similarity.
BAB III
METODOLOGI PENELITIAN
3.1 Pendahuluan
tahapan penelitian dideskripsikan secara rinci dengan mengacu pada suatu kerangka
kerja dan memberikan sebuah solusi untuk rumusan masalah dan mencapai tujuan
penelitian. Di akhir bab ini berisi perancangan manajemen proyek pada pelaksanaan
penelitian.
Data yang digunakan dalam penelitian ini adalah data sekunder, yaitu data
yang telah tersedia berupa abstrak tugas akhir mahasiswa Jurusan Teknik
telah dimodifkasi sebelumnya yaitu dengan mengubah suatu kata dengan berbagai
jenis kesalahan kata. Kesalahan kata terdiri dari 30 jenis kesalahan kata insertion,
30 jenis kesalahan kata deletion, 30 jenis kesalahan kata substitution, dan 30 jenis
Untuk mencapai tujuan dari penelitian ini maka akan dilakukan dengan
Kerangka kerja dari sistem dapat dilihat pada gambar III-1 yang
a. Preprocessing
Pada tahap ini, data masukan akan dilakukan pemrosesan awal terlebih
dahulu. Preprocessing yang digunakan dalam penelitian ini yaitu case folding dan
tokenizing. Case folding yaitu data tersebut akan dilakukan penyeragaman huruf ,
dari huruf besar ke huruf kecil semua, selanjutnya dilakukan proses tokenizing yaitu
b. Identifikasi kata
identifikasi kata dengan mencocokkan kata dengan kamus, hal ini bertujuan untuk
mengetahui apakah kata tersebut benar atau salah. Apabila kata tersebut tidak cocok
dengan kamus, maka kata tersebut teridentifikasi salah. Identifikasi kata dilakukan
maka proses selesai, jika kata teridentifikasi salah maka kata tersebut akan menuju
proses selanjutnya.
Mulai
Data
Preprocessing
Identifikasi Kata
Kamus
Benar? Ya
Tidak
Penentuan Kandidat Kata
dengan Damerau Levenshtein
Distance
Pembobotan Karakter
Menggunakan metode tf-idf
Selesai
Pada tahap ini, kata yang tidak cocok pada tahap sebelumnya akan dilakukan
proses penentuan kandidat kata dengan menggunakan algoritma DLD. Proses ini
menghasilkan kandidat kata berdasarkan kata yang salah ejaan dengan batasan jarak
edit = 1
Pada tahap ini, masing-masing kandidat kata akan dilakukan pemecahan kata.
Metode yang digunakan yaitu Bigram, dimana sebuah kata dipenggal menjadi
pembobotan karakter. Hal ini bertujuan untuk mengindikasikan ada atau tidaknya
suatu karakter pada suatu kata yang digunakan. Pembobotan karakter menggunakan
Pada tahap ini, kandidat kata hasil proses sebelumnya akan dilakukan proses
tersebut lebih dari 5 maka akan diambil 5 kandidat dengan probabilitas tertinggi
algoritma Cosine Similarity. Hasil dari keluaran sistem ini berjumlah 5 kandidat
kata tertinggi berdasarkan nilai Cosine Similarity. Dalam penelitian ini, pengujian
akan melihat ranking / posisi target dari 5 kandidat kata yang ditampilkan.
Format data pengujian dapat dilihat pada tabel III-1. Tabel ini menunjukkan
rancangan hasil pengujian sistem yang berfungsi untuk menggambarkan urutan kata
Cosine Similarity.
Kata yang
No. salah Result Ranking RR
(query)
1.
2.
3.
Dst.
Keterangan :
a) Kata yang salah yaitu kata yang salah ejaan yang terdeteksi oleh sistem
b) Result yaitu hasil dari kata yang telah diurutkan yang ditampilkan sebanyak
c) Ranking yaitu peringkat / posisi kata dalam 5 kandidat kata saran yang
Setelah didapat nilai RR dari setiap kata, maka akan dihitung nilai Mean
Reciprocal Rank (MRR) yang rumusnya telah dijelaskan pada bab II. Nilai MRR
akan dilihat berdasarkan jenis typographical error dalam bentuk persentase. Hasil
algoritma Damerau Levenshtein Distance dan Cosine Similarity, oleh karena itu
kesalahan kata dan memberikan saran kata berdasarkan kata salah ejaan
menggunakan algoritma Damerau Levenshtein Distance , serta dapat menentukan
Reciprocal Rank (MRR) hasil dari sistem Spelling Checker. Adapun pengujian
dilakukan dengan menggunakan data, kerangka kerja, kriteria pengujian serta alat
Data yang akan diuji yaitu sebanyak 120 kata salah ejaan dengan masing-
masing 30 jenis kesalahan kata deletion, 30 jenis kesalahan kata insertion, 30 jenis
kesalahan kata substitution, dan 30 jenis kesalahan kata transposition. Setelah itu
akan dilihat nilai Mean Reciprocal Rank (MRR) pada sistem Spelling Checker.
Cosine Similarity, maka digunakan metode evaluasi Mean Reciprocal Rank (MRR)
yang akan dibahas pada bab V. selain itu juga akan dilihat waktu yang digunakan
sistem dalam mengecek kesalahan kata serta memberikan kata saran berdasarkan
alat penelitian dalam tugas akhir ini berorientasi objek yaitu menggunakan Rational
lunak yang menggunakan konsep object oriented, dan merupakan sebuah proses
transisi.
fungsionalitas atau fitur-fitur yang dibutuhkan pada perangkat lunak. Pada tahapan
teks berbahasa Indonesia dan kamus bahasa Indonesia. Pada tahap analisis dan
desain, penulis membuat diagram use case. Pada tahap implementasi, penulis
diagram use case. Pada tahap pengujian, penulis memastikan apakah user
lunak, desain basis data, dan desain antar muka sesuai dengan user requirements
pengumpulan kebutuhan. Activity diagram dan sequence diagram dibuat pada tahap
perangkat lunak, desain basis data, desain antar muka, activity diagram, dan
yaitu java. Kebutuhan lain dalam proses pengembangan perangkat lunak juga
CPU T4200 @ 2.00 GHz, RAM 2 GB, windows 10 (32bit), Harddisk 500GB,
Netbeans IDE 8.2. Class diagram dibuat pada tahap analisis dan desain. Pada
penulis melakukan unit testing terhadap perangkat lunak yang telah dikembangkan.
3.4.4 Fase Transisi
perangkat keras yang sama saat digunakan untuk pengembangan perangkat lunak
yaitu laptop dengan dengan Processor Pentium(R) Dual-Core CPU T4200 @ 2.00
GHz, RAM 2 GB, windows 10 (32bit), Harddisk 500GB. Penulis lalu mendesain
tabel skenario pada tahap analisis dan desain. Pada tahapan implementasi, penulis
dari tahap inisialisasi masalah sampai dengan pada tahap kesimpulan dari
dilihat dalam Work Breakdown Structure (WBS) yang tertera pada Tabel III-3 dan
Gantt Chart pada Gambar III-2, Gambar III-3, Gambar III-4, Gambar III-5, Gambar
III-6, Gambar III-7, Gambar III-8, Gambar III-9 dan Gambar III-10.
Tabel III-3. Penjadwalan Penelitian Dalam Bentuk Work Breakdown Structure (WBS)
Spelling Checker Menggunakan Algoritma Damerau 196 days Fri 08/06/18 Thu 07/03/19
Levenshtein Distance dan Cosine Similarity
Menentukan Ruang Lingkup dan Unit Penelitian 30 days Fri 08/06/18 Thu 19/07/18
P2 Membuat latar belakang dan rumusan masalah 8 days Sun 17/06/18 Tue 26/06/18 P1
P3 Menentukan tujuan dan manfaat penelitian 4 days Fri 01/06/18 Wed 06/06/18 P2
T1 Tersedia dokumen hasil tahapan penelitian 1 day Thu 19/07/18 Thu 19/07/18 P5
Menentukan Dasar Teori yang Berkaitan dengan 19 days Mon 23/07/18 Thu 16/08/18
Penelitian
P6 Mengumpulkan jurnal, paper, dan literatur ilmiah yang 8 days Mon 23/07/18 Wed 01/08/18
P1
berkaitan dengan penelitian
P7 Mempelajari Algortima Damerau Levenshtein Distance 10 days Thu 02/08/18 Wed 15/08/18
dan Cosine Similarity serta metode Dictionary Lookup dan P6
Bigram
T2 Tersedia dokumen hasil tahapan penelitian 1 day Thu 16/08/18 Thu 16/08/18 P7
P8 Menentukan teknik yang digunakan untuk preprocessing 9 days Tue 31/07/18 Fri 10/08/18 P6
P9 Menentukan algoritma yang digunakan untuk mengecek 5 days Fri 10/08/18 Thu 16/08/18
P6
kesalahan kata
P10 Menentukan algoritma untuk mengurutkan kandidat 5 days Fri 17/08/18 Thu 23/08/18
P6
saran kata
T3 Tersedia dokumen hasil tahapan penelitian 1 day Fri 24/08/18 Fri 24/08/18 P8, P9, P10
Menentukan alat yang digunakan untuk pelaksanaan 120 days Mon 10/09/18 Thu 21/02/19
Penelitian
P11 Menentukan user requirements dan fungsionalitas 6 days Mon 10/09/18 Mon 17/09/18
P1, P4, P5
perangkat lunak
Requirements 4 days Fri 21/09/18 Wed 26/09/18
P12 Mengumpulkan dataset penelitian 4 days Fri 21/09/18 Wed 26/09/18 P4, P5
P13 Membuat use case diagram 5 days Mon 01/10/18 Fri 05/10/18 P11
P15 Memastikan user requierements dan fungsionalitas sudah 4 days Sat 03/11/18 Wed 07/11/18
P14
valid
P16 Menentukan arsitektur perangkat lunak, desain basis 4 days Mon 26/11/18 Thu 29/11/18
P15
data, dan desain antar muka
P17 Melengkapi user requirements yang telah didefinisikan di 4 days Mon 03/12/18 Thu 06/12/18
P11
fase inception
Analysis & Design 3 days Thu 13/12/18 Mon 17/12/18
P18 Membuat activity dan sequence diagram 3 days Thu 13/12/18 Mon 17/12/18 P13, P16
P20 Memastikan arsitektur perangkat lunak, desain basis 3 days Mon 24/12/18 Wed 26/12/18
P18
data, dan desain antar muka sudah valid
P21 Menentukan kelas-kelas pada perangkat lunak 3 days Mon 24/12/18 Wed 26/12/18 P19
P22 Menentukan bahasa pemrograman yang digunakan 2 days Thu 27/12/18 Fri 28/12/18
P7, P8, P9, P10
untuk mengembangkan perangkat lunak
P23 Menentukan kebutuhan perangkat keras yang digunakan 2 days Sat 29/12/18 Mon 31/12/18 P21
P24 Membuat class diagram 4 days Mon 31/12/18 Thu 03/01/19 P20, P21
Implementation 33 days Thu 03/01/19 Mon 18/02/19
P25 Mengimplementasi kelas-kelas ke dalam kode program 33 days Thu 03/01/19 Mon 18/02/19 P23
P26 Melakukan unit testing 26 days Mon 14/01/19 Mon 18/02/19 P23
P27 Membuat rencana atau skenario pengujian 2 days Mon 21/01/19 Tue 22/01/19 P25
P28 Menentukan tools pengujian yang diperlukan dan sampel 2 days Fri 25/01/19 Mon 28/01/19
P25
pertanyaan
P29 Membuat tabel skenario pengujian 3 days Tue 29/01/19 Thu 31/01/19 P26, P27
P30 Melakukan pengujian terhadap perangkat lunak 3 days Sat 02/02/19 Tue 05/02/19
P26, P27
berdasarkan skenario atau rencana pengujian
T4 Tersedia dokumen hasil tahapan penelitian 1 day Tue 12/02/19 Tue 12/02/19 P30
P32 Menentukan rancangan hasil penelitian 5 days Thu 14/02/19 Wed 20/02/19 P2, P4
P33 Melakukan pengujian penelitian berdasarkan hasil 3 days Thu 14/02/19 Mon 18/02/19
P29
pengujian perangkat lunak
T5 Tersedia dokumen hasil tahapan penelitian 1 day Fri 22/02/19 Fri 22/02/19
Melakukan Analisa Hasil Pengujian dan Membuat 13 days Mon 18/02/19 Wed 06/03/19
Kesimpulan
P34 Melakukan analisa terhadap hasil pengujian penelitian 7 days Mon 18/02/19 Tue 26/02/19
dengan membandingkan hasil pengecekan sistem dengan P32
hasil pengecekan secara manual
P35 Membuat kesimpulan dan saran berdasarkan analisa 5 days Thu 28/02/19 Wed 06/03/19
P33
terhadap hasil pengujian
T6 Tersedia dokumen hasil tahapan penelitian 1 day Thu 07/03/19 Thu 07/03/19 P34
Penjadwalan penelitian dalam bentuk Gantt Chart dibuat dengan tool Microsoft Project 2016. Gambar III-2, Gambar III-3,
Gambar III-4, Gambar III-5, Gambar III-6, Gambar III-7, Gambar III-8, Gambar III-9, dan Gambar III-10 menampilkan Gantt Chart
Gambar III-2. Penjadwalan Penelitian Tahap Menentukan Ruang Lingkup dan Unit Penelitian
Gambar III-3. Penjadwalan Penelitian Tahap Menentukan Dasar Teori yang Berkaitan dengan Penelitian
Gambar III –10. Penjadwalan Penelitian Tahap Melakukan Analisa Hasil Pengujian dan Membuat Kesimpulan
BAB IV
4.1 Pendahuluan
transisi. Setiap fase memiliki pemodelan bisnis, kebutuhan, analisis dan desain,
IV-1
sehingga dapat mempengaruhi arti dari tulisan tersebut. Hal tersebut dikarenakan
huruf dalam papan ketik yang berdekatan ataupun kecepatan dalam pengetikan.
Kesalahan pengetikan terdiri dari 4 yaitu kesalahan kata jenis insertion, kesalahan
kata jenis deletion, kesalahan kata jenis substitution, dan kesalahan kata jenis
dari kesalahan pengetikan. Oleh karena itu sistem spelling checker dibutuhkan
untuk mengoreksi kata-kata yang salah ejaan dan memberikan kandidat kata
case folding dan tokenizing. Setelah itu, kata tersebut akan dilakukan pengecekan
menggunakan Dictionary Lookup untuk mengetahui mana kata yang salah. Setelah
didapat kata yang salah, maka dicari kandidat kata yang sesuai dengan kata salah
berupa term dan term tersebut akan dilakukan pembobotan tf-idf serta menghitung
diurutkan dari yang terbesar berdasarkan nilai Cosine Similarity. Masukan pada
Keluaran yang dihasilkan berupa hasil dari proses identifikasi dan kandidat kata
berdasarkan kata salah ejaan. Perangkat lunak yang dibangun merupakan perangkat
lunak berbasis desktop yang mampu melakukan pengecekan kata yang salah ejaan
dapat dilihat pada tabel IV-1 dan kebutuhan non-fungsional sistem yang akan
Pada fase insepsi, kegiatan yang dilakukan pada tahap analisis dan desain
Similarity.
permasalahan yang ada diperlukan perangkat lunak yang dapat mengecek kata salah
ejaan dan memberikan kandidat kata yang benar. Oleh karena itu, perangkat lunak
dengan berbagai jenis kesalahan kata yaitu kesalahan kata jenis insertion, deletion,
itu akan dilakukan proses pemecahan kata menjadi Bigram dan dilakukan
pembobotan berupa tf-idf. Selanjutnya kata tersebut akan dihitung nilai kemiripan
tersebut.
Data yang dibutuhkan pada perangkat lunak yang dibangun yaitu data
1. Dokumen
Data ini berupa kumpulan abstrak tugas akhir mahasiswa Teknik Informatika
yang telah dimodifkasi sebelumnya yaitu dengan mengubah suatu kata dengan
berbagai jenis kesalahan kata. Kesalahan kata terdiri dari 30 jenis kesalahan kata
insertion, 30 jenis kesalahan kata deletion, 30 jenis kesalahan kata substitution, dan
Kamus yang digunakan yaitu Kamus Besar Bahasa Indonesia (KBBI) meliputi
kata dasar dan kata imbuhan yang disimpan dalam format .txt.. Kamus ini
Data
Preprocessing
- Case Folding
- Tokenizing
case folding dan tokenizing. Contoh dokumen dapat dilihat pada gambar IV-2.
1. Case Folding
Case folding pada penelitian ini yaitu menyamakan seluruh huruf menjadi
huruf kecil (lower case). Hasil case folding dapat dilihat pada gambar IV-3.
Tokenizing pada penelitian ini yaitu memecah kalimat menjadi kata / token.
Dictionary Lookup
membandingkan kata dalam dokumen dengan yang ada pada kamus. Hasil
Damerau Levenshtein
Distance
Daftar Kata
yang sesuai berdasarkan kata yang salah ejaan dengan cara menghitung nilai edit
distance. Semakin kecil nilai edit distance suatu kata maka kemungkinan kata
Kusumaningrum, 2015). Hasil dari perhitungan nilai edit distance dapat dilihat
dalam penelitian ini hanya diambil nilai edit distance maksimal sebesar 2 (dua).
Hasil algoritma Damerau Levenshtein Distance dapat dilihat pada gambar IV-9
Pemecahan Kata
Bigram
Bigram digunakan untuk memecah kandidat kata (string target) dan kata
karakter sejumlah n = 2. Hasil dari pemecahan Bigram dapat dilihat pada tabel IV-
3.
Pembobotan Term
TF / IDF
untuk mengindikasikan ada atau tidaknya suatu karakter pada suatu kata yang
digunakan. Hasil dari perhitungan TF dan IDF dapat dilihat pada tabel IV-4.
TF
Term DF IDF
Q T1 T2 T3 T4 T5
_b 1 1 0 0 1 1 3 0,222
bu 1 1 0 0 1 1 3 0,222
uk 1 1 0 1 0 1 3 0,222
ku 0 1 1 0 0 0 2 0,398
_a 0 0 1 0 0 0 1 0,699
_d 0 0 0 1 0 0 1 0,699
ak 0 0 1 0 0 0 1 0,699
u_ 0 1 1 0 0 0 2 0,398
du 0 0 0 1 0 0 1 0,699
ka 0 0 0 1 0 1 2 0,398
ud 0 0 0 0 1 0 1 0,699
di 0 0 0 0 1 0 1 0,699
a_ 0 0 0 1 0 1 2 0,398
i_ 0 0 0 0 1 0 1 0,699
k_ 1 0 0 0 0 0 0 0
Setelah didapatkan nilai TF dan IDF, maka akan dilakukan perhitungan nilai
bobot TF/IDF. Hasil dari perhitungan pembobotan term dapat dilihat pada tabel IV-
5.
W = TF X IDF
Term
Q T1 T2 T3 T4 T5
_b 0,22 0,22 0 0 0,222 0,222
bu 0,22 0,22 0 0 0,222 0,222
uk 0,22 0,22 0 0,222 0 0,222
ku 0 0,4 0,4 0 0 0
_a 0 0 0,7 0 0 0
_d 0 0 0 0,699 0 0
ak 0 0 0,7 0 0 0
u_ 0 0,4 0,4 0 0 0
du 0 0 0 0,699 0 0
ka 0 0 0 0,398 0 0,398
ud 0 0 0 0 0,699 0
di 0 0 0 0 0,699 0
a_ 0 0 0 0,398 0 0,398
i_ 0 0 0 0 0,699 0
k_ 0 0 0 0 0 0
dengan menentukan sudut antara vektor dokumen dengan vektor query dalam
dimensi V pada bidang Euclidean. Semakin besar nilai Cosine Similarity nya maka
masing-masing query dan kata target. Perhitungan panjang vector dapat dilihat pada
tabel IV-6.
Q x Ti
Term
T1 T2 T3 T4 T5
_b 0,04922 0 0 0,04922 0,049
bu 0,04922 0 0 0,04922 0,049
uk 0,04922 0 0,049 0 0,049
ku 0 0 0 0 0
_a 0 0 0 0 0
_d 0 0 0 0 0
ak 0 0 0 0 0
u_ 0 0 0 0 0
du 0 0 0 0 0
ka 0 0 0 0 0
ud 0 0 0 0 0
di 0 0 0 0 0
a_ 0 0 0 0 0
i_ 0 0 0 0 0
k_ 0 0 0 0 0
Jumlah 0,14765 0 0,049 0,09843 0,148
Term Perpangkatan
Q T1 T2 T3 T4 T5
_b 0,05 0,04922 0 0 0,0492 0,049
bu 0,05 0,04922 0 0 0,0492 0,049
uk 0,05 0,04922 0 0,049 0 0,049
ku 0 0,15836 0,158 0 0 0
_a 0 0 0,489 0 0 0
_d 0 0 0 0,489 0 0
ak 0 0 0,489 0 0 0
u_ 0 0,15836 0,158 0 0 0
du 0 0 0 0,489 0 0
ka 0 0 0 0,158 0 0,158
ud 0 0 0 0 0,4886 0
di 0 0 0 0 0,4886 0
a_ 0 0 0 0,158 0 0,158
i_ 0 0 0 0 0,4886 0
k_ 0 0 0 0 0 0
Jumlah 0,15 0,46436 1,294 1,343 1,5641 0,464
SQRT 0,38 0,68144 1,137 1,159 1,2506 0,681
Setelah didapatkan nilai panjang vektor dari masing-masing query dan kata
target, maka selanjutnya dihitung nilai Cosine Similarity. Perhitungan nilai Cosine
0.1477
Sim (Q,T1) = = 0.56
0.38∗0.6814
0
Sim (Q,T2) = =0
0.38∗1.137
0.049
Sim (Q,T3) = = 0.11
0.38∗1.159
0.098
Sim (Q,T4) = = 0.2
0.38∗1.2506
0.15
Sim (Q,T5) = = 0.56
0.38∗0.681
kata dari yang terbesar hingga terkecil. Hasil perangkingan kandidat kata dapat
pengujian. Data uji dimisalkan sebanyak 10 kata salah. Hasil perhitungan MRR
Jenis
al Error
masak,masuk,masih,asik,mis
2 mask deletion 2 0,5
kin
MRR 0.8
diagram aktivitas.
1. Use Case
oleh aktor terhadap perangkat lunak. Pada perangkat lunak ini terdapat tiga use case
yaitu use case muat data, use case pengecekan, dan use case pengurutan kandidat
serta satu aktor yaitu user. Diagram use case dapat dilihat pada gambar IV-11.
Dalam penelitian ini yang menjadi actor adalah penulis, pembimbing, dan
Skenario use case adalah urutan spesifik dari aksi dan interaksi antara aktor
dan sistem. Tabel skenario use case dapat dilihat pada tabel IV-11, IV-12, IV-13,
dan IV-14.
Tabel IV-11. Skenario Use Case Muat Data
Identifikasi
Nomor 001
Aktor User
Skenario Utama
1. Menekan tombol
“Open File”
2. Membuka open dialog
3. Memilih file
berformat .txt dalam
komputer
4. Menampilkan isi file
Skenario Alternatif
1. Menekan tombol
“Open File”
Identifikasi
Nomor 002
Nama Pengecekan
Aktor User
Skenario Utama
1. Menekan tombol
“Proses”
2. Melakukan proses preprocessing
3. Melakukan proses pengecekan kata dengan
Dictionary Lookup
4. Melakukan perhitungan edit distance dengan
Damerau Levenshtein Distance
5. Melakukan pembobotan kata tf/idf
Identifikasi
Nomor 003
Aktor User
Sistem aktif, aktor pada halaman utama, dan use case 002
Kondisi Awal
aktif
Skenario Utama
1. Memilih kandidat
kata pada tabel
2. Menampilkan kandidat kata terpilih masing-
masing query dalam field
Identifikasi
Nomor 004
Nama Memilih Kandidat
Aktor User
Sistem aktif, aktor pada halaman utama, dan use case 003
Kondisi Awal
aktif
Skenario Utama
1. Menekan tombol
“Hitung MRR”
2. Menghitung nilai MRR
Pada subbab ini akan dibahas mengenai perancangan perangkat lunak yang
dilakukan pada fase insepsi. Perancangan yang dibahas pada subbab ini meliputi
dan menampilkan kandidat kata terurut. Adapun data yang akan melalui proses
tersebut adalah data abstrak tugas akhir yang disimpan dalam file berformat .txt.
Pada subbab ini membahas tentang perancangan antar muka perangkat lunak
yang dibangun. Rancangan antarmuka perangkat lunak dapat dilihat pada gambar
IV-13.
Pada subbab ini dibahas mengenai kebutuhan sistem dari perangkat lunak
yang dibangun berdasarkan hasil analisis dan perancangan pada tahap selanjutnya.
Perangkat keras yang digunakan pada tahap pengembangan dan penelitian ini
3. RAM 2 GB;
Berdasarkan use case yang dibentuk, diagram aktivitas yang dibentuk pada
pengembangan perangkat lunak ini berjumlah empat buah. Diagram aktivitas tiap
use case dapat dilihat pada gambar IV-14, IV-15, IV-16, dan IV-17.
uc Actors
User Sistem
Mulai
Memilih file
berformat .txt dalam Menampilkan
komputer pesan "File yang
Anda masukkan
bukan format .txt"
Tidak
Selesai
kolaborasi dinamis antara sejumlah objek. Berdasarkan use case yang dibentuk,
diagram sequence yang dibentuk pada pengembangan perangkat lunak ini
berjumlah empat buah. Sequence Diagram melakukan muat data dapat dilihat pada
gambar IV-18, dan Sequence Diagram melakukan pengecekan dapat dilihat pada
gambar IV-19.
mempercepat hasil perangkat lunak. Hasil yang diharapkan dari fase ini adalah
sebuah produk perangkat lunak yang siap digunakan oleh end-user, yaitu sebuah
library yang ada pada Java. Penulis tidak menambahkan library baru dalam
dengan yang lain. Setiap kelas terdapat atribut dan operasi. Terdapat 11 kelas yang
kelas entity (Kandidat_Kata, Query). Diagram kelas perangkat lunak dapat dilihat
perangkat lunak berdasarkan diagram kelas dan rancangan antarmuka yang telah
dalam bahasa pemrograman Java. Implementasi kelas dalam bahasa Java dapat
untuk menjalankan
fungsi_fungsi pada
perangkat lunak
fungsi-fungsi yang
fungsi-fungsi yang
controller untuk
menangani proses
kandidat kata
pembobotan term
menggunakan tf idf
pengolahan data
dan tokenizing
9. Evaluasi_MRR Evaluasi_MRR.java kelas evaluasi_MRR
MRR
untuk menyimpan
dokumen
dokumen
pada fase elaborasi. Gambar. Antarmuka halaman utama perangkat lunak dapat
Pada fase ini dibahas mengenai pengujian dari perangkat lunak pengecekan
kata salah ejaan berbahasa Indonesia yang telah dibangun. Pengujian dilakukan
Pengujian perangkat lunak secara black box dan white box dengan terlebih
dahulu membuat rencana pengujian berdasarkan use case yang dibuat pada fase
keras yang sama saat membangun perangkat lunak pengecekan kata salah ejaan
Rencana pengujian use case melakukan muat data dapat dilihat pada tabel
IV-17.
Jenis Tingkat
No. ID Pengujian
Pengujian Pengujian
berekstensi .txt
4.5.3.2 Rencana Pengujian Use Case Melakukan Pengecekan
Rencana pengujian use case melakukan pengecekan dapat dilihat pada tabel
IV-18.
Jenis Tingkat
No. ID Pengujian
Pengujian Pengujian
Rencana pengujian use case memilih kandidat kata dapat dilihat pada tabel
IV-19.
Jenis Tingkat
No. ID Pengujian
Pengujian Pengujian
pada tabel
Rencana pengujian use case melakukan hitung MRR dapat dilihat pada
tabel IV-20.
Tabel IV-20. Rencana Pengujian Use Case Melakukan Hitung MRR
Jenis Tingkat
No. ID Pengujian
Pengujian Pengujian
MRR”
4.5.4 Implementasi
Berikut ini adalah kasus uji yang dilakukan terhadap perangkat lunak yang
dibangun. Kasus uji dilakukan berdasarkan rencana uji yang telah dipaparkan
sebelumnya.
4.5.4.1 Pengujian Use Case Melakukan Muat Data
Pengujian use case melakukan muat data dapat dilihat pada tabel IV-21.
Keluaran yang
Prosedur
ID Deskripsi Masukan Hasil yang Didapat Kesimpulan
Pengujian Diharapkan
UC1 Memasukkan 1. Menekan Tidak ada Path file dan isi file .txt, Path file dan isi file .txt, Terpenuhi
-01
file tombol “Open tombol “proses” aktif, tombol “Open File” tidak
berekstensi File” dan tombol “Open File” aktif ,dan tombol “proses”
berekstensi .txt
4.5.4.2 Pengujian Use Case Melakukan Pengecekan
Pengujian use case melakukan pengecekan dapat dilihat pada tabel IV-22.
Keluaran yang
Prosedur
ID Deskripsi Masukan Hasil yang Didapat Kesimpulan
Pengujian Diharapkan
UC2 Menekan Menekan tombol File .txt Hasil pengecekan kata Mendapatkan hasil kata Terpenuhi
-01
tombol “proses” salah ejaan beserta salah ejaan beserta
aktif
4.5.4.3 Pengujian Use Case Memilih Kandidat
Pengujian use case memilih kandidat kata dapat dilihat pada tabel IV-23.
Keluaran yang
Prosedur
ID Deskripsi Masukan Hasil yang Didapat Kesimpulan
Pengujian Diharapkan
UC3 Memilih Klik salah satu Kata salah Kandidat kata masing- Kandidat kata masing- Terpenuhi
-01
kandidat kata kandidat kata ejaan masing kata salah ejaan masing kata salah ejaan
berdasarkan untuk masing- beserta terpilih dan tombol terpilih dan tombol
kata salah masing kata salah kandidat “Hitung MRR” aktif “Hitung MRR” aktif
Pengujian use case hitung MRR dapat dilihat pada tabel IV-24.
Keluaran yang
Prosedur
ID Deskripsi Masukan Hasil yang Didapat Kesimpulan
Pengujian Diharapkan
UC4 Menekan Menekan tombol Kandidat Mendapatkan hasil Mendapatkan hasil Terpenuhi
-01
tombol “Hitung MRR” kata perhitungan MRR perhitungan MRR
“Hitung masing-
MRR” masing
kata salah
ejaan
4.6 Kesimpulan
dengan kata salah ejaan, dan algoritma Cosine Similarity dapat menghitung nilai
kemiripan antara kata salah ejaan dan kandidat katanya. Perangkat lunak yang
dikembangkan ini telah sesuai dengan kebutuhan penelitian. Selain itu juga, bab ini
5.1 Pendahuluan
Similarity telah dilakukan pada bab IV. Bab V akan menyajikan kata salah ejaan
lunak.
Sriwijaya yang kemudian disalin dan dimodifikasi dengan mengubah suatu kata
dengan berbagai jenis kesalahan kata serta disimpan dalam dokumen berekstensi
.txt. Data berjumlah 4 dokumen, dimana 1 dokumen terdiri dari 30 jenis kesalahan
kata insertion, 1 dokumen terdiri dari 30 jenis kesalahan kata deletion, 1 dokumen
terdiri dari 30 jenis kesalahan kata substitution, dan 1 dokumen terdiri dari 30 jenis
kesalahan kata transposition. Kandidat kata untuk masing-masing kata salah ejaan
berjumlah 5 kandidat kata. Metode Dictionary Lookup digunakan untuk
digunakan untuk mendapatkan kandidat kata salah ejaan berdasarkan kata salah
ejaan, serta metode tf-idf, bigram, dan algoritma Cosine Similarity digunakan untuk
kata berdasarkan kata salah ejaan. Pengujian dilakukan hanya kesalahan 1 karakter
dilihat pada tabel V-1 dan hasil pengurutan kandidat kata berdasarkan perhitungan
Jenis
Kata
Kesalahan Query Hasil DLD
Seharusnya
Kata
prbandingan perbandingan perbandingan
merupkan merupakan merupakan
ketdakpastian ketidakpastian ketidakpastian
bla bila ala, bal, bala, bea, bela,bila, bola, ela, la, vla
ai, bi, bui, ci, di, fi, gi, hi, ji, ki, kui, mi, ni, oi , pi, qi, si, tui,
ui uji u, ua, uai, ubi, udi, uh, uih, uik, uis, uit, uji, uli, um, umi,
uni, uri, xi
Tabel V-3. Hasil Pengurutan Kandidat Kata Berdasarkan Perhitungan Cosine Similarity Jenis Kesalahan Insertion
Tabel V-5. Hasil Pengurutan Kandidat Kata Berdasarkan Perhitungan Cosine Similarity Jenis Kesalahan Transposition
maka didapat nilai MRR untuk masing-masing jenis kesalahan kata yang terdiri dari
1 Deletion 88.89%
2 Insertion 97.78%
3 Substitution 86.11%
4 Transposition 89%
Berdasarkan tabel V-6, nilai MRR pada masing-masing jenis kesalahan kata
memiliki nilai yang berbeda. Hal ini dipengaruhi ranking atau posisi kandidat kata
yang dimaksud untuk setiap query, semakin tinggi ranking kandidat kata maka nilai
MRR semakin besar. Jenis kesalahan deletion menghasilkan nilai MRR sebesar
88.89% , hal ini dikarenakan ada beberapa kandidat kata berada pada ranking ke 2
dan 3 serta berada diluar 5 ranking teratas. Jenis kesalahan insertion menghasilkan
nilai MRR sebesar 97%, hal ini dikarenakan rata-rata kandidat kata berada pada
hal ini dikarenakan ada beberapa kandidat kata berada pada ranking ke 2 dan 3 serta
pada ranking ke 2 dan ada juga yang berada pada ranking ke 5. Jenis kesalahan
Insertion menghasilkan nilai terbesar dikarenakan dari segi struktur kata memiliki
kata yang sebenarnya berdasarkan kata salah ejaan. Namun ketika dilakukan
kandidat kata tersebut tidak masuk dalam 5 kandidat teratas. Hal ini dikarenakan
pengurutan kandidat kata, jika terdapat kandidat kata yang memiliki nilai Cosine
Similarity yang besarnya sama, maka akan diurutkan berdasarkan letak kata yang
5.4 Kesimpulan
Dari hasil pengujian yang telah dilakukan, didapatkan hasil dari pengujian
memberikan kandidat kata yang sesuai dengan kata salah ejaan dan algoritma
Cosine Similarity dapat menghitung nilai kemiripan antara kata salah ejaan dengan
kandidat katanya. Nilai MRR terbesar pada jenis kesalahan insertion dikarenakan
dari segi struktur kata memiliki kesamaan bigram paling banyak dengan kandidat
katanya.
BAB VI
6.1 Kesimpulan
Distance dan Cosine Similarity menghasilkan nilai MRR pada jenis kesalahan
kata deletion sebesar 88.89%, jenis kesalahan kata insertion sebesar 97.78%,
jenis kesalahan kata substitution sebesar 86.11%, dan jenis kesalahan kata
Saran yang ingin penulis sampaikan untuk pengembangan lebih lanjut dari
2. Keterkaitan kata dalam satu kalimat dapat juga diperhatikan dalam penelitian
Abdillah, A. A., & Muktyas, I. B. (2013). Implementasi vector space model untuk
pencarian dokumen, (May 2015), 0–7.
Damerau, F. J., Corporation, I. B. M., & Heights, Y. (1964). A Technique for
Computer Detection and Correction of Spelling Errors *, (3), 171–176.
Fahma, A. I., Cholissodin, I., & Perdana, R. S. (2018). Identifikasi Kesalahan
Penulisan Kata ( Typographical Error ) pada Dokumen Berbahasa Indonesia
Menggunakan Metode N-gram dan Levenshtein Distance, 2(1), 53–62.
Gan, J. Q. (2015). ORIGINAL RESEARCH A query suggestion method
combining TF-IDF and Jaccard Coefficient for interactive web search, 4(2),
119–125. https://doi.org/10.5430/air.v4n2p119
Herwijayanti, B., Ratnawati, D. E., & Muflikhah, L. (2018). Klasifikasi Berita
Online d engan menggunakan Pembobotan TF-IDF dan Cosine Similarity,
2(1), 306–312.
Jupin, J., Shi, J. Y., & Obradovic, Z. (2012). Understanding Cloud Data Using
Approximate String Matching and Edit Understanding Cloud Data Using
Approximate String Matching and Edit Distance, (May 2016).
https://doi.org/10.1109/SC.Companion.2012.149
Kornain, A., & Yansen, F. (n.d.). PENERAPAN ALGORITMA JARO-
WINKLER DISTANCE UNTUK SISTEM PENDETEKSI PLAGIARISME
PADA DOKUMEN TEKS BERBAHASA INDONESIA Hal-1 Kesamaan
Hal-2, 1–10.
Lahitani, A. R., Permanasari, A. E., & Setiawan, N. A. (2016). Cosine Similarity
to Determine Similarity Measure : Study Case in Online Essay Assessment.
Luqman. (2009). Program Aplikasi Pengoreksian Ejaan Bahasa Indonesia
Berbasis Web, 13–19.
Maghfira, T. N., Cholissodin, I., & Widodo, A. W. (2017). Deteksi Kesalahan
Ejaan dan Penentuan Rekomendasi Koreksi Kata yang Tepat Pada Dokumen
Jurnal JTIIK Menggunakan Dictionary Lookup dan Damerau-Levenshtein
Distance, 1(6), 498–506.
Rochmawati, Y., & Kusumaningrum, R. (2015). Studi Perbandingan Algoritma
Pencarian String dalam Metode Approximate String Matching untuk
Identifikasi Kesalahan Pengetikan Teks, 125–134.
Soleh, M. Y., & Purwarianti, A. (2011). A Non Word Error Spell Checker for
Indonesian using Morphologically Analyzer and HMM.
Sugianto, S. A., Liliana, & Rostianingsih, S. (n.d.). PEMBUATAN APLIKASI
PREDICTIVE TEXT MENGGUNAKAN METODE N-GRAM-BASED.
Viny, C. M., Rudy, & Naga, D. S. (2018). Fast and Accurate Spelling Correction
Using Trie and Damerau-levenshtein Distance Bigram, 16(2), 827–833.
https://doi.org/10.12928/TELKOMNIKA.v16i2.6890
LAMPIRAN 1 : DOKUMEN YANG DIGUNAKAN
Oleh :
Henny Alvionita
091214020011
ABSTRAK
KANDIDAT KATA
Hasil Damerau
No. Query Nilai Cosine Similarity
Levenshtein Distance
1 prbandingan perbandingan 0.0
2 merupkan merupakan 0.0
3 ketdakpastian ketidakpastian 0.0
4 denga dengak 0.09757037526482304
dengan 0.09757037526482304
dengap 0.09757037526482304
dengar 0.09757037526482304
dengu 0.0
5 probabiltas probabilitas 0.0
6 megatasi mengatasi 0.5773502691896257
mewatasi 0.0
7 menunjukka menunjukkan 0.0
8 ukuan ukupan 0.0
ukuran 0.0
9 kepatian kepatihan 0.3783175956289082
kematian 0.33842970087296875
kepastian 0.17985858842732821
kepagian 0.13625126304259752
10 kemtian kematian 0.0
11 bla bala 0.2716382993594892
bela 0.24184717248235063
bila 0.17163050532376314
bola 0.17163050532376314
bea 0.1678275081288995
bal 0.14843328344699896
la 0.04635113859468016
ala 0.04112516424987196
ela 0.038061696534219015
vla 0.032868642133954136
12 diabikan diabaikan 0.0
13 penderia penderita 0.5773502691896257
penderma 0.0
14 menadari menyadari 0.6841916012796778
menakari 0.06376370547670093
menawari 0.06376370547670093
15 karna karena 0.3977829307972894
karina 0.3977829307972894
kara 0.0
karma 0.0
karsa 0.0
karya 0.0
16 kurangna kurangnya 0.0
17 infrmasi informasi 0.0
18 dperlukan diperlukan 0.0
19 sbuah sebuah 0.3462415530579614
buah 0.24482975009584626
suah 0.24482975009584626
20 sstem sistem 0.5773502691896257
setem 0.0
21 penyaki penyakit 0.41385938791502397
pendaki 0.31905053100991515
penyaji 0.31905053100991515
22 membandingkn membandingkan 0.0
23 memilik memiliki 0.5773502691896257
memilih 0.0
memilin 0.0
memilis 0.0
24 kurasi akurasi 0.5773502691896257
durasi 0.0
25 wktu waktu 0.0
26 eksekus eksekusi 0.0
27 ksus kasus 0.3634060315627898
kus 0.21391503282468172
sus 0.21391503282468172
usus 0.21391503282468172
kaus 0.18801657222762191
28 ui uih 0.3612700069767646
uik 0.3318637036524186
uis 0.3318637036524186
uit 0.3318637036524186
bui 0.30321730613952913
kui 0.30321730613952913
tui 0.2780327433276135
u 0.09306768609736733
uai 0.09103386588107916
umi 0.09103386588107916
ubi 0.0810776398278456
udi 0.0810776398278456
uji 0.0810776398278456
uni 0.0810776398278456
uli 0.07380535777040967
uri 0.07380535777040967
ua 0.07316314298834098
uh 0.07316314298834098
um 0.07316314298834098
bi 0.00918140897130892
ai 0.008145947628348197
di 0.008145947628348197
ji 0.008145947628348197
ki 0.008145947628348197
mi 0.008145947628348197
ni 0.008145947628348197
ci 0.007396740097490265
fi 0.007396740097490265
gi 0.007396740097490265
hi 0.007396740097490265
oi 0.007396740097490265
pi 0.007396740097490265
qi 0.007396740097490265
si 0.007396740097490265
xi 0.007396740097490265
29 sebnyak sebanyak 0.5773502691896257
senyak 0.0
30 kunc kunci 0.5773502691896257
kuna 0.0
kung 0.0
kuno 0.0
2. Jenis Kesalahan Insertion
Hasil Damerau
No. Query Nilai Cosine Similarity
Levenshtein Distance
1 perbandingann perbandingan 0.0
2 merupakamn merupakan 0.0
3 ketidakpastiuan ketidakpastian 0.0
4 dwengan dengan 0.0
5 probabilitasi probabilitas 0.0
6 mengatyasi mengatasi 0.0
7 menunjukkasn menunjukkan 0.0
8 utkuran ukuran 0.0
9 kkepastian kepastian 0.0
10 kkematian kematian 0.0
11 bilsa bisa 0.44453796044501165
biasa 0.3990003709521049
bila 0.2701288585084293
bilga 0.12363542817374823
bilas 0.11430529976334132
12 diabaiukan diabaikan 0.0
13 penfderita penderita 0.0
14 menyadarii menyadari 0.0
15 kareena karena 0.0
16 jkurangnya kurangnya 0.0
17 informmasi informasi 0.0
18 diperluukan diperlukan 0.0
19 sebuuah sebuah 0.0
20 sistemn sistem 0.0
21 peenyakit penyakit 0.0
22 membanndingkan membandingkan 0.0
23 memmiliki memiliki 0.0
24 akurasiu akurasi 0.0
25 qwaktu waktu 0.0
26 eyksekusi eksekusi 0.0
27 kassus kasus 0.0
28 ujki uji 0.0
29 sebaanyak sebanyak 0.0
30 kuunci kunci 0.0
Hasil Damerau
No. Query Nilai Cosine Similarity
Levenshtein Distance
1 pervandingan perbandingan 0.0
pertandingan 0.0
2 meripakan merupakan 0.5773502691896257
meriapkan 0.28867513459481287
3 jetidakpastian ketidakpastian 0.0
4 denhan dengan 0.0
5 ptobabilitas probabilitas 0.0
6 mengatssi mengatasi 0.0
7 menunjujkan menunjukkan 0.0
8 ukuram ukuran 0.0
9 krpastian kepastian 0.0
10 kemqtian kematian 0.0
11 bils bilas 0.41888714591084203
bilis 0.32276231938512445
bila 0.3028990468582818
0.04164660397303586
bis 4
0.02198441068816162
bias 4
bius 0.01825608822236443
12 diavaikan diabaikan 0.0
13 pendetita penderita 0.0
14 menyadaru menyadar 0.0
menyadari 0.0
15 karema karma 0.5
karena 0.4082482904638631
16 kurangnua kurangnya 0.0
17 informaai informasi 0.0
18 dipetlukan diperlukan 0.0
19 sebuaj sebuah 0.0
20 sistrm sistem 0.0
sistim 0.0
21 penyakir penyair 0.5156946057204548
penyakit 0.4256102564423443
penyakar 0.11988321306398908
22 membandinhkan membandingkan 0.0
23 memikiki memikiri 0.0
memiliki 0.0
24 akutasi akurasi 0.0
25 wajtu waktu 0.0
26 eksekuai eksekusi 0.0
27 khsus khusus 0.0
kasus 0.0
28 uhi uh 0.4884851834638702
juhi 0.47466219635480866
uhu 0.3045724495329338
hi 0.2808429088978827
khi 0.20914196623351397
phi 0.20914196623351397
uai 0.01791423740938939
ubi 0.01791423740938939
udi 0.01791423740938939
uji 0.01791423740938939
uli 0.01791423740938939
umi 0.01791423740938939
uni 0.01791423740938939
uri 0.01791423740938939
0.01047157485166117
uih 3
29 sebanyal sebanyak 0.0
30 kunxi kunci 0.0
kundi 0.0
4. Jenis Kesalahan Transposition
Hasil Damerau
No. Query Nilai Cosine Similarity
Levenshtein Distance
1 pebrandingan perbandingan 0.0
2 merupkaan merupakan 0.0
3 ketidakpatsian ketidakpastian 0.0
4 degnan degan 0.5352365216
dengan 0.1
5 probabiliats probabilitas 0.0
6 megnatasi mengatasi 0.0
7 menunjkukan menunjukkan 0.0
8 ukurna ukuran 0.0
9 kepatsian kepastian 0.0
10 kmeatian kematian 0.0
11 ibla iba 0.6666666666666666
bila 0.28867513459481287
12 daibaikan diabaikan 0.0
13 penderiat penderita 0.0
14 meynadari menyadari 0.0
15 karean sarean 0.613391597365458
karena 0.1543101557015736
kardan 0.09800094274469355
karuan 0.09800094274469355
16 kurangyna kurangnya 0.0
17 infomrasi informasi 0.0
18 idperlukan diperlukan 0.0
19 sbeuah sebuah 0.0
20 sistme sistem 0.0
21 penyakti penyakit 0.0
22 membandignkan membandingkan 0.0
23 memiliik memiliki 0.0
24 kaurasi akurasi 0.0
25 wkatu waktu 0.0
26 ekskeusi eksekusi 0.0
27 kassu kasus 0.5416384978119665
kasau 0.08743110367262205
kasdu 0.08743110367262205
28 uij uih 0.09757037526482304
uik 0.09757037526482304
uis 0.09757037526482304
uit 0.09757037526482304
uji 0.0
29 sebaynak sebanyak 0.0
30 uknci kunci 0.0
LAMPIRAN 3 : KODE PROGRAM
1. Antarmuka_main.java
package Boundary;
import Controller.Manager;
import Entity.Kandidat_Kata;
import Entity.Query;
import java.io.File;
import java.text.DecimalFormat;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;
/**
*
* @author Nur Hamidah
*/
public class Antarmuka_main extends javax.swing.JFrame {
Manager manager;
double[] ranking;
public Antarmuka_main() {
initComponents();
manager = new Manager();
Tbl_hasil.setCellSelectionEnabled(true);
Btn_cek.setEnabled(false);
Btn_MRR.setEnabled(false);
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
Pnl_DokAwal.setColumns(20);
Pnl_DokAwal.setLineWrap(true);
Pnl_DokAwal.setRows(5);
Pnl_DokAwal.setEnabled(false);
Pnl_DokAwal.addAncestorListener(new javax.swing.event.AncestorListener() {
public void ancestorMoved(javax.swing.event.AncestorEvent evt) {
}
public void ancestorAdded(javax.swing.event.AncestorEvent evt) {
Pnl_DokAwalAncestorAdded(evt);
}
public void ancestorRemoved(javax.swing.event.AncestorEvent evt) {
}
});
jScrollPane1.setViewportView(Pnl_DokAwal);
Pnl_DokHasil.setColumns(20);
Pnl_DokHasil.setRows(5);
Pnl_DokHasil.setEnabled(false);
jScrollPane2.setViewportView(Pnl_DokHasil);
Btn_cek.setFont(new java.awt.Font("Times New Roman", 0, 11)); // NOI18N
Btn_cek.setText("Proses");
Btn_cek.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
Btn_cekActionPerformed(evt);
}
});
},
new String [] {
"No", "Query", "K1", "K2", "K3", "K4", "K5"
}
){
Class[] types = new Class [] {
java.lang.Integer.class, java.lang.Object.class, java.lang.String.class,
java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
};
boolean[] canEdit = new boolean [] {
false, false, false, false, false, false, false
};
Panel_utamaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(Panel_utamaLayout.createSequentialGroup()
.addGap(70, 70, 70)
.addComponent(jLabel1)
.addGap(142, 142, 142)
.addComponent(jLabel2)
.addGap(201, 201, 201)
.addComponent(jLabel3)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE))
.addGroup(Panel_utamaLayout.createSequentialGroup()
.addContainerGap()
.addGroup(Panel_utamaLayout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.TRAILING)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING,
Panel_utamaLayout.createSequentialGroup()
.addComponent(Field_OpenDokumen,
javax.swing.GroupLayout.PREFERRED_SIZE, 563,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(Btn_OpenDokumen)
.addGap(0, 0, Short.MAX_VALUE))
.addGroup(Panel_utamaLayout.createSequentialGroup()
.addGroup(Panel_utamaLayout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addComponent(jScrollPane1,
javax.swing.GroupLayout.PREFERRED_SIZE, 232,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(Btn_cek,
javax.swing.GroupLayout.Alignment.TRAILING))
.addGap(10, 10, 10)
.addComponent(jScrollPane2,
javax.swing.GroupLayout.PREFERRED_SIZE, 225,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(Panel_utamaLayout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addGroup(Panel_utamaLayout.createSequentialGroup()
.addComponent(Btn_MRR)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel4)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(Field_MRR,
javax.swing.GroupLayout.PREFERRED_SIZE, 70,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE))
.addGroup(Panel_utamaLayout.createSequentialGroup()
.addComponent(jScrollPane5,
javax.swing.GroupLayout.PREFERRED_SIZE, 336,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addGroup(Panel_utamaLayout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING, false)
.addComponent(jLabel5,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jTextField1))
.addContainerGap(66, Short.MAX_VALUE))))))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
Panel_utamaLayout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(lbl_judul)
.addGap(255, 255, 255))
);
Panel_utamaLayout.setVerticalGroup(
Panel_utamaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
Panel_utamaLayout.createSequentialGroup()
.addContainerGap()
.addComponent(lbl_judul, javax.swing.GroupLayout.PREFERRED_SIZE, 22,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addGroup(Panel_utamaLayout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addComponent(Btn_OpenDokumen)
.addComponent(Field_OpenDokumen,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(Panel_utamaLayout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addGroup(Panel_utamaLayout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.BASELINE)
.addComponent(jLabel1)
.addComponent(jLabel2))
.addComponent(jLabel3))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(Panel_utamaLayout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addComponent(jScrollPane5,
javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
.addComponent(jScrollPane2)
.addGroup(Panel_utamaLayout.createSequentialGroup()
.addGroup(Panel_utamaLayout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addComponent(jScrollPane1,
javax.swing.GroupLayout.PREFERRED_SIZE, 201,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(Panel_utamaLayout.createSequentialGroup()
.addComponent(jLabel5)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jTextField1,
javax.swing.GroupLayout.PREFERRED_SIZE, 29,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(0, 0, Short.MAX_VALUE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(Panel_utamaLayout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.BASELINE)
.addComponent(jLabel4)
.addComponent(Field_MRR,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(Btn_cek)
.addComponent(Btn_MRR))
.addContainerGap())
);
pack();
}// </editor-fold>
boolean eks_benar;
eks_benar = false;
if(result == JFileChooser.APPROVE_OPTION){
File selectedFile = chooser.getSelectedFile();
path = selectedFile.getAbsolutePath();
if(ekstensi[1].toLowerCase().equals("txt")){
eks_benar = true;
teks = manager.muat_data(path);
Pnl_DokAwal.setText(teks);
Field_OpenDokumen.setText(path);
Btn_OpenDokumen.setEnabled(false);
Btn_cek.setEnabled(true);
}
else{
eks_benar = false;
JOptionPane.showMessageDialog(this, "format yang Anda masukkan
salah");
return;
}
}
Pnl_DokHasil.setText(null);
DefaultTableModel hasil = (DefaultTableModel)Tbl_hasil.getModel();
for(int i = hasil.getRowCount()-1 ; i>=0; i--){
hasil.removeRow(i);
}
Field_MRR.setText(null);
manager.do_Pra_Pengolahan();
manager.do_Pengecekan_Kata_Salah();
query_list = manager.getQueryList();
try{
rows[0] = String.valueOf(i+1);
rows[1] = query_list.get(i).getIstilah_kata();
model.addRow(rows);
Btn_cek.setEnabled(false);
}
}catch(Exception e){
}
}
mrr = 0;
for (int i = 0; i < ranking.length; i++) {
if(ranking[i] != -1){
mrr = mrr+(1/ranking[i]);
}
}
mrr = (mrr/ranking.length)*100 ;
Field_MRR.setText(String.valueOf(df.format(mrr)+"%"));
Btn_OpenDokumen.setEnabled(true);
}
baris = Tbl_hasil.getSelectedRow();
kolom = Tbl_hasil.getSelectedColumn();
nBaris = Tbl_hasil.getRowCount();
System.out.println();
Btn_MRR.setEnabled(true);
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional)
">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look
and feel.
* For details see
http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info :
javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(Antarmuka_main.class.getName()).log(java.util.loggi
ng.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(Antarmuka_main.class.getName()).log(java.util.loggi
ng.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(Antarmuka_main.class.getName()).log(java.util.loggi
ng.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(Antarmuka_main.class.getName()).log(java.util.loggi
ng.Level.SEVERE, null, ex);
}
//</editor-fold>
//</editor-fold>
2. Manager.java
package Controller;
import Entity.Kandidat_Kata;
import Entity.Query;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultListModel;
/**
*
* @author Nur Hamidah
*/
public class Manager {
Pra_Pengolahan pra_pengolahan;
Dictionary_Lookup pengecekan;
Damerau_Levenshtein_Distance DLD;
Pemecahan_Bigram bigram;
Pembobotan_tf_idf tf_idf;
Cosine_Similarity kemiripan;
String teks;
String teks_CF;
ArrayList<Query> querylist;
ArrayList<String> token;
ArrayList<String> kamus;
ArrayList<ArrayList> kandidat_query;
ArrayList<ArrayList> kandidat_query_terurut;
ArrayList<double[][]> list_bobot;
ArrayList<double[]> list_cosine_terurut;
public Manager(){
File selectedFile;
selectedFile = new File(path);
ArrayList<String> list_line;
list_line = new ArrayList<>();
FileInputStream fis;
try {
fis = new FileInputStream(selectedFile);
DataInputStream din = new DataInputStream(fis);
return teks;
}
public void do_Pra_Pengolahan() {
pra_pengolahan = new Pra_Pengolahan();
pra_pengolahan.init_teks(teks);
pra_pengolahan.do_CaseFolding();
pra_pengolahan.do_Tokenizing();
teks_CF = pra_pengolahan.getTeksCF();
token = pra_pengolahan.getToken_teks();
}
public void do_Pengecekan_Kata_Salah(){
pengecekan = new Dictionary_Lookup();
pengecekan.muat_kamus();
pengecekan.initTokenTeks(token);
pengecekan.cek_kata();
querylist = pengecekan.getKata_salah();
kamus = pengecekan.getKamus();
}
public void do_Penentuan_Kandidat_Kata(){
ArrayList<Kandidat_Kata> kandidat_list;
DLD = new Damerau_Levenshtein_Distance();
DLD.initKamus(kamus);
DLD.initKataSalah(querylist);
DLD.hitung_nilai_edit();
kandidat_query = DLD.getKandidatQuery();
}
public void do_pembobotan(){
tf_idf = new Pembobotan_tf_idf();
tf_idf.initBigram_Query(querylist);
tf_idf.initBigram_Kandidat(kandidat_query);
tf_idf.hitung_tfidf();
tf_idf.pembobotan();
list_bobot = tf_idf.getBobot();
}
public void do_kemiripan(){
double[] nilai_kemiripan;
ArrayList<Kandidat_Kata> kandidat;
nilai_kemiripan = list_cosine_terurut.get(i);
kandidat = kandidat_query.get(i);
package Controller;
import java.util.ArrayList;
/**
*
* @author Nur Hamidah
*/
public class Pra_Pengolahan {
String teks;
String teks_CF;
ArrayList<String> token_teks;
if(char_delimiter_flag == false){
word = word + String.valueOf(teks_CF.charAt(i));
}
else{
if(!word.equals("")){
filter_flag = false;
for(int j=0; j<stopword.length; j++){
if(stopword[j].equals(word)){
filter_flag = true;
}
}
if(filter_flag==false){
token_teks.add(word);
}
word = "";
}
}
}
}
4. Dictionary_Lookup.java
package Controller;
import Entity.Query;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
/**
*
* @author Nur Hamidah
*/
public class Dictionary_Lookup {
ArrayList<String> token;
ArrayList<Query> kata_salah = new ArrayList<>();
ArrayList<String> kamus = new ArrayList<>();
ArrayList<String> hasil_deteksi;
public Dictionary_Lookup() {
}
public void initTokenTeks(ArrayList<String> token) {
this.token = token;
}
} dict.close();
} catch (FileNotFoundException e) {
System.out.println("Kamus Tidak Ditemukan");
}
}
5. Damerau_Levenshtein_Distance.java
package Controller;
import Entity.Kandidat_Kata;
import Entity.Query;
import java.util.ArrayList;
/**
*
* @author Nur Hamidah
*/
public class Damerau_Levenshtein_Distance {
ArrayList<ArrayList> kandidat_query;
ArrayList<Query> kata_salah = new ArrayList<>();
ArrayList<String> kamus = new ArrayList<>();
public Damerau_Levenshtein_Distance() {
}
d = new int[m+1][n+1];
if (s_i == t_j) {
cost = 0;
} else {
cost = 1;
}
d[i][j] = MinimumA(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + cost);
if (i > 1 && j > 1 && s_i == (t.charAt(j - 2)) && (s.charAt(i - 2)) == t_j) {
d[i][j] = MinimumB(d[i][j], d[i - 2][j - 2] + cost);
}
}
}
nilai_edit[k][l] = d[m][n];
}
6. Pemecahan_Bigram.java
package Controller;
import Entity.Kandidat_Kata;
import Entity.Query;
import java.util.ArrayList;
/**
*
* @author Nur Hamidah
*/
public class Pemecahan_Bigram {
public Pemecahan_Bigram() {
}
kandidat.get(i).setBigram_kata(bigram);
}
kandidat_query.set(h, kandidat);
}
}
7. Pembobotan_tf_idf.java
package Controller;
import Entity.Kandidat_Kata;
import Entity.Query;
import java.util.ArrayList;
/**
*
* @author Nur Hamidah
*/
public Pembobotan_tf_idf() {
}
bigram = query_list.get(b).getBigram_kata();
kandidat_list = kandidat_query.get(b);
if(flag_ada == false){
bigram_list.add(bigram[d]);
}
}
}
tf = new double[bigram_list.size()][kandidat_list.size()+1];
for(int y=0; y<bigram_list.size(); y++){
bigram = query_list.get(b).getBigram_kata();
flag_ada = false;
if(flag_ada == true){
tf[y][z+1] = 1;
}
else{
tf[y][z+1] = 0;
}
}
}
list_tf.add(tf);
//MENGHITUNG NILAI DF
df = new double[tf.length];
list_df.add(df);
list_idf.add(idf);
}
}
w = new double[tf.length][tf[0].length];
idf = list_idf.get(a);
8. Cosine_Similarity.java
package Controller;
import Entity.Kandidat_Kata;
import java.util.ArrayList;
/**
*
* @author Nur Hamidah
*/
public class Cosine_Similarity {
ArrayList<ArrayList> kandidat_query_terurut;
ArrayList<double[][]> list_bobot;
ArrayList<double[]> cosine;
ArrayList<double[]> cosine_terurut;
public Cosine_Similarity() {
}
if(Double.isNaN(vektor_cosine[b-1])){
vektor_cosine[b-1] = 0;
}
}
cosine.add(vektor_cosine);
}
}
kandidat_temp = kandidat_list.get(j);
kandidat_list.set(j, kandidat_list.get(j+1));
kandidat_list.set(j+1, kandidat_temp);
}
}
}
cosine_terurut.add(sim_cosine);
kandidat_query_terurut.add(kandidat_list);
}
}
9. Query.java
package Entity;
import java.util.ArrayList;
/**
*
* @author Nur Hamidah
*/
public class Query{
ArrayList<String> Kandidat_terurut;
String[] bigram_kata;
String istilah_kata;
public Query() {
}
10. Kandidat_Kata.java
package Entity;
/**
*
* @author Nur Hamidah
*/
public class Kandidat_Kata {
String[] bigram_kata;
String istilah_kata;
public Kandidat_Kata(){
}