Anda di halaman 1dari 168

Spelling Checker Menggunakan Algoritma Damerau Levenshtein

Distance dan Cosine Similarity

Diajukan Sebagai Syarat Untuk Menyelesaikan


Pendidikan Program Strata-1 Pada
Jurusan Teknik Informatika

Oleh:

Nur Hamidah
09021181520128

JURUSAN TEKNIK INFORMATIKA


FAKULTAS ILMU KOMPUTER UNIVERSITAS SRIWIJAYA
2019
MOTTO DAN PERSEMBAHAN

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 ~

“Sesungguhnya bersama kesulitan ada kemudahan. Maka apabila


engkau telah selesai (dari sesuatu urusan), tetaplah bekerja keras
(untuk urusan yang lain). Dan hanya kepada Tuhanmulah engkau
berharap”

~ QS : Al-Insyirah, ayat 6-8 ~

Tak ada sidang yang lebih berat dan menakutkan melainkan sidang
dihadapan Allah Subhanahuwa ta’ala

~ Nur Hamidah ~

Kupersembahkan karya tulis ini kepada :

 Allah Subhanahuwa ta’ala


 Kedua orang tua tercinta
 Kedua adik tercinta
 Keluarga besarku
 Sahabat dan teman seperjuangan
 Almamaterku
SPELLING CHECKER USING DAMERAU LEVENSHTEIN DISTANCE
AND COSINE SIMILARITY ALGORITHM

ABSTRACT

Writing is an embodiment of the author's ideas that are to be conveyed to


others. A writer often experiences typos in typing the script, so that it can influence
the meaning of the text. Therefore, a system is needed to detect word errors. In this
study, checking is done by using the Dictionary Lookup method and giving the
candidate words using the Damerau Levenshtein Distance algorithm. Candidates
will then determine the ranking by breaking the word into Bigram form and
calculating the similarity value using the Cosine Similarity algorithm. The test
results based on the data used yield different Mean Reciprocal Rank (MRR) values
for each type of error. The type of error deletion produces an MRR value of 88.89%,
the type of insertion error produces an MRR value of 97.78%, the type of
substitution error produces an MRR value of 88.89%, the type of transposition error
produces an MRR value of 89%.

Keywords : Dictionary Lookup, Damerau Levenshtein Distance, Spelling Checker,


Cosine Similarity, Mean Reciprocal Rank
SPELLING CHECKER MENGGUNAKAN ALGORITMA DAMERAU
LEVENSHTEIN DISTANCE DAN COSINE SIMILARITY

ABSTRAK

Tulisan adalah sebuah perwujudan gagasan penulis yang hendak disampaikan


kepada orang lain. Seorang penulis seringkali mengalami kesalahan pengetikan
dalam pengetikan naskahnya, sehingga dapat mempengaruhi arti dari tulisan
tersebut. Oleh karena itu, diperlukan suatu sistem untuk mendeteksi kesalahan kata.
Pada penelitian ini, pengecekan dilakukan dengan menggunakan metode
Dictionary Lookup dan memberikan kandidat kata menggunakan algoritma
Damerau Levenshtein Distance. Kandidat kata kemudian akan dilakukan penentuan
ranking dengan memecah kata menjadi bentuk Bigram dan menghitung nilai
kemiripan dengan menggunakan algoritma Cosine Similarity. Hasil pengujian
berdasarkan data yang digunakan menghasilkan nilai Mean Reciprocal Rank
(MRR) yang berbeda pada masing-masing jenis kesalahan. Jenis kesalahan deletion
menghasilkan nilai MRR sebesar 88.89%, jenis kesalahan insertion menghasilkan
nilai MRR sebesar 97.78%, jenis kesalahan substitution menghasilkan nilai MRR
sebesar 88.89%, jenis kesalahan transposition menghasilkan nilai MRR sebesar
89%.

Kata Kunci : Dictionary Lookup, Damerau Levenshtein Distance, Spelling


Checker, Cosine Similarity, Mean Reciprocal Rank
KATA PENGANTAR

Puji dan syukur atas kehadirat Allah ta’ala atas segala nikmat, rahmat, dan

karuaniaNya sehingga penulis dapat menyelesaikan tugas akhir ini. Tugas akhir

yang berjudul “Spelling Checker Menggunakan Algoritma Damerau

Levenshtein Distance dan Cosine Similarity” disusun untuk memenuhi salah satu

persyaratan kelulusan tingkat sarjana (S1) pada Jurusan Teknik Informatika

Fakultas Ilmu Komputer Universitas Sriwijaya.

Pada kesempatan ini, penulis ingin mengucapkan terima kasih kepada pihak-

pihak yang telah memberikan dukungan, bimbingan, kerjasama, dan motivasi

kepada penulis dalam penyelesaian tugas akhir ini, diantaranya :

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

2. Bapak Jaidan Jauhari, M.T. selaku Dekan Fakultas Ilmu Komputer

Universitas Sriwijaya

3. Bapak Rifkie Primartha, M.T. selaku Ketua Jurusan Teknik Informatika

Universitas Sriwijaya

4. Ibu Rifka Widyastuti S.Kom, M.Ti, M.Im. selaku pembimbing akademik

5. Ibu Novi Yusliani, M.T selaku pembimbing I Tugas Akhir dan ibu Desty

Rodiah, M.T. selaku pembimbing II Tugas Akhir yang telah memberikan


pengarahan, bimbingan, bantuan, serta masukan kepada penulis sehingga

Tugas Akhir ini dapat diselesaikan dengan baik

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

saran dan kritik serta arahan selama penulisan Tugas Akhir

7. Seluruh Bapak dan Ibu Dosen Jurusan Teknik Informatika Fakultas Ilmu

Komputer Universitas Sriwijaya yang telah memberikan ilmu pengetahuan

kepada penulis selama perkuliahan

8. Seluruh karyawan dan karyawati Fakultas Ilmu Komputer Universitas

Sriwijaya yang telah membantu penulis dalam urusan administrasi selama

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

disampingku sebagai tempatku bersandar serta tempat berbagi cerita dan

selalu memberi semangat, doa, dan dukungan kepada penulis

11. Teman satu bimbingan Tugas Akhir, dalam berbagi informasi dan

pengetahuan kepada penulis

12. Teman seperjuangan penulis seluruh mahasiswa/mahasiswi Teknik

Informatika Reguler Angkatan 2015

13. Kakak dan adik tingkat serta keluarga Mahasiswa Fasilkom Unsri

14. Seluruh pihak yang telah membantu dalam penyusunan dan penyempurnaan

tugas akhir ini yang tidak dapat disebutkan satu persatu


Penulis menyadari bahwa tugas akhir ini jauh dari kata sempurna. Untuk itu,

penulis mengharapkan kritik dan saran yang membangun untuk kesempurnaan

tugas akhir ini di masa mendatang. Semoga tugas akhir ini dapat bermanfaat.

Palembang, Juli 2019

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

BAB III METODOLOGI PENELITIAN


3.1 Pendahuluan………………………………………………………..III-1
3.2 Metode Pengumpulan Data…………………………………………III-1
3.3 Tahapan Penelitian
3.3.1 Menetapkan Kerangka Kerja/Framework…………………...III-2
3.3.2 Menetapkan Kriteria Pengujian……………………………...III-5
3.3.3 Menetapkan Format Data Pengujian………………………...III-5
3.3.4 Menentukan Alat yang Digunakan dalam Pelaksanaan
Penelitian ……………………………………………………III-6
3.3.5 Melakukan Pengujian Penelitian…………………………….III-7
3.3.6 Analisis Hasil Pengujian dan Membuat Kesimpulan
Penelitian…………………………………………………….III-7
3.4 Metode Pengembangan Perangkat Lunak………………………….III-8
3.4.1 Fase Insepsi………………………………………………….III-8
3.4.2 Fase Elaborasi………………………………………………..III-9
3.4.3 Fase Konstruksi……………………………………………...III-9
3.4.4 Fase Transisi………………………………………………..III-10
3.5 Manajemen Proyek Penelitian…………………………………….III-10

BAB IV PENGEMBANGAN PERANGKAT LUNAK


4.1 Pendahuluan…………………………………………………….…IV-1
4.2 Fase Insepsi…………………………………………………….….IV-1
4.2.1 Pemodelan Bisnis……………………………………….…..IV-1
4.2.2 Kebutuhan Sistem………………………………………..….IV-3
4.2.3 Analisis dan Desain………………………………………....IV-3
4.2.3.1 Analisis Kebutuhan Perangkat Lunak……………....IV-4
4.2.3.2 Analisis Data………………………………………..IV-5
4.2.3.3 Analisis Preprocessing………………………...........IV-6
4.2.3.4 Analisis Identifikasi Kesalahan……………………..IV-7
4.2.3.5 Analisis Damerau Levenshtein Distance…………....IV-8
4.2.3.6 Analisis Bigram……………………………………IV-10
4.2.3.7 Analisis TF/IDF……………………………………IV-11
4.2.3.8 Analisis Cosine Similarity…………………………IV-12
4.2.3.9 Analisis Mean Reciprocal Rank (MRR)……………IV-15
4.2.3.10 Desain Perangkat Lunak………………………….IV-16
4.3 Fase Elaborasi…………………………………………………….IV-22
4.3.1 Pemodelan Bisnis…………………………………………..IV-22
4.3.2 Perancangan Data…………………………………………..IV-23
4.3.3 Perancangan Antarmuka…………………………………...IV-23
4.3.4 Kebutuhan Sistem………………………………………….IV-24
4.3.5 Diagram Aktivitas (Activity Diagram)……………………..IV-24
4.3.6 Diagram Alur (Sequence Diagram)………………………..IV-27
4.4 Fase Konstruksi…………………………………………………..IV-30
4.4.1 Kebutuhan Sistem…………………………………………IV-30
4.4.2 Diagram Kelas (Class Diagram)…………………………..IV-30
4.4.3 Implementasi………………………………………………IV-32
4.4.3.1 Implementasi Kelas……………………………….IV-32
4.4.3.2 Implementasi Antarmuka………………………....IV-35
4.5 Fase Transisi……………………………………………………..IV-36
4.5.1 Pemodelan Bisnis……………………………………….....IV-36
4.5.2 Kebutuhan Sistem…………………………………………IV-36
4.5.3 Rencana Pengujian………………………………………...IV-37
4.5.3.1 Rencana Pengujian Use Case Melakukan
Muat Data…………………………………………IV-37
4.5.3.2 Rencana Pengujian Use Case Melakukan
Pengecekan………………………………………..IV-37
4.5.3.3 Rencana Pengujian Use Case Memilih
Kandidat Kata……………………………..………IV-38
4.5.3.4 Rencana Pengujian Use Case Melakukan
Hitung MRR…………….…………………..…….IV-38
4.5.4 Implementasi……………………………………….…..….IV-39
4.5.4.1 Pengujian Use Case Melakukan Muat Data ……...IV-40
4.5.4.2 Pengujian Use Case Melakukan Pengecekan……..IV-41
4.5.4.3 Pengujian Use Case Memilih Kandidat Kata …….IV-42
4.5.4.4 Pengujian Use Case Melakukan Hitung MRR……IV-43
4.6 Kesimpulan……………………………………………………....IV-44

BAB V HASIL DAN ANALISIS PENELITIAN


5.1 Pendahuluan……………………………………………………….V-1
5.2 Data Hasil Penelitian………………………………………………V-1
5.2.1 Konfigurasi Percobaan………………………………………V-1
5.2.2 Data Hasil Konfigurasi………………………………………V-2
5.3 Analisis Hasil Penelitian………………………………………….V-14
5.4 Kesimpulan……………………………………………………….V-16

BAB VI KESIMPULAN DAN SARAN


6.1 Kesimpulan………………………………………………………VI-1
6.2 Saran …………………………………………………………….VI-2

DAFTAR PUSTAKA
DAFTAR TABEL

Halaman

Tabel II-1. Contoh dari Bentuk Typographical Error.………………………….II-3

Tabel II-2. Contoh Proses Pembentukan Bigram……………………………….II-8

Tabel III-1. Rancangan Tabel Hasil Pengujian………………………………...III-5

Tabel III-2. Rancanan Tabel Keseluruhan Hasil Pengujian Sistem……………III-6

Tabel III-3. Penjadwalan Penelitian Dalam Bentuk Work Breakdown

Structure (WBS)……….…………………………………………III-11

Tabel IV-1. Kebutuhan Fungsional………………………………………….....IV-3

Tabel IV-2. Kebutuhan Non-Fungsional………………………………………IV-3

Tabel IV-3. Hasil Pemecahan Bigram………………………………………..IV-10

Tabel IV-4. Hasil Perhitungan TF/IDF……………………………………….IV-11

Tabel IV-5. Perhitungan Pembobotan Term………………………………….IV-12

Tabel IV-6. Hasil Perhitungan Panjang Vektor……………………………….IV-13

Tabel IV-7. Hasil Perangkingan Kandidat Kata……………………………...IV-15

Tabel IV-8. Contoh Perhitungan MRR……………………………………….IV-15

Tabel IV-9. Definisi Aktor…………………………………………………...IV-18

Tabel IV-10. Definisi Use Case…………...…………………………………IV-18

Tabel IV-11. Skenario Use Case Muat Data…………………………………IV-19

Tabel IV-12. Skenario Use Case Pengecekan………………………………..IV-20

Tabel IV-13. Skenario Use Case Memilih Kandidat………………………....IV-21


Tabel IV-14. Skenario Use Case Menghitung Nilai MRR…………………...IV-21

Tabel IV-15. Rancangan Data………………………………………………..IV-23

Tabel IV-16. Implementasi Kelas dalam Bahasa Java……………………….IV-32

Tabel IV-17. Rencana Pengujian Use Case Melakukan Muat Data………….IV-33

Tabel IV-18. Rencana Pengujian Use Case Melakukan Pengecekan………...IV-34

Tabel IV-19. Rencana Pengujian Use Case Memilih Kandidat Kata………...IV-38

Tabel IV-20. Rencana Pengujian Use Case Melakukan Hitung MRR……….IV-38

Tabel IV-21. Pengujian Use Case Melakukan Muat Data…………………...IV-40

Tabel IV-22. Pengujian Use Case Melakukan Pengecekan………………….IV-41

Tabel IV-23. Pengujian Use Case Memilih Kandidat………………………..IV-42

Tabel IV-24. Pengujian Use Case Hitung MRR……………………………..IV-43

Tabel V-1. Hasil Algoritma Damerau Levenshtein Distance (DLD)…………..V-3

Tabel V-2. Hasil Pengurutan Kandidat Kata Berdasarkan Perhitungan

Cosine Similarity Jenis Kesalahan Deletion……………………….V-9

Tabel V-3. Hasil Pengurutan Kandidat Kata Berdasarkan Perhitungan

Cosine Similarity Jenis Kesalahan Insertion……………………...V-10

Tabel V-4. Hasil Pengurutan Kandidat Kata Berdasarkan Perhitungan

Cosine Similarity Jenis Kesalahan Substitution………………..…V-12

Tabel V-5. Hasil Pengurutan Kandidat Kata Berdasarkan Perhitungan

Cosine Similarity Jenis Kesalahan Transposition………………...V-13

Tabel V-6. Hasil Mean Reciprocal Rank (MRR)…………………………….V-15


DAFTAR GAMBAR

Halaman

Gambar II-1. Ilustrasi Proses Penghapusan Huruf (Deletion Error)…................II-3

Gambar II-2. Ilustrasi Proses Penambahan Huruf (Insertion Error)………...….II-4

Gambar II-3. Ilustrasi Proses Penggantian Huruf (Substitution Error)…………II-4

Gambar II-4. Ilustrasi Proses Penukaran Posisi Huruf (Transposititon Error)....II-4

Gambar II-5. Ilustrasi Proses Case Folding……………………………………..II-5

Gambar II-6. Ilustrasi Proses Tokenizing………………………………………..II-5

Gambar II-7. Pseudocode Algoritma Damerau Levenshtein Distance…………II-7

Gambar II-8. Arsitektur Rational Unified Process (RUP)……………………..II-11

Gambar III-1. Ilustrasi Kerangka Kerja Sistem………………………………...III-3

Gambar III-2. Penjadwalan Penelitian Tahap Menentukan Ruang Lingkup dan

Unit Penelitian………………………………………………...III-15

Gambar III-3. Penjadwalan Penelitian Tahap Menentukan Dasar Teori yang

Berkaitan dengan Penelitian…………………………………..III-16

Gambar III-4. Penjadwalan Penelitian Tahap Menentukan Kriteria

Pengujian……………………………………………………..III-16

Gambar III-5. Penjadwalan Penelitian Tahap Menentukan Alat yang

Digunakan untuk Pelaksanaan Penelitian Pada Fase Insepsi.....III-17

Gambar III-6. Penjadwalan Penelitian Tahap Menentukan Alat yang


Digunakan untuk Pelaksanaan Penelitian Fase Elaborasi……..III-18

Gambar III-7. Penjadwalan Penelitian Tahap Menentukan Alaat yang

Digunakan untuk Pelaksanaan Penelitian Fase Kontruksi…….III-19

Gambar III-8. Penjadwalan Penelitian Tahap Menentukan Alaat yang

Digunakan untuk Pelaksanaan Penelitian Fase Transisi………III-20

Gambar III-9. Penjadwalan Penelitian Tahap Melakukan Pengujian

Penelitian……………………………………………………..III-21

Gambar III-10. Penjadwalan Penelitian Tahap Melakukan Analisa Hasil

Pengujian dan Membuat Kesimpulan………………………..III-21

Gambar IV-1. Diagram Sistem Preprocessing………………………………...IV-6

Gambar IV-2. Contoh Dokumen……………………………………………….IV-6

Gambar IV-3. Hasil Case Folding……………………………………………..IV-6

Gambar IV-4. Hasil Tokenizing………………………………………………..IV-7

Gambar IV-5. Diagram Sistem Identifikasi Kesalahan………………………...IV-7

Gambar IV-6. Hasil Identifikasi Kesalahan……………………………………IV-7

Gambar IV-7. Diagram Sistem Damerau Levenshtein Distance………………IV-8

Gambar IV-8. Hasil Perhitungan Edit Distance………………………………..IV-8

Gambar IV-9. Hasil Algoritma Damerau Levenshtein Distance………………IV-9

Gambar IV-10. Diagram Sistem Bigram……………………………………...IV-10

Gambar IV-11. Diagram Sistem TF/IDF……………………………………..IV-11

Gambar IV-12. Diagram Use Case……………………………………………IV-17


Gambar IV-13. Rancangan Antarmuka Perangkat Lunak……………………IV-24

Gambar IV-14. Diagram Aktivitas Muat Data……………………………….IV-25

Gambar IV-15. Diagram Aktivitas Pengecekan……………………………...IV-26

Gambar IV-16. Diagram Aktivitas Memilih Kandidat………………………..IV-27

Gambar IV-17. Diagram Aktivitas Hitung MRR……………………………..IV-27

Gambar IV-18. Sequence Diagram Muat Data……………………………….IV-28

Gambar IV-19. Sequence Diagram Hitung MRR…………………………….IV-28

Gambar IV-20. Sequence Diagram Pengecekan……………………………...IV-29

Gambar IV-21. Diagram Kelas Perangkat Lunak…………………………….IV-31

Gambar IV-22. Antarmuka Perangkat Lunak…………………………………IV-36


DAFTAR LAMPIRAN

1. Dokumen yang Digunakan


2. Nilai Cosine Similarity Masing-Masing Kandidat Kata
3. Kode Program
BAB I

PENDAHULUAN

1.1 Pendahuluan

Pada bab ini berisi tentang latar belakang masalah, rumusan masalah, tujuan

dan manfaat penelitian, batasan masalah serta sistematika penulisan.

Bab ini juga berisi penjelasan mengenai tantangan dan tujuan proses

menemukan pengetahuan baru pada sistem pengecekan kata salah ejaan.

Pendahuluan ini berkaitan dengan menerapkan algoritma Damerau Levenshtein

Distance dan algoritma Cosine Similarity pada sistem pengecekan kata salah ejaan.

1.2 Latar Belakang Masalah

Sebuah tulisan adalah sebuah perwujudan gagasan penulis yang hendak

disampaikan kepada orang lain. Keterampilan menulis merupakan keterampilan

yang penting dalam kehidupan, baik dalam kehidupan pendidikan maupun

masyarakat. Aktivitas menulis merupakan salah satu manifestasi kemampuan dan

keterampilan berbahasa paling akhir yang dikuasai pengguna bahasa setelah

mendengarkan, membaca, dan berbicara (Luqman, 2009).


Seorang penulis seringkali mengalami kesalahan pengetikan dalam

penulisan naskahnya, sehingga dapat mempengaruhi arti dari tulisan tersebut.

Pengoreksian secara manual dapat memakan waktu yang lama karena dilakukan

secara berulang-ulang untuk mendapatkan hasil yang benar-benar bebas dari

kesalahan pengetikan (typographical error).

Terdapat beberapa jenis typographical error yaitu insertion, deletion,

substitution, dan transposition. Dalam mendeteksi typographical error pada teks

dibutuhkan suatu aplikasi yang disebut spelling checker. Spelling checker

melakukan proses pengecekan terhadap pengejaan kata-kata yang mengalami

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

string mathcing). Pencocokan string kira-kira (inexact string matching) terbagi

menjadi dua yaitu approximate string matching yang merupakan pencocokan string

berdasarkan kemiripan penulisannya (jumlah karakter dan susunan karakter) dan

phonetic string matching yang merupakan pencocokan string berdasarkan

kemiripan ucapan (Rochmawati dan Kusumaningrum, 2015).

Penelitian mengenai approximate string matching telah banyak diteliti

sebelumnya. Penelitian (Viny, Rudy, and Naga, 2018) melakukan perbandingan

antara algoritma Damerau Levenshtein Distance dan algoritma Levenshtein

Distance yang dikombinasikan dengan metode Bigram dan metode Trigram,


menyimpulkan bahwa kombinasi algoritma Damerau Levenshtein Distance dengan

metode Bigram memiliki akurasi sebesar 84,62%.

Algoritma Damerau Levenshtein Distance adalah algoritma pencocokan

string word to word sebagai pengembangan dari algoritma Levenshtein Distance.

Algoritma Damerau Levenshtein Distance menentukan nilai operasi minimum

yang dibutuhkan untuk mengubah satu string menjadi string lain, dimana operasi

yang digunakan yaitu insertion, deletion, substitution, dan transposition (Damerau,

Corporation, and Heights, 1964).

Penelitian (Maghfira, Cholissodin, and Widodo, 2017) menggunakan

algoritma Damerau Levenshtein Distance mengatakan bahwa algoritma Damerau

Levenshtein Distance menghasilkan kandidat kata dengan nilai jarak edit operasi

terkecil. Namun kandidat kata hasil pengecekan tidak diurutkan.

Kandidat kata hasil pengecekan kata dapat diurutkan berdasarkan nilai

probabilitas kemiripan dengan menggunakan algoritma Cosine Similarity (Abdillah

dan Muktyas, 2013). Algoritma Cosine Similarity merupakan perhitungan derajat

kesamaan dengan menentukan sudut antara dua vektor (Fahma, Cholissodin, dan

Perdana, 2018).

Berdasarkan uraian sebelumnya, maka akan dilakukan penelitian dengan

menggunakan algoritma Damerau Levenshtein Distance dan Cosine Similarity

untuk mengecek kata salah ejaan dan memberikan saran kata berdasarkan kata salah

ejaan.
1.3 Rumusan Masalah

Berdasarkan latar belakang yang telah diuraikan diatas, 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

beberapa pertanyaan penelitian yaitu :

1. Bagaimana mengembangkan sistem pengecekan kata salah ejaan

menggunakan algoritma Damerau Levenshtein Distance ?

2. Bagaimana nilai Mean Reciprocal Rank (MRR) algoritma Damerau

Levenshtein Distance dan algoritma Cosine Similarity dalam memberikan

saran kata berdasarkan kata salah ejaan ?

1.4 Tujuan Penelitian

Tujuan penelitian ini adalah :

1. Mengembangkan sistem pengecekan kata salah ejaan menggunakan

algoritma Damerau Levenshtein Distance

2. Mengetahui nilai Mean Reciprocal Rank (MRR) algoritma Damerau

Levenshtein Distance dan algoritma Cosine Similarity dalam memberikan

saran kata berdasarkan kata salah ejaan


1.5 Manfaat Penelitian

Manfaat dalam penelitian ini adalah :

1. Sistem yang dihasilkan dapat memberikan saran kata berdasarkan kata salah

ejaan

2. Hasil dari penelitian ini dapat digunakan sebagai referensi penelitian

selanjutnya dalam mengembangkan sistem pengecekan kata salah ejaan

1.6 Batasan Masalah

Batasan masalah pada penelitian ini adalah :

1. Sistem hanya dapat mengecek kata berbahasa Indonesia

2. Sistem hanya berfokus mengecek kata salah ejaan dan memberikan kandidat

kata, tidak sampai perbaikan

3. Keluaran kata yang disarankan sebanyak 5 kandidat kata dengan probabilitas

tertinggi

4. Kamus yang digunakan yaitu Kamus Besar Bahasa Indonesia (KBBI)

5. Sistem hanya dapat mengecek kesalahan tulisan berupa kata, bukan

singkatan, lambang, nama orang ataupun kata khusus lainnya


1.7 Sistematika Penulisan

Untuk memahami lebih jelas penelitian ini, pemaparan materi dikelompokkan

menjadi beberapa bab dengan sistematika penulisan sebagai berikut :

BAB I PENDAHULUAN

Pada bab ini diuraikan mengenai latar belakang, perumusan

masalah, tujuan dan manfaat penelitian, batasan masalah/ ruang

lingkup, metodologi penelitian, dan sistematika penulisan.

BAB II KAJIAN LITERATUR

Pada bab ini akan dibahas dasar-dasar teori yang digunakan

dalam penelitian, seperti text preprocessing, typography error, dan

metode pencocokan string.

BAB III METODOLOGI PENELITIAN .

Pada bab ini akan dibahas mengenai tahapan yang akan

dilaksanakan pada penelitian ini. Masing-masing rencana tahapan

penelitian dideskripsikan dengan rinci dengan mengacu pada suatu

kerangka kerja. Di akhir bab ini berisi perancangan manajemen

proyek pada pelaksanaan penelitian.


BAB IV PENGEMBANGAN PERANGKAT LUNAK

Pada bab ini membahas mengenai proses pengembangan

perangkat lunak yang digunakan sebagai alat penelitian, penulis

mengembangkan perangkat lunak dengan metode pemrograman

berorientasi obyek berdasarkan panduan Rational Unified Process.

Di dalam Rational Unified Process terdapat empat fase

pengembangan perangkat lunak yaitu fase insepsi, elaborasi,

konstruksi, dan transisi. Setiap fase memiliki pemodelan bisnis,

kebutuhan, analisis dan desain, implementasi, dan pengujian.

BAB V HASIL DAN ANALISIS PENELITIAN

Pada bab ini akan menyajikan kata salah ejaan beserta

kandidatnya dan evaluasi perhitungan nilai MRR menggunakan

perangkat lunak.

BAB VI KESIMPULAN DAN SARAN

Pada bab ini akan membahas kesimpulan dan saran dari

penelitian ini.
1.8 Kesimpulan

Berdasarkan uraian diatas, penelitian ini akan menggunakan algoritma

Damerau Levenshtein Distance dan algoritma Cosine Similarity untuk mengecek

kata salah ejaan, dengan tujuan agar menghasilkan kandidat kata berdasarkan kata

salah ejaan. Penjelasan mengenai algoritma Damerau Levenshtein Distance dan

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.

2.2 Landasan Teori

2.2.1 Spelling Checker

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

dokumen yang kemudian memberi peringatan kepada penulis tentang kesalahan

yang dilakukan dan memberi beberapa suggestion untuk memperbaiki kesalahan

tersebut.

Terdapat dua metode utama yang digunakan untuk membangun aplikasi

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

pada kalimat (Soleh dan Purwarianti, 2011).

2.2.2 Typographical 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

keyboard yang berdekatan secara bersamaan.

Menurut Soleh dan Purwarianti (2011), kesalahan ejaan (Typographical

error) terdiri dari dua bentuk yaitu :

1. Kesalahan bukan kata (non word error)

Kesalahan bukan kata adalah kesalahan yang berfokus pada kata yang

terbentuk umumnya oleh kesalahan pengetikan. Kesalahan ejaan non kata ini

menghasilkan kata-kata yang tidak bermakna.

2. Kesalahan kata yang sebenarnya (real word error)

Kesalahan kata yang sebenarnya adalah kesalahan yang menekankan pada

penanganan penempatan kata dalam kalimat. Kesalahan kata yang

sebenarnya sesuai dengan kaidah bahasa namun tidak sesuai makna dalam

kalimat.
Tabel II-1. Contoh dari Bentuk Typographical error

Bentuk Typographical Error


Bukan kata (non Aku brmain bersama adikku.
word)
Kata ‘brmain’ seharusnya ‘bermain’

Kata sebenarnya Saya bila mengerjakan soal itu.


(real word)
Kata ‘bila’ merupakan kata, namun dalam

kalimat diatas tidak sesuai dengan makna yang

ingin disampaikan dalam kalimat tersebut yang

seharusnya adalah kata ‘bisa’

Menurut Damerau (1964) menyimpulkan 80% kesalahan ejaan dapat

disebabkan karena empat hal yaitu :

1. Penghapusan Huruf (Deletion Error)

Penghapusan huruf adalah jenis kesalahan kata dikarenakan ada huruf

yang kurang dari suatu kata.

sya makan nasi goreng sedangkan adik saya mkan nasi bungkus

saya makan nasi goreng sedangkan adik saya makan nasi bungkus

Gambar II-1. Ilustrasi Proses Penghapusan Huruf (Deletion Error)


2. Penambahan Huruf (Insertion Error)

Penambahan huruf adalah jenis kesalahan kata dikarenakan ada

penyisipan huruf kedalam suatu kata.

saya maakan nasi goreng sedangkan adik saya makan nqasi bungkus

saya makan nasi goreng sedangkan adik saya makan nasi bungkus

Gambar II-2. Ilustrasi Proses Penambahan Huruf (Insertion Error)

3. Penggantian Huruf (Substitution Error)

Penggantian huruf adalah jenis kesalahan kata dikarenakan ada

penggantian huruf dari suatu kata.

sayi makan nasi goyeng sedangkan adik saya makan nasi bingkus

saya makan nasi goreng sedangkan adik saya makan nasi bungkus

Gambar II-3. Ilustrasi Proses Penggantian Huruf (Substitution Error)

4. Penukaran Posisi Huruf (Transposition Error)

Penukaran posisi huruf adalah jenis kesalahan kata dikarenakan ada

beberapa huruf yang bertukar posisi dari suatu kata.

saay makan nasi goreng sedagnkan adik saya makan nasi bunguks

saya makan nasi goreng sedangkan adik saya makan nasi bungkus

Gambar II-4. Ilustrasi Proses Penukaran Posisi Huruf (Transposition


Error)
2.2.3 Preprocessing

Preprocessing adalah suatu proses awal mengelola data yang bertujuan untuk

mempersiapkan teks menjadi data yang akan mengalami pengolahan lebih lanjut.

Tahapan-tahapan yang dilakukan diantaranya yaitu (Kornain dan Yansen, 2014) :

a. Case Folding

Case Folding adalah suatu proses penyamaan huruf dalam sebuah

dokumen, dari huruf besar ke huruf kecil. Jadi, hanya huruf ‘a’ sampai ‘z’

yang akan diterima. Karakter selain huruf dihilangkan dan dianggap

delimiter.

Saya mAkan nasi Goreng sedangkan adik saya makan Nasi bungkus

saya makan nasi goreng sedangkan adik saya makan nasi bungkus

Gambar II-5. Ilustrasi Proses Case Folding

b. Tokenizing

Tokenizing adalah proses memecah kalimat menjadi unit terkecil (kata

/ token ).

saya makan nasi goreng sedangkan adik saya makan nasi bungkus

“saya”, “makan”, “nasi”, “ goreng”, “sedangkan”, “adik”, “saya”,


“makan”, “nasi”, “bungkus”

Gambar II-6. Ilustrasi Proses Tokenizing


2.2.4 Damerau Levenshtein Distance

Algoritma Damerau Levenshtein Distance adalah algoritma pengembangan

dari algoritma Levenshtein Distance. Damerau Levenshtein Distance menentukan

jumlah minimum operasi yang dibutuhkan untuk mengubah satu string menjadi

string lain, di mana operasi yang digunakan sama dengan Levenshtein Distance

yaitu insertion, deletion, substitution namun dengan penambahan operasi

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

Distance seharusnya tertulis “sa”, diketik dengan “as”) dianggap sebagai 1

kesalahan sedangkan pada algoritma Levenshtein Distance dianggap sebagai 2

kesalahan. Pseudocode algoritma Damerau Levenshtein Distance dapat dilihat pada

gambar II-7 (Rochmawati & Kusumaningrum, 2015).

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 }

Gambar II-7. Pseudocode Algoritma Damerau Levenshtein Distance

2.2.5 N-Gram

N-Gram adalah rangkaian substring sepanjang n karakter dari sebuah string

(Sugianto, liliana, dan Rostianingsih, 2013). N-Gram adalah metode yang

diimplementasikan untuk pembangkitan kata atau karakter. Dengan metode N-

Gram, sebuah kata atau kalimat dipenggal menjadi potongan-potongan karakter

huruf dengan sejumlah n (Sugianto, liliana, dan Rostianingsih, 2013). Pemenggalan

kata dilakukan secara kontinuitas dari awal hingga akhir. Terdapat beberapa N-

Gram yaitu Unigram, Bigram, Trigram, dan Quadgram. Bigram adalah salah satu

metode yang direkomendasikan , karena menghasilkan akurasi yang baik dan


membutuhkan waktu proses yang tidak terlalu lama (Viny, Rudy, and Dali 2018).

Bigram merupakan proses memisahkan 2 karakter berdekatan dari awal hingga

akhir.

Contoh kata “BAJU”, “BARU”, “SAYA”, “KEMARIN” diuraikan ke dalam

bentuk Bigram dapat dilihat pada tabel II-2.

Tabel II-2. Contoh Proses Pembentukan Bigram

Kata Proses Pembentukan

Karakter

BAJU _B, BA, AJ, JU, U_

BARU _B, BA, AR, RU, U_

SAYA _S, SA, AY, YA, A_

KEMARIN _K, KE, EM, MA, AR, RI, IN, N_

2.2.6 Term Frequency-Inverse Document Frequency (tf-idf)

Metode tf-idf adalah suatu metode yang digunakan untuk menentukan

seberapa jauh keterhubungan kata/term terhadap dokumen dengan memberikan

bobot setiap kata (Herwijayanti, Ratnawati, & Muflikhah, 2018). Pada penelitian

ini, tf-idf digunakan untuk pembobotan atau pemberian ranking. Untuk menghitung

nilai bobot dari term digunakan persamaan II-1.

𝑊𝑖𝑗 = 𝑡𝑓𝑖𝑗 x idf

𝑁
𝑊𝑖𝑗 = 𝑡𝑓𝑖𝑗 x log 𝑛 (II-1)
Keterangan :

𝑊𝑖𝑗 = bobot term terhadap dokumen

𝑡𝑓𝑖𝑗 = jumlah kemunculan kata

idf = jumlah dokumen yang mengandung term muncul

N = jumlah semua dokumen yang dibandingkan

n = jumlah dokumen yang mengandung term

2.2.7 Cosine Similarity

Similarity yaitu fungsi yang digunakan untuk mengukur derajat kesamaan

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

query yang diinputkan (Fahma, Cholissodin, & Perdana, 2018).

Cosine similarity adalah rumus yang digunakan untuk menghitung kesamaan

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

apabila dokumen tidak berhubungan dengan query, sedangkan nilai 1 berarti

dokumen memiliki keterhubungan tinggi dengan query (Lahitani, Permanasari, &

Setiawan, 2016). Rumus Cosine Similarity dapat dilihat pada persamaan II-2.

(II-2)
Keterangan :

A = Vektor A, yang akan dibandingkan kemiripannya

B = Vektor B, yang akan dibandingkan kemiripannya

A • B = dot product antara vektor A dan vektor B

|A| = panjang vektor A

|B| = panjang vektor B

|A||B| = cross product antara |A| dan |B|

2.2.8 Mean Reciprocal Rank (MRR)

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 :

𝑟𝑗𝑖 : Ranking kata saran i pada query j

𝑄𝑗 : Jumlah saran yang benar untuk query j

q : Jumlah query

2.2.9 Rational Unified Process (RUP)

RUP (Rational Unified Process) adalah pendekatan pengembangan

perangkat lunak yang menggunakan konsep object oriented, dan merupakan sebuah

proses yang iterative yang dapat menggunakan bahasa pemodelan UML (Unified

Modelling Language). Gambar II-8 menunjukkan arsitektur keseluruhan Rational

Unified Process.

Gambar II-8. Arsitektur Rational Unified Process (RUP)

Pada gambar tersebut dapat dilihat bahwa RUP memiliki 2 dimensi yaitu :

1) Dimensi Horizontal, dimensi ini mewakili aspek-aspek dinamis dari

pengembangan perangkat lunak yang dijabarkan dalam bentuk tahapan /


fase. Dimensi ini terdiri dari fase Inception, Elaboration, Construction, dan

Transition.

2) Dimensi Vertikal, dimensi ini mewakili aspek-aspek statis dari

pengembangan perangkat lunak yang dijabarkan dalam beberapa workflows

/ alur kerja. Dimensi ini terdiri dari Business Modeling, Requirement,

Analysis and Design, Implementation, Test, Deployment, Configuration dan

Change Management, Project Management, Environment.

2.3 Penelitian Lain yang Relevan

Pada bagian ini memuat landasan teori dan beberapa penelitian yang telah

dilakukan oleh peneliti sebelumnya. Hal ini berkaitan dengan penelitian mengenai

Spelling Checker dan kesalahan penulisan. Penelitian-penelitian yang relevan yang

diambil dari berbagai sumber.

2.3.1 Arina Indana Fahma, Imam Cholissodin, Rizal Setya Perdana (2018) :

Identifikasi Kesalahan Penulisan Kata (Typographical Error) pada

Dokumen Berbahasa Indonesia Menggunakan Metode N-gram dan

Levenshtein Distance, Progam Studi Teknik Informatika, Fakultas Ilmu

Komputer, Universitas Brawijaya.

Fahma, Cholissodin, dan Perdana (2018) melakukan penelitian mengenai

spelling checker dengan menggunakan algoritma Levenshtein Distance dan N-

Gram berbasis perhitungan Cosine Similarity. Dalam penelitian tersebut, algoritma

Levenshtein Distance digunakan untuk mendeteksi banyaknya kandidat kata yang

sesuai dengan typographical error yang sudah teridentifikasi. Dikarenakan


kandidat kata hasil dari algoritma Levenshtein Distance belum terurut, metode N-

Gram digunakan untuk mengurutkan kandidat kata berdasarkan nilai Cosine

Similarity. Pengujian dilakukan dalam beberapa jenis typographical error yaitu

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

typographical error jenis substitution.

2.3.2 Viny Christanti M, Rudy, Dali S. Naga (2018) : Fast and Accurate

Spelling Correction Using Trie and Damerau Levenshtein Distance

Bigram, Faculty of Information Technology, Tarumanegara University,

Jakarta, Indonesia.

Viny, Rudy, dan Dali (2018) melakukan penelitian yang membandingkan

algoritma Damerau Levenshtein Distance dengan algoritma Levenshtein Distance

yang dikombinasikan dengan Bigram dan Trigram. Penelitian tersebut terdiri dari

beberapa aspek penelitian yaitu akurasi, kecepatan, dan waktu. Algoritma Damerau

Levenshtein Distance dan algoritma Levenshtein Distance digunakan untuk

menghitung jarak kata dengan saran kata yang ada dikamus. N-Gram digunakan

untuk memprediksi satu kandidat kata mana yang paling tepat sebagai hasil koreksi.

Dalam penelitian tersebut, sistem secara otomatis melakukan perbaikan

berdasarkan hasil dari prediksi N-Gram. Dari hasil pengujian 5000 data tersebut,

algoritma Damerau Levenshtein Distance yang dikombinasikan dengan Bigram


memiliki akurasi terbaik yaitu sebesar 84,62% serta rata-rata waktu sebesar

18,89%.

2.4 Kesimpulan

Berdasarkan uraian sebelumnya, Spelling Checker adalah suatu sistem yang

dapat mendeteksi kesalahan tulisan dan memberikan saran kata. Algoritma yang

digunakan adalah Damerau Levenshtein Distance yang dapat mengecek 4 jenis

kesalahan kata yaitu insertion, deletion, substitution, dan transposition. Setelah itu

kandidat kata akan dilakukan pengurutan menggunakan algoritma Cosine

Similarity.
BAB III

METODOLOGI PENELITIAN

3.1 Pendahuluan

Pada bab ini membahas mengenai unit penelitian, tahapan-tahapan penelitian

yang akan dikerjakan, metodologi penelitian, dan penjadwalan penelitian. Setiap

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.

3.2 Metode Pengumpulan Data

Data yang digunakan dalam penelitian ini adalah data sekunder, yaitu data

yang telah tersedia berupa abstrak tugas akhir mahasiswa Jurusan Teknik

Informatika Fakultas Ilmu Komputer Universitas Sriwijaya dengan cara

dokumentasi, yaitu mengambil dari perpustakaan Fakultas Ilmu Komputer

Universitas Sriwijaya. Jumlah data yang direncanakan sebanyak 4 dokumen 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 30 jenis

kesalahan kata transposition.


3.3 Tahapan Penelitian

Untuk mencapai tujuan dari penelitian ini maka akan dilakukan dengan

tahapan-tahapan yang akan dijelaskan dalam subbab 3.3.1 sampai 3.3.6.

3.3.1 Menetapkan Kerangka Kerja/Framework

Kerangka kerja dari sistem dapat dilihat pada gambar III-1 yang

mengilustrasikan proses kerangka kerja dari sistem yang akan dikembangkan.

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

pemecahan kalimat menjadi unit terkecil (kata).

b. Identifikasi kata

Pada tahap ini, setelah dilakukan preprocessing , kata tersebut dilakukan

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

dengan menggunakan metode Dictionary Lookup. Jika kata teridentifikasi benar

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

Pemecahan Kata dengan


Metode Bigram

Pembobotan Karakter
Menggunakan metode tf-idf

Penentuan Ranking Kandidat


Kata Menggunakan Cosine
Similarity

Daftar Saran Kata

Selesai

Gambar III-1. Ilustrasi Kerangka Kerja Sistem


c. Penentuan kandidat kata dengan Damerau Levenshtein Distance (DLD)

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

d. Pemecahan kata dengan metode Bigram

Pada tahap ini, masing-masing kandidat kata akan dilakukan pemecahan kata.

Metode yang digunakan yaitu Bigram, dimana sebuah kata dipenggal menjadi

potongan-potongan karakter huruf dengan sejumlah n = 2.

e. Pembobotan karakter menggunakan metode tf-idf

Pada tahap ini, masing-masing potongan karakter akan dilakukan

pembobotan karakter. Hal ini bertujuan untuk mengindikasikan ada atau tidaknya

suatu karakter pada suatu kata yang digunakan. Pembobotan karakter menggunakan

meteode Term Frequency-Inverse Document Frequency (tf-idf).

f. Penentuan ranking kandidat kata menggunakan Cosine Similarity

Pada tahap ini, kandidat kata hasil proses sebelumnya akan dilakukan proses

pengurutan dengan menggunakan algoritma Cosine Similarity, jika kandidat kata

tersebut lebih dari 5 maka akan diambil 5 kandidat dengan probabilitas tertinggi

berdasarkan nilai similarity.


3.3.2 Menetapkan Kriteria Pengujian

Pengujian dalam penelitian ini, akan dilakukan pengecekan dengan

menggunakan algoritma Damerau Levenshtein Distance, selanjutnya saran kata

akan dilakukan pengurutan berdasarkan kata salah ejaan dengan menggunakan

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.

3.3.3 Menetapkan Format Data Pengujian

Format data pengujian dapat dilihat pada tabel III-1. Tabel ini menunjukkan

rancangan hasil pengujian sistem yang berfungsi untuk menggambarkan urutan kata

yang disarankan setelah melakukan pengecekan kata menggunakan algoritma

Damerau Levenshtein Distance dan pengurutan meggunakan algoritma Cosine

Similarity. Kata yang ditampilkan sebanyak 5 kandidat kata berdasarkan nilai

Cosine Similarity.

Tabel III-1. Rancangan Tabel Hasil Pengujian

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

5 buah kata saran

c) Ranking yaitu peringkat / posisi kata dalam 5 kandidat kata saran yang

ditampilkan oleh sistem

d) RR (Reciprocal Rank) yaitu nilai inverse dari peringkat saran kata

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

pengujian keseluruhan sistem akan digambarkan dalam tabel III-2.

Tabel III-2. Rancangan Tabel Keseluruhan Hasil Pengujian Sistem

Jenis Typographical Error MRR


Insertion
Deletion
Substitution
Transposition

3.4.3 Menentukan Alat yang Digunakan dalam Pelaksanaan Penelitian

Untuk melakukan penelitian mengenai Spelling Checker menggunakan

algoritma Damerau Levenshtein Distance dan Cosine Similarity, oleh karena itu

penulis akan mengembangkan sebuah perangkat lunak yang dapat mengecek

kesalahan kata dan memberikan saran kata berdasarkan kata salah ejaan
menggunakan algoritma Damerau Levenshtein Distance , serta dapat menentukan

peringkat dari kandidat kata tersebut menggunakan algoritma Cosine Similarity.

3.3.5 Melakukan Pengujian Penelitian

Pada tahap pengujian penelitian, akan dilakukan pengujian nilai Mean

Reciprocal Rank (MRR) hasil dari sistem Spelling Checker. Adapun pengujian

dilakukan dengan menggunakan data, kerangka kerja, kriteria pengujian serta alat

penelitian yang telah disebutkan sebelumnya. Kemudian hasil pengujian tersebut

akan dianalisa seperti yang akan dibahas pada subbab 3.3.6.

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.

3.3.6 Analisis Hasil Pengujian dan Membuat Kesimpulan Penelitian

Untuk mengetahui apakah sistem dapat memberikan kata saran berdasarkan

kata salah ejaan menggunakan algoritma Damerau Levenshtein Distance dan

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

kata salah ejaan.


3.4 Metode Pengembangan Perangkat Lunak

Metodologi yang diterapkan dalam pengembangan perangkat lunak sebagai

alat penelitian dalam tugas akhir ini berorientasi objek yaitu menggunakan Rational

Unified Process (RUP). RUP merupakan pendekatan pengembangan perangkat

lunak yang menggunakan konsep object oriented, dan merupakan sebuah proses

yang iterative yang dapat menggunakan bahasa pemodelan UML (Unified

Modelling Language). Secara umum, langkah-langkah yang akan dilakukan pada

pengembangan perangkat lunak adalah fase insepsi, elaborasi, konstruksi, dan

transisi.

3.4.1 Fase Insepsi

Pada tahapan pemodelan bisnis, penulis menentukan user requirements dan

fungsionalitas atau fitur-fitur yang dibutuhkan pada perangkat lunak. Pada tahapan

pengumpulan kebutuhan, penulis mengumpulkan data penelitian berupa dokumen

teks berbahasa Indonesia dan kamus bahasa Indonesia. Pada tahap analisis dan

desain, penulis membuat diagram use case. Pada tahap implementasi, penulis

mendokumentasikan user requirements, fungsionalitas perangkat lunak dan

diagram use case. Pada tahap pengujian, penulis memastikan apakah user

requirements dan fungsionalitas perangkat lunak sudah valid.


3.4.2 Fase Elaborasi

Pada tahapan pemodelan bisnis, penulis menentukan arsitektur perangkat

lunak, desain basis data, dan desain antar muka sesuai dengan user requirements

dan fungsionalitas perangkat lunak yang telah didapatkan. Penulis dapat

melengkapi user requirement, apabila dirasa belum lengkap, pada tahap

pengumpulan kebutuhan. Activity diagram dan sequence diagram dibuat pada tahap

analisis dan desain. Penulis menyusun dokumentasi yang memuat arsitektur

perangkat lunak, desain basis data, desain antar muka, activity diagram, dan

sequence diagram pada tahap implementasi lalu memastikan seluruhnya sudah

valid pada tahap pengujian.

3.4.3 Fase Konstruksi

Pada tahapan pemodelan bisnis, penulis menentukan kelas-kelas yang

dibutuhkan pada perangkat lunak. Pada tahap pengumpulan kebutuhan, ditentukan

bahasa pemrograman yang digunakan untuk mengembangkan perangkat lunak,

yaitu java. Kebutuhan lain dalam proses pengembangan perangkat lunak juga

diidentifikasi, seperti perangkat keras dengan Processor Pentium(R) Dual-Core

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

tahapan implementasi, penulis mengembangkan perangkat lunak. Selanjutnya,

penulis melakukan unit testing terhadap perangkat lunak yang telah dikembangkan.
3.4.4 Fase Transisi

Pada tahapan pemodelan bisnis, penulis membuat rencana atau skenario

pengujian terhadap perangkat lunak. Penulis menentukan tools pengujian yang

diperlukan di tahap pengumpulan kebutuhan. Tools pengujian merupakan

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

melakukan pengujian terhadap perangkat lunak berdasarkan skenario atau rencana

pengujian. Skenario pengujian ditinjau ulang pada tahap pengujian.

3.5 Manajemen Proyek Penelitian

Manajemen proyek penelitian merupakan perencanaan aktivitas penelitian

dari tahap inisialisasi masalah sampai dengan pada tahap kesimpulan dari

penelitian. Adapun kegiatan-kegiatan yang berlangsung selama penelitian dapat

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)

ID Task Name Duration Start Finish Predecessor

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

P1 Menentukan masalah penelitian 7 days Fri 08/06/18 Sat 16/06/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

P4 Menentukan batasan masalah 5 days Tue 05/06/18 Mon 11/06/18 P3

P5 Menentukan unit penelitian 5 days Fri 29/06/18 Thu 05/07/18 P4

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

Menentukan Kriteria Pengujian 20 days Mon 30/07/18 Fri 24/08/18

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

Inception 20 days Mon 10/09/18 Fri 05/10/18

Business Modelling 6 days Mon 10/09/18 Mon 17/09/18

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

Construction 5 days Mon 01/10/18 Fri 05/10/18

P13 Membuat use case diagram 5 days Mon 01/10/18 Fri 05/10/18 P11

Implementation 7 days Wed 10/10/18 Thu 18/10/18

P14 Membuat dokumentasi 7 days Wed 10/10/18 Thu 18/10/18 P11

Testing 4 days Sat 03/11/18 Wed 07/11/18

P15 Memastikan user requierements dan fungsionalitas sudah 4 days Sat 03/11/18 Wed 07/11/18
P14
valid

Elaboration 15 days Mon 26/11/18 Fri 14/12/18

Business Modelling 4 days Mon 26/11/18 Thu 29/11/18

P16 Menentukan arsitektur perangkat lunak, desain basis 4 days Mon 26/11/18 Thu 29/11/18
P15
data, dan desain antar muka

Requirements 4 days Mon 03/12/18 Thu 06/12/18

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

Implementation 2 days Mon 17/12/18 Tue 18/12/18

P19 Membuat dokumentasi 2 days Mon 17/12/18 Tue 18/12/18 P17

Testing 3 days Mon 24/12/18 Wed 26/12/18

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

Construction 70 days Mon 24/12/18 Fri 29/03/19

Business Modelling 3 days Mon 24/12/18 Wed 26/12/18

P21 Menentukan kelas-kelas pada perangkat lunak 3 days Mon 24/12/18 Wed 26/12/18 P19

Requirements 4 days Thu 27/12/18 Tue 01/01/19

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

Analysis & Design 4 days Mon 31/12/18 Thu 03/01/19

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

Testing 26 days Mon 14/01/19 Mon 18/02/19

P26 Melakukan unit testing 26 days Mon 14/01/19 Mon 18/02/19 P23

Transition 14 days Mon 21/01/19 Thu 07/02/19

Business Modelling 2 days Mon 21/01/19 Tue 22/01/19

P27 Membuat rencana atau skenario pengujian 2 days Mon 21/01/19 Tue 22/01/19 P25

Requirements 2 days Fri 25/01/19 Mon 28/01/19

P28 Menentukan tools pengujian yang diperlukan dan sampel 2 days Fri 25/01/19 Mon 28/01/19
P25
pertanyaan

Analysis & Design 3 days Tue 29/01/19 Thu 31/01/19

P29 Membuat tabel skenario pengujian 3 days Tue 29/01/19 Thu 31/01/19 P26, P27

Implementation 3 days Sat 02/02/19 Tue 05/02/19

P30 Melakukan pengujian terhadap perangkat lunak 3 days Sat 02/02/19 Tue 05/02/19
P26, P27
berdasarkan skenario atau rencana pengujian

Testing 4 days Wed 06/02/19 Mon 11/02/19


P31 Meninjau atau menguji skenario pengujian 4 days Wed 06/02/19 Mon 11/02/19 P26, P27, P28

T4 Tersedia dokumen hasil tahapan penelitian 1 day Tue 12/02/19 Tue 12/02/19 P30

Melakukan Pengujian Penelitian 9 days Thu 14/02/19 Tue 26/02/19

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

untuk penjadwalan penelitian.

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-4. Penjadwalan Penelitian Tahap Menentukan Kriteria Pengujian


Gambar III-5. Penjadwalan Penelitian Tahap Menentukan Alat yang Digunakan Untuk Pelaksanaan Penelitian Pada Fase Insepsi
Gambar III-6. Penjadwalan Penelitian Tahap Menentukan Alat yang Digunakan untuk Pelaksanaan Penelitian Fase Elaborasi
Gambar III-7. Penjadwalan untuk Tahap Menentukan Alat yang Digunakan untuk Pelaksanaan Penelitian Fase Kontruksi
Gambar III-8. Penjadwalan untuk Tahap Menentukan Alat yang Digunakan untuk Pelaksanaan Penelitian Fase Transisi
Gambar III-9. Penjadwalan Penelitian Tahap Melakukan Pengujian Penelitian

Gambar III –10. Penjadwalan Penelitian Tahap Melakukan Analisa Hasil Pengujian dan Membuat Kesimpulan
BAB IV

PENGEMBANGAN PERANGKAT LUNAK

4.1 Pendahuluan

Pada bab ini membahas mengenai proses pengembangan perangkat lunak

yang digunakan sebagai alat penelitian, penulis mengembangkan perangkat lunak

dengan metode pemrograman berorientasi obyek berdasarkan panduan Rational

Unified Process. Di dalam Rational Unified Process terdapat empat fase

pengembangan perangkat lunak yaitu fase insepsi, elaborasi, konstruksi, dan

transisi. Setiap fase memiliki pemodelan bisnis, kebutuhan, analisis dan desain,

implementasi, dan pengujian.

4.2 Fase Insepsi

Fase pertama yang dilakukan dalam pengembangan perangkat lunak adalah

mengidentifikasi kebutuhan sistem yang akan dikembangkan. Aktivitas yang

dilakukan meliputi analisis awal sistem, identifikasi dan spesifikasi kebutuhan,

perumusan kebutuhan pengujian serta pemodelan diagram use case.

4.2.1 Pemodelan Bisnis

Tulisan adalah sebuah perwujudan gagasan penulis yang hendak disampaikan

kepada orang lain. Keterampilan menulis merupakan keterampilan yang penting

dalam kehidupan, baik dalam kehidupan pendidikan maupun masyarakat. Namun

seringkali seorang penulis mengalami kesalahan dalam penulisan naskahnya,

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

transposition. Pengoreksian secara manual dapat memakan waktu yang lama

karena dilakukan secara berulang-ulang untuk mendapatkan hasil yang terbebas

dari kesalahan pengetikan. Oleh karena itu sistem spelling checker dibutuhkan

untuk mengoreksi kata-kata yang salah ejaan dan memberikan kandidat kata

berdasarkan kata salah ejaan.

Teks yang digunakan sebelumnya akan dilakukan preprocessing , terdiri dari

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

menggunakan algoritma Damerau Levenshtein Distance. Masing-masing kata salah

dan kandidatnya dilakukan pemecahan kata menggunakan Bigram dimana hasilnya

berupa term dan term tersebut akan dilakukan pembobotan tf-idf serta menghitung

nilai kemiripan menggunakan Cosine Similarity. Setelah itu, kandidat kata

diurutkan dari yang terbesar berdasarkan nilai Cosine Similarity. Masukan pada

perangkat lunak yang dikembangkan berupa dokumen abstrak berformat .txt.

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

serta memberikan kandidat kata berdasarkan kata salah ejaan.


4.2.2 Kebutuhan Sistem

Secara umum, sistem mempunyai kebutuhan fungsional dan non-fungsional.

Kebutuhan fungsional adalah kebutuhan yang mutlak dimiliki oleh sistem,

sedangkan kebutuhan non-fungsional adalah kebutuhan tambahan untuk

mendukung performa sistem. Kebutuhan fungsional sistem yang akan dibangun

dapat dilihat pada tabel IV-1 dan kebutuhan non-fungsional sistem yang akan

dibangun dapat dilihat pada tabel IV-2.

Tabel IV-1. Kebutuhan Fungsional

No. Kebutuhan Fungsional

1. Sistem dapat menampilkan kata salah ejaan

Sistem dapat menampilkan kandidat kata berdasarkan kata salah


3.
ejaan

Tabel IV-2. Kebutuhan Non-fungsional

No. Kebutuhan Non-fungsional

1. User Friendly, sistem mudah digunakan oleh pengguna

4.2.3 Analisis dan Desain

Pada fase insepsi, kegiatan yang dilakukan pada tahap analisis dan desain

adalah menganalisis kebutuhan perangkat lunak, data, preprocessing, identifikasi

kata, penentuan kandidat kata dengan Damerau Levenshtein Distance, Bigram,


pembobotan tf-idf, serta pengurutan kandidat kata berdasarkan nilai Cosine

Similarity.

4.2.3.1 Analisis Kebutuhan Perangkat Lunak

Berdasarkan pemodelan bisnis yang telah dijelaskan, untuk menyelesaikan

permasalahan yang ada diperlukan perangkat lunak yang dapat mengecek kata salah

ejaan dan memberikan kandidat kata yang benar. Oleh karena itu, perangkat lunak

harus memiliki kemampuan sebagai berikut.

1. Menyamakan bentuk huruf menjadi huruf kecil

2. Memecah kalimat menjadi bentuk kata

3. Mengidentifikasi kata salah ejaan berdasarkan kamus

4. Menentukan kandidat kata menggunakan Damerau Levenshtein Distance

5. Memecah kata menggunakan Bigram

6. Memberikan bobot menggunakan tf-idf

7. Menghitung nilai Cosine Similarity

8. Mengurutkan kandidat kata berdasarkan nilai Cosine Similarity

Pengembangan perangkat lunak dimulai dengan mengumpulkan data berupa

dokumen abstrak tugas akhir mahasiswa Jurusan Teknik Informatika Universitas

Sriwijaya yang diambil dari perpustakaan Fakultas Ilmu Komputer Universitas

Sriwijaya. Selanjutnya data tersebut dimodifikasi dengan mengubah suatu kata

dengan berbagai jenis kesalahan kata yaitu kesalahan kata jenis insertion, deletion,

substitution, dan transposition. Selanjutnya dokumen tersebut akan melalui tahap


preprocessing yaitu case folding dan tokenizing. Kemudian akan diidentifikasi

berdasarkan kamus menggunakan Dictionary Lookup. Tahap selanjutnya yaitu

menentukan kandidat kata menggunakan Damerau Levenshtein Distance. Setelah

itu akan dilakukan proses pemecahan kata menjadi Bigram dan dilakukan

pembobotan berupa tf-idf. Selanjutnya kata tersebut akan dihitung nilai kemiripan

menggunakan Cosine Similarity serta diurutkan berdasarkan nilai kemiripan

tersebut.

4.2.3.2 Analisis Data

Data yang dibutuhkan pada perangkat lunak yang dibangun yaitu data

dokumen dan kamus kata bahasa Indonesia.

1. Dokumen

Data ini berupa kumpulan abstrak tugas akhir mahasiswa Teknik Informatika

Universitas Sriwijaya. Data yang digunakan berjumlah 10 dokumen berformat .txt

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

30 jenis kesalahan kata transposition.

2. Kamus Kata Bahasa Indonesia

Kamus yang digunakan yaitu Kamus Besar Bahasa Indonesia (KBBI) meliputi

kata dasar dan kata imbuhan yang disimpan dalam format .txt.. Kamus ini

digunakan sebagai acuan untuk mengidentifikasi kata salah ejaan.


4.2.3.3 Analisis Preprocessing

Data

Preprocessing

- Case Folding
- Tokenizing

Daftar Kata Hasil


preprocessing

Gambar IV-1. Diagram Sistem Preprocessing

Tahapan preprocessing pada penelitian ini terbagi menjadi 2 tahap yaitu

case folding dan tokenizing. Contoh dokumen dapat dilihat pada gambar IV-2.

Dokumen : Buk sAya hilang kemarin ketika saya ke Perpustakaan.

Gambar IV-2. Contoh Dokumen

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.

buk saya hilang kemarin ketika saya ke perpustakaan

Gambar IV-3. Hasil Case Folding


2. Tokenizing

Tokenizing pada penelitian ini yaitu memecah kalimat menjadi kata / token.

Hasil tokenizing dapat dilihat pada gambar IV-4.

“buk” , “saya” , “hilang” , “kemarin” , “ketika” , “saya” , “ke” , “perpustakaan”

Gambar IV-4. Hasil Tokenizing

4.2.3.4 Analisis Identifikasi Kesalahan

Daftar Kata Hasil


Preprocessing

Identifikasi Kata Salah

Dictionary Lookup

Daftar Kata Salah Ejaan

Gambar IV-5. Diagram Sistem Identifikasi Kesalahan

Tahapan identifikasi kesalahan digunakan untuk mengetahui apakah kata

tersebut benar atau salah dengan pendekatan Dictionary Lookup yaitu

membandingkan kata dalam dokumen dengan yang ada pada kamus. Hasil

identifikasi kesalahan dapat dilihat pada gambar IV-6.

Kata yang tidak terdapat dalam kamus yaitu : buk

Gambar IV-6. Hasil Identifikasi Kesalahan


4.2.3.5 Analisis Damerau Levenshtein Distance

Daftar Kata Hasil


Identifikasi Kesalahan

Perhitungan Edit Distance

Damerau Levenshtein
Distance

Daftar Kata

Gambar IV-7. Diagram Sistem Damerau Levenshtein Distance

Damerau Levenshtein Distance digunakan untuk menentukan kandidat kata

yang sesuai berdasarkan kata yang salah ejaan dengan cara menghitung nilai edit

distance. Semakin kecil nilai edit distance suatu kata maka kemungkinan kata

tersebut merupakan kata yang dimaksud semakin tinggi (Rochmawati &

Kusumaningrum, 2015). Hasil dari perhitungan nilai edit distance dapat dilihat

pada gambar IV-8.

Gambar IV-8. Hasil Perhitungan Edit Distance


Dari hasil perhitungan tersebut maka didapat nilai edit distance, namun

dalam penelitian ini hanya diambil nilai edit distance maksimal sebesar 2 (dua).

Hasil algoritma Damerau Levenshtein Distance dapat dilihat pada gambar IV-9

Gambar IV-9. Hasil algoritma Damerau Levenshtein Distance


4.2.3.6 Analisis Bigram

Daftar Kata Hasil


Perhitungan Edit Distance

Pemecahan Kata

Bigram

Hasil Pemecahan Kata

Gambar IV-10. Diagram Sistem Bigram

Bigram digunakan untuk memecah kandidat kata (string target) dan kata

salah (query), dimana kata tersebut akan dipenggal menjadi potongan-potongan

karakter sejumlah n = 2. Hasil dari pemecahan Bigram dapat dilihat pada tabel IV-

3.

Tabel IV-3. Hasil Pemecahan Bigram

Kata Bigram Keterangan


buk _b, bu, uk, k_ Query
buku _b, bu, uk, ku, u_ Target1 (T1)
Aku _a, ak, ku, u_ Target2 (T2)
duka _d, du, uk, ka, a_ Target3 (T3)
budi _b, bu, ud, di, i_ Target4 (T4)
buka _b, bu, uk, ka, a_ Target5 (T5)
4.2.3.7 Analisis TF/IDF

Term hasil pemecahan


Bigram

Pembobotan Term

TF / IDF

Nilai bobot karakter

Gambar IV-11. Diagram Sistem TF/IDF

TF/IDF yaitu menghitung nilai bobot masing-masing karakter, bertujuan

untuk mengindikasikan ada atau tidaknya suatu karakter pada suatu kata yang

digunakan. Hasil dari perhitungan TF dan IDF dapat dilihat pada tabel IV-4.

Tabel IV-4. Hasil Perhitungan TF/IDF

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.

Tabel IV-5. Perhitungan Pembobotan Term

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

4.2.3.8 Analisis Cosine Similarity

Cosine similarity digunakan untuk menghitung kesamaan atau similarity

dengan menentukan sudut antara vektor dokumen dengan vektor query dalam

dimensi V pada bidang Euclidean. Semakin besar nilai Cosine Similarity nya maka

kemungkinan kata yang dimaksud semakin besar. Sebelum menghitung nilai


Cosine Similarity, terlebih dahulu harus menghitung nilai panjang vektor dari

masing-masing query dan kata target. Perhitungan panjang vector dapat dilihat pada

tabel IV-6.

Tabel IV-6. Hasil Perhitungan Panjang Vektor

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

Similarity dapat dilihat dibawah ini.

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

Setelah didapat nilai Cosine Similarity, maka akan dilakukan perangkingan

kata dari yang terbesar hingga terkecil. Hasil perangkingan kandidat kata dapat

dilihat pada tabel IV-6.


Tabel IV-7. Hasil Perangkingan Kandidat Kata

Ranking Kata Nilai Cosine Similarity


1 buku 0.56
2 buka 0.56
3 budi 0.2
4 duka 0.11
5 aku 0

4.2.3.3 Analisis Mean Reciprocal Rank (MRR)

Mean Reciprocal Rank (MRR) digunakan untuk mengevaluasi hasil

pengujian. Data uji dimisalkan sebanyak 10 kata salah. Hasil perhitungan MRR

dapat dilihat pada tabel IV-8.

Tabel IV-8. Contoh Perhitungan MRR

Jenis

No. Query Typographic Result Ranking RR

al Error

saya, sayang, kaya, ayah,


1 sayaa insertion 1 1
raya

masak,masuk,masih,asik,mis
2 mask deletion 2 0,5
kin

3 tap deletion tak, tapi, lap, tip, api 2 0,5


rusak, rusuk, rasuk, usap,
4 rusal substitution 1 1
rupa

5 polis deletion polisi, pola, voli, oli, bola 1 1

jarak, juragan, rusak, urap,


6 Jurak subtitution 1 1
pura

maka, makan, makin, akan,


7 mkaan transposition 2 0,5
makanan

kaki,kaku, kakak, kuku,


8 kaky subtitution 2 0,5
kakek

kelompok, kelopak, kolam,


9 kelompk deletion 1 1
kolom,kelam

10 biso insertion bis, bisu, bisa, biasa, bisul 1 1

MRR 0.8

4.2.3.10 Desain Perangkat Lunak

Desain perangkat lunak digambarkan dengan diagram use case dan

diagram aktivitas.

1. Use Case

Pada subbab ini dijelaskan gambaran fungsionalitas perangkat lunak yang

dibangun dengan menggunakan pemodelan use case.

a. Diagram Use Case


Diagram use case menjelaskan secara umum kegiatan yang dilakukan oleh

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.

Gambar IV-12. Diagram Use Case

b. Tabel Definisi Aktor

Dalam penelitian ini yang menjadi actor adalah penulis, pembimbing, dan

penguji. Tabel definisi aktor dapat dilihat pada tabel IV-9.


Tabel IV-9. Definisi Aktor

No. Aktor Definisi

1. User Aktor yang dapat melakukan seluruh operasi dan


menggunakan fitur yang ada pada perangkat lunak.

c. Tabel Definisi Use Case

Tabel IV-10. Definisi Use Case

No. Use Case Deskripsi

Kegiatan yang dilakukan untuk membuat data yaitu


1. Muat Data
mengambil data dari dokumen yang sudah ada

Kegiatan yang dilakukan untuk mencari kesalahan


2. Pengecekan
kata dari dokumen yang diinputkan.

Memilih Kegiatan yang dilakukan untuk memilih kandidat


3.
Kandidat kata untuk masing-masing kata salah ejaan

Kegiatan yang dilakukan untuk menghitung nilai


4. Hitung MRR
MRR

d. Skenario Use Case

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

Nama Muat Data

Tujuan Proses ini digunakan untuk mempersiapkan data

Use case ini dilakukan untuk mendapatkan data yang akan


Deskripsi
dilakukan proses pengecekan

Aktor User

Kondisi Awal Sistem aktif dan aktor pada halaman utama

Kondisi Akhir Menampilkan isi file

Skenario Utama

Aksi Aktor Reaksi Sistem

1. Menekan tombol
“Open File”
2. Membuka open dialog
3. Memilih file
berformat .txt dalam
komputer
4. Menampilkan isi file
Skenario Alternatif

Aksi Aktor Reaksi Sistem

1. Menekan tombol
“Open File”

2. Membuka open dialog


3. Memilih file selain
format .txt
4. Menampilkan pesan “File yang Anda masukkan
bukan format .txt
Tabel IV-12. Skenario Use Case Pengecekan

Identifikasi

Nomor 002

Nama Pengecekan

Proses ini digunakan untuk mendapatkan kata salah ejaan


Tujuan
dan kandidat kata berdasarkan kata salah ejaan

Use case ini dilakukan untuk mendapatkan kata salah ejaan


Deskripsi dari data yang diinputkan dan menampilkan kandidat kata
berdasarkan kata salah ejaan

Aktor User

Sistem aktif, aktor pada halaman utama, dan dokumen telah


Kondisi Awal
diinputkan user

Menampilkan menampilkan kata salah ejaan dan kandidat


Kondisi Akhir
kata yang telah diurutkan

Skenario Utama

Aksi Aktor Reaksi Sistem

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

6. Melakukan pemeceahan kata ke bentuk Bigram


7. Melakukan perhitungan kemiripan menggunakan
Cosine Similarity
8. Melakukan Pengurutan dari yang terbesar

9. Menampilkan kata salah ejaan pada teks area


10. Menampilkan kata salah ejaan, jenis kesalahan,
dan kandidat kata yang telah dirutkan dalam
bentuk tabel

Tabel IV-13. Skenario Use Case Memilih Kandidat

Identifikasi

Nomor 003

Nama Memilih Kandidat

Proses ini digunakan untuk memilih kandidat kata


Tujuan
berdasarkan kata salah ejaan

Use case ini dilakukan untuk mendapatkan kata benar


Deskripsi
berdasarkan kata salah ejaan

Aktor User

Sistem aktif, aktor pada halaman utama, dan use case 002
Kondisi Awal
aktif

Kondisi Akhir Kandidat kata terpilih

Skenario Utama

Aksi Aktor Reaksi Sistem

1. Memilih kandidat
kata pada tabel
2. Menampilkan kandidat kata terpilih masing-
masing query dalam field

Tabel IV-14. Skenario Use Case Menghitung Nilai MRR

Identifikasi

Nomor 004
Nama Memilih Kandidat

Tujuan Proses ini digunakan untuk menghitung nilai MRR

Deskripsi Use case ini dilakukan untuk mendapatkan nilai MRR

Aktor User

Sistem aktif, aktor pada halaman utama, dan use case 003
Kondisi Awal
aktif

Kondisi Akhir Menampilkan nilai MRR

Skenario Utama

Aksi Aktor Reaksi Sistem

1. Menekan tombol
“Hitung MRR”
2. Menghitung nilai MRR

3. Menampilkan nilai MRR

4.3 Fase Elaborasi

Fase ini yaitu melakukan identifikasi terhadap sistem yang dikembangkan.

Aktivitas yang dilakukan yaitu perancangan data, perancangan antarmuka,

identifikasi kebutuhan, perumusan kebutuhan pengujian, pemodelan diagram

aktifitas, pemodelan sequence diagram, dan pembuatan dokumentasi.

4.3.1 Pemodelan Bisnis

Pada subbab ini akan dibahas mengenai perancangan perangkat lunak yang

akan dibangun. Perancangan dilakukan berdasarkan hasil analisis yang telah

dilakukan pada fase insepsi. Perancangan yang dibahas pada subbab ini meliputi

perancangan data dan perancangan antar muka.


4.3.2 Perancangan Data

Perangkat lunak yang akan dibangun memiliki kemampuan mengecek kata

dan menampilkan kandidat kata terurut. Adapun data yang akan melalui proses

tersebut adalah data abstrak tugas akhir yang disimpan dalam file berformat .txt.

Rancangan data yang digunakan dapat dilihat pada tabel IV-13.

Tabel IV-15. Rancangan Data

No. Nama Keterangan

1. Abstrak.txt Berisi kalimat abstrak tugas akhir

Berisi kumpulan kamus kata dasar dan kata


2. Kbbi.txt
imbuhan

4.3.3 Perancangan Antarmuka

Pada subbab ini membahas tentang perancangan antar muka perangkat lunak

yang dibangun. Rancangan antarmuka perangkat lunak dapat dilihat pada gambar

IV-13.

Gambar IV-13. Rancangan Antarmuka Perangkat Lunak


4.3.4 Kebutuhan Sistem

Pada subbab ini dibahas mengenai kebutuhan sistem dari perangkat lunak

yang dibangun berdasarkan hasil analisis dan perancangan pada tahap selanjutnya.

Untuk membangun perangkat lunak dalam penelitian ini dibutuhkan perangkat

keras (hardware), perangkat lunak (software) dan bahasa pemrograman. Bahasa

pemrograman yang digunakan untuk implementasi perangkat lunak adalah Java.

Perangkat keras yang digunakan pada tahap pengembangan dan penelitian ini

adalah laptop dengan spesifikasi sebagai berikut:

1. Laptop merk ACER;

2. Processor Pentium(R) Dual-Core CPU T4200 @ 2.00 GHz;

3. RAM 2 GB;

4. Hard Disk 500 GB.

Sedangkan perangkat lunak yang digunakan untuk implementasi yaitu:

1. Sistem operasi Windows 10 Home 32-bit ;

2. Compiler Netbeans IDE 8.2 .

4.3.5 Diagram Aktivitas (Activity Diagram)

Diagram aktivitas menggambarkan aliran kerja dari sebuah sistem.

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

Menekan tombol Membuka open


"Open File" dialog

Memilih file
berformat .txt dalam Menampilkan
komputer pesan "File yang
Anda masukkan
bukan format .txt"

Tidak

Ya Menampilkan isi File

Selesai

Gambar IV-14. Diagram Aktivitas Muat Data


Gambar IV-15. Diagram Aktivitas Pengecekan
Gambar IV-16. Diagram Aktivitas Memilih Kandidat

Gambar IV-17. Diagram Aktivitas Hitung MRR

4.3.6 Diagram Alur (Sequence Diagram)

Diagram alur atau sequence diagram adalah diagram yang menggambarkan

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.

Gambar IV-18. Sequence Diagram Muat Data

Gambar IV-19. Sequence Diagram Hitung MRR


4.4 Fase Konstruksi

Fase konstruksi berfokus pada pengembangan perangkat lunak baik

komponen utama maupun fitur-fitur pendukung dengan melakukan sederet iterasi.

Disetiap iterasi terdapat proses analisis, desain, implementasi, dan pengujian.

Dalam proses pengembangannya dapat menggunakan konstruksi paralel agar

mempercepat hasil perangkat lunak. Hasil yang diharapkan dari fase ini adalah

sebuah produk perangkat lunak yang siap digunakan oleh end-user, yaitu sebuah

produk perangkat lunak yang dapat digunakan sebagai alat penelitian.

4.4.1 Kebutuhan Sistem

Dalam pengembangan perangkat lunak ini, penulis menggunakan beberapa

library yang ada pada Java. Penulis tidak menambahkan library baru dalam

pengembangan perangkat lunak ini.

4.4.2 Diagram Kelas

Diagram kelas atau class diagram adalah diagram UML yang

menggambarkan kelas-kelas dalam sebuah sistem dan hubungannya antara satu

dengan yang lain. Setiap kelas terdapat atribut dan operasi. Terdapat 11 kelas yang

terdiri dari 1 kelas boundary (kelas Antarmuka_main), 8 kelas controller (Manager,

Cosine Similarity, Damerau_Levenshtein_Distance, Dictionary_Lookup,

Evaluasi_MRR, Pembobotan_tf_idf, Pemecahan_Bigram, Pra_Pengolahan), dan 2

kelas entity (Kandidat_Kata, Query). Diagram kelas perangkat lunak dapat dilihat

pada gambar IV-20.


Gambar IV-21. Diagram Kelas Perangkat Lunak
4.4.3 Implementasi

Tahap implementasi dalam fase konstruksi adalah mengembangkan

perangkat lunak berdasarkan diagram kelas dan rancangan antarmuka yang telah

dibuat dalam tahap sebelumnya.

4.4.3.1 Implementasi Kelas

Kelas – kelas yang telah dirancang pada diagram kelas diimplementasikan

dalam bahasa pemrograman Java. Implementasi kelas dalam bahasa Java dapat

dilihat pada tabel IV-16.

Tabel IV-16. Implementasi Kelas dalam Bahasa Java

No. Nama Kelas Nama File Keterangan


1. Antarmuka_main Antarmuka_main.jav Kelas antarmuka_main
a
merupakan kelas boundary

yang menyediakan akses

untuk menjalankan

fungsi_fungsi pada

perangkat lunak

2. Manager Manager.java Kelas antarmuka_manager

merupakan kelas controller

yang mengatur semua

fungsi-fungsi yang

dilakukan oleh kelas


controller dan menangani

proses input data

3. Cosine_Similarity Cosine_Similarity.ja Kelas cosine_similarity


va
merupakan kelas controller

yang mengatur semua

fungsi-fungsi yang

dilakukan oleh kelas

controller dan menangani

proses input data

4. Damerau_Levens Damerau_Levenshte Kelas


htein_Distance in_Distance.java
Damerau_Levenshtein_Di

stance merupakan kelas

controller untuk

menangani proses

perhitungan nilai edit

distance dan menghasilkan

kandidat kata

5. Dictionary_Look Dictionary_Lookup.j Kelas Dictionary_Lookup


up ava
merupakan kelas controller

untuk menangani proses


pengecekan kata dalam

dokumen pada kamus

6. Pembobotan_tf_i Pembobotan_tf_idf.j Kelas Pembobotan_tf_idf


df ava
merupakan kelas controller

untuk menangani proses

pembobotan term

menggunakan tf idf

7. Pemecahan_Bigra Pemecahan_Bigram. kelas Pemecahan_Bigram


m java
merupakan kelas controller

untuk menangani proses

pemecahan kata salah dan

kandidat kata menjadi

bentuk bigram (term)

8. Pra_Pengolahan Pra_Pengolahan.java kelas Pra_Pengolahan

merupakan kelas controller

untuk menangani proses

pengolahan data

diantaranya case folding

dan tokenizing
9. Evaluasi_MRR Evaluasi_MRR.java kelas evaluasi_MRR

merupakan kelas controller

untuk menghitung nilai

MRR

10 Kandidat_Kata Kandidat_Kata.java kelas kandidat_kata

merupakan kelas entity

untuk menyimpan

kumpulan kandidat kata

berdasarkan kata salah

ejaan dalam suatu

dokumen

11. Query Query.java kelas query merupakan

kelas entity untuk

menyimpan kumpulan kata

salah ejaan dalam suatu

dokumen

4.4.3.2 Implementasi Antarmuka

Implementasi antarmuka dilakukan berdasarkan perancangan antarmuka

pada fase elaborasi. Gambar. Antarmuka halaman utama perangkat lunak dapat

dilihat pada gambar IV-21.


Gambar IV-22. Antarmuka Perangkat lunak

4.5 Fase Transisi

Pada fase ini dibahas mengenai pengujian dari perangkat lunak pengecekan

kata salah ejaan berbahasa Indonesia yang telah dibangun. Pengujian dilakukan

berdasarkan perangkat lunak hasil pengembangan di fase konstruksi.

4.5.1 Pemodelan Bisnis

Pengujian perangkat lunak secara black box dan white box dengan terlebih

dahulu membuat rencana pengujian berdasarkan use case yang dibuat pada fase

4.5.2 Kebutuhan Sistem

Lingkungan pengujian yang digunakan pada fase transisi adalah perangkat

keras yang sama saat membangun perangkat lunak pengecekan kata salah ejaan

berbahasa Indonesia dengan spesifikasi sebagai berikut :

1. Laptop merk ACER;

2. Processor Pentium(R) Dual-Core CPU T4200 @ 2.00 GHz;


3. RAM 2 GB;

4. Hard Disk 500 GB.

Sedangkan perangkat lunak yang digunakan untuk implementasi yaitu:

3. Sistem operasi Windows 10 Home 32-bit ;

4. Compiler Netbeans IDE 8.2 .

4.5.3 Rencana Pengujian

Rencana pengujian pada perangkat lunak pengecekan kata salah ejaan

berbahasa Indonesia digambarkan dalam tabel-tabel. Kolom pada tabel meliputi

identifikasi, pengujian, jenis pengujian, serta tingkat pengujian.

4.5.3.1 Rencana Pengujian Use Case Melakukan Muat Data

Rencana pengujian use case melakukan muat data dapat dilihat pada tabel

IV-17.

Tabel IV-17. Rencana Pengujian Use Case Melakukan Muat Data

Jenis Tingkat
No. ID Pengujian
Pengujian Pengujian

1. UC1_01 Menekan tombol “open Black Box Pengujian Unit

file” dan memilih file yang

berekstensi .txt
4.5.3.2 Rencana Pengujian Use Case Melakukan Pengecekan

Rencana pengujian use case melakukan pengecekan dapat dilihat pada tabel

IV-18.

Tabel IV-18. Rencana Pengujian Use Case Melakukan Pengecekan

Jenis Tingkat
No. ID Pengujian
Pengujian Pengujian

1. UC2_01 Menekan tombol “proses” Black Box Pengujian Unit

4.5.3.3 Rencana Pengujian Use Case Memilih Kandidat Kata

Rencana pengujian use case memilih kandidat kata dapat dilihat pada tabel

IV-19.

Tabel IV-19. Rencana Pengujian Use Case Memilih Kandidat Kata

Jenis Tingkat
No. ID Pengujian
Pengujian Pengujian

1. UC3_01 Memilih kandidat kata Black Box Pengujian Unit

pada tabel

4.5.3.4 Rencana Pengujian Use Case Melakukan Hitung MRR

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

1. UC4_01 Menekan tombol “Hitung Black Box Pengujian Unit

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.

Tabel IV-21. Pengujian Use Case Melakukan Muat Data

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”

.txt 2. Memilih file tidak aktif aktif

berekstensi .txt
4.5.4.2 Pengujian Use Case Melakukan Pengecekan

Pengujian use case melakukan pengecekan dapat dilihat pada tabel IV-22.

Tabel IV-22. Pengujian Use Case Melakukan Pengecekan

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

“proses” kandidat katanya dan kandidat katanya dan

tombol “proses” tidak tombol “proses” tidak aktif

aktif
4.5.4.3 Pengujian Use Case Memilih Kandidat

Pengujian use case memilih kandidat kata dapat dilihat pada tabel IV-23.

Tabel IV-23. Pengujian Use Case Memilih Kandidat

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

ejaan ejaan pada tabel katanya


4.5.4.4 Pengujian Use Case Hitung MRR

Pengujian use case hitung MRR dapat dilihat pada tabel IV-24.

Tabel IV-24. Pengujian Use Case Hitung MRR

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

Proses pengembangan perangkat lunak yang digunakan sebagai alat

penelitian telah membantu peneliti dalam meneliti Spelling Checker menggunakan

algoritma Damerau Levenshtein Distance dan Cosine Similarity. Algoritma

Damerau Levenshtein Distance dapat memberikan kandidat kata yang sesuai

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

telah menjelaskan skenario pengujian perangkat lunak sehingga menghasilkan

perangkat lunak yang sesuai dengan kebutuhan.


BAB V

HASIL DAN ANALISIS PENELITIAN

5.1 Pendahuluan

Pengembangan perangkat lunak yang menjadi alat penelitian sistem Spelling

Checker menggunakan algoritma Damerau Levenshtein Distance dan Cosine

Similarity telah dilakukan pada bab IV. Bab V akan menyajikan kata salah ejaan

beserta kandidatnya dan evaluasi perhitungan nilai MRR menggunakan perangkat

lunak.

5.2 Data Hasil Penelitian

5.2.1 Konfigurasi Percobaan

Pengujian perangkat lunak dilakukan dengan menggunakan data abstrak

tugas akhir mahasiswa Teknik Informatika Fakultas Ilmu Komputer Universitas

Sriwijaya yang diambil dari perpustakaan Fakultas Ilmu Komputer Universitas

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

mendapatkan kata salah ejaan dan algoritma Damerau Levenshtein Distance

digunakan untuk mendapatkan kandidat kata salah ejaan berdasarkan kata salah

ejaan, serta metode tf-idf, bigram, dan algoritma Cosine Similarity digunakan untuk

mendapatkan nilai kemiripan antara kata salah ejaan dan kandidatnya.

Proses pengujian dilakukan sesuai dengan arsitektur perangkat lunak, yaitu

preprocessing, pengecekan kata, penentuan kandidat kata, pemecahan kata,

pembobotan term, dan pengurutan kandidat kata berdasarkan nilai kemiripan.

Setelah mendapatkan kandidat kata , selanjutnya akan dievaluasi untuk

mendapatkan nilai MRR (Mean Reciprocal Rank).

5.2.2 Data Hasil Konfigurasi

Berdasarkan hasil perhitungan Cosine Similarity didapatkan hasil kandidat

kata berdasarkan kata salah ejaan. Pengujian dilakukan hanya kesalahan 1 karakter

pada masing-masing kata untuk semua jenis kesalahan insertion, deletion,

substitution, dan transposition. Nilai Cosine Similarity masing-masing kandidat

dapat dilihat di lampiran. Hasil algoritma Damerau Levenshtein Distance dapat

dilihat pada tabel V-1 dan hasil pengurutan kandidat kata berdasarkan perhitungan

Cosine Similarity dapat dilihat pada tabel V-2, V-3,V-4, V-5.


Tabel V-1. Hasil Algoritma Damerau Levenshtein Distance (DLD)

Jenis
Kata
Kesalahan Query Hasil DLD
Seharusnya
Kata
prbandingan perbandingan perbandingan
merupkan merupakan merupakan
ketdakpastian ketidakpastian ketidakpastian

denga dengan dengak, dengan, dengap, dengar, dengu

probabiltas probabilitas probabilitas


megatasi mengatasi mengatasi, mewatasi
menunjukka menunjukkan menunjukkan
ukuan ukuran ukupan, ukuran
Deletion
kepatian kepastian kematian, kepagian, kepastian, kepatihan

kemtian kematian kematian

bla bila ala, bal, bala, bea, bela,bila, bola, ela, la, vla

diabikan diabaikan diabaikan


penderia penderita penderita, penderma
menadari menyadari menakari, menawari, menyadari

karna karena kara, karena, karina, karma, karsa, karya


kurangna kurangnya kurangnya
infrmasi informasi informasi
dperlukan diperlukan diperlukan
sbuah sebuah buah, sebuah, suah
sstem sistem setem, sistem
penyaki penyakit pendaki, penyaji, penyakit

membandingkn membandingkan membandingkan

memilik memiliki memilih, memiliki, memilin, memilis

kurasi akurasi akurasi, durasi


wktu waktu waktu
eksekus eksekusi eksekusi
ksus kasus kasus, kaus, kus, sus, usus

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

sebnyak sebanyak sebanyak, senyak


kunc kunci kuna, kunci, kung, kuno

perbandingann perbandingan perbandingan


Insertion
merupakamn merupakan merupakan
ketidakpastiuan ketidakpastian ketidakpastian

dwengan dengan dengan


probabilitasi probabilitas probabilitas
mengatyasi mengatasi mengatasi
menunjukkasn menunjukkan menunjukkan
utkuran ukuran ukuran
kkepastian kepastian kepastian
kkematian kematian kematian
bilsa bila biasa, bila, bilas, bilga, bisa
diabaiukan diabaikan diabaikan
penfderita penderita penderita
menyadarii menyadari menyadari
kareena karena karena
jkurangnya kurangnya kurangnya
informmasi informasi informasi
diperluukan diperlukan diperlukan
sebuuah sebuah sebuah
sistemn sistem sistem
peenyakit penyakit penyakit

membanndingkan membandingkan membandingkan

memmiliki memiliki memiliki


akurasiu akurasi akurasi
qwaktu waktu waktu
eyksekusi eksekusi eksekusi
kassus kasus kasus
ujki uji uji
sebaanyak sebanyak sebanyak
kuunci kunci kunci
pervandingan perbandingan perbandingan, pertandingan
meripakan merupakan meriapkan, merupakan
jetidakpastian ketidakpastian ketidakpastian
denhan dengan dengan
ptobabilitas probabilitas probabilitas
mengatssi mengatasi mengatasi
menunjujkan menunjukkan menunjukkan
ukuram ukuran ukuran
krpastian kepastian kepastian
Substitution
kemqtian kematian kematian
bils bila bias, bila, bilas, bilis, bis, bius
diavaikan diabaikan diabaikan
pendetita penderita penderita
menyadaru menyadar menyadar, menyadari
karema karena karena, karma
kurangnua kurangnya kurangnya
informaai informasi informasi
dipetlukan diperlukan diperlukan
sebuaj sebuah sebuah
sistrm sistem sistem, sistim
penyakir penyakit penyair, penyakar, penyakit

membandinhkan membandingkan membandingkan

memikiki memiliki memikiri, memiliki


akutasi akurasi akurasi
wajtu waktu waktu
eksekuai eksekusi eksekusi
khsus kasus kasus, khusus
hi, juhi, khi, phi, uai, ubi, udi, uh, uhu, uih, uji, uli, umi, uni,
uhi uji
uri,
sebanyal sebanyak sebanyak
kunxi kunci kunci, kundi
pebrandingan perbandingan perbandingan
merupkaan merupakan merupakan

ketidakpatsian ketidakpastian ketidakpastian

degnan dengan degan, dengan


Transposition
probabiliats probabilitas probabilitas
megnatasi mengatasi mengatasi
menunjkukan menunjukkan menunjukkan
ukurna ukuran ukuran
kepatsian kepastian kepastian
kmeatian kematian kematian
ibla bila iba
daibaikan diabaikan diabaikan
penderiat penderita penderita
meynadari menyadari menyadari
karean karena kardan, karena, karuan, sarean
kurangyna kurangnya kurangnya
infomrasi informasi informasi
idperlukan diperlukan diperlukan
sbeuah sebuah sebuah
sistme sistem sistem
penyakti penyakit penyakit

membandignkan membandingkan membandingkan

memiliik memiliki memiliki


kaurasi akurasi akurasi
wkatu waktu waktu
ekskeusi eksekusi eksekusi
kassu kasus kasau, kasdu, kasus
uij uji uih uik uis uit uji
sebaynak sebanyak sebanyak
uknci kunci kunci
Tabel V-2. Hasil Pengurutan Kandidat Kata Berdasarkan Perhitungan Cosine Similarity Jenis Kesalahan Deletion

No Query Result Rangking RR


1 prbandingan perbandingan, 1 1
2 merupkan merupakan 1 1
3 ketdakpastian ketidakpastian 1 1
4 denga dengak, dengan, dengap, dengar, dengu 2 0.5
5 probabiltas probabilitas 1 1
6 megatasi mengatasi, mewatasi 1 1
7 menunjukka menunjukkan 1 1
8 ukuan ukupan, ukuran 2 0.5
9 kepatian kepatihan, kematian, kepastian, kepagian 3 0.3
10 kemtian kematian 1 1
11 bla bala bela, bila, bola, bea 3 0.3
12 diabikan diabaikan 1 1
13 penderia penderita 1 1
14 menadari menyadari 1 1
15 karna karena 1 1
16 kurangna kurangnya 1 1
17 infrmasi informasi 1 1
18 dperlukan diperlukan 1 1
19 sbuah sebuah, buah, suah 1 1
20 sstem sistem, setem 1 1
21 penyaki penyakit, pendaki, penyaji 1 1
22 membandingkn membandingkan 1 1
23 memilik memiliki, memilih, memilin, memilis 1 1
24 kurasi akurasi, durasi 1 1
25 wktu waktu 1 1
26 eksekus eksekusi 1 1
27 ksus kasus, kus, sus, usus, kaus 1 1
28 ui uih, uik, uis, uit, bui - 0
29 sebnyak sebanyak, senyak 1 1
30 kunc kunci, kuna, kung, kuno 1 1

Tabel V-3. Hasil Pengurutan Kandidat Kata Berdasarkan Perhitungan Cosine Similarity Jenis Kesalahan Insertion

No Query Result Rangking RR


1 perbandingann perbandingan 1 1
2 merupakamn merupakan 1 1
3 ketidakpastiuan ketidakpastian 1 1
4 dwengan dengan 1 1
5 probabilitasi probabilitas 1 1
6 mengatyasi mengatasi 1 1
7 menunjukkasn menunjukkan 1 1
8 utkuran ukuran 1 1
9 kkepastian kepastian 1 1
10 kkematian kematian 1 1
11 bilsa bisa, biasa, bila, bilga, bilas 3 0.3
12 diabaiukan diabaikan 1 1
13 penfderita penderita 1 1
14 menyadarii menyadari 1 1
15 kareena karena 1 1
16 jkurangnya kurangnya 1 1
17 informmasi informasi 1 1
18 diperluukan diperlukan 1 1
19 sebuuah sebuah 1 1
20 sistemn sistem 1 1
21 peenyakit penyakit 1 1
22 membanndingkan membandingkan 1 1
23 memmiliki memiliki 1 1
24 akurasiu akurasi 1 1
25 qwaktu waktu 1 1
26 eyksekusi eksekusi 1 1
27 kassus kasus 1 1
28 ujki uji 1 1
29 sebaanyak sebanyak 1 1
30 kuunci kunci 1 1
Tabel V-4. Hasil Pengurutan Kandidat Kata Berdasarkan Perhitungan Cosine Similarity Jenis Kesalahan Substitution

No Query Result Rangking RR


1 pervandingan perbandingan, pertandingan 1 1
2 meripakan merupakan, meriapkan 1 1
3 jetidakpastian ketidakpastian 1 1
4 denhan dengan 1 1
5 ptobabilitas probabilitas 1 1
6 mengatssi mengatasi 1 1
7 menunjujkan menunjukkan 1 1
8 ukuram ukuran 1 1
9 krpastian kepastian 1 1
10 kemqtian kematian 1 1
11 bils bilas, bilis, bila, bis, bias 1 1
12 diavaikan diabaikan 3 0.3
13 pendetita penderita 1 1
14 menyadaru menyadar, menyadari 2 0.5
15 karema karma, karena 2 0.5
16 kurangnua kurangnya 1 1
17 informaai informasi 1 1
18 dipetlukan diperlukan 1 1
19 sebuaj sebuah 1 1
20 sistrm sistem, sistim 1 1
21 penyakir penyair, penyakit, penyakar 2 0.5
22 membandinhkan membandingkan 1 1
23 memikiki memikiri, memiliki 2 0.5
24 akutasi akurasi 1 1
25 wajtu waktu 1 1
26 eksekuai eksekusi 1 1
27 khsus khusus, kasus 2 0.5
28 uhi uh, juhi, uhu, hi, khi - 0
29 sebanyal sebanyak 1 1
30 kunxi kunci, kundi 1 1

Tabel V-5. Hasil Pengurutan Kandidat Kata Berdasarkan Perhitungan Cosine Similarity Jenis Kesalahan Transposition

No Query Result Rangking RR


1 pebrandingan perbandingan 1 1
2 merupkaan merupakan 1 1
3 ketidakpatsian ketidakpastian 1 1
4 degnan degan, dengan 2 0.5
5 probabiliats probabilitas 1 1
6 megnatasi mengatasi 1 1
7 menunjkukan menunjukkan 1 1
8 ukurna ukuran 1 1
9 kepatsian kepastian 1 1
10 kmeatian kematian 2 0.5
11 ibla iba, bila 2 0.5
12 daibaikan diabaikan 1 1
13 penderiat penderita 1 1
14 meynadari menyadari 1 1
15 karean sarean, karena, kardan, karuan 1 1
16 kurangyna kurangnya 1 1
17 infomrasi informasi 1 1
18 idperlukan diperlukan 1 1
19 sbeuah sebuah 1 1
20 sistme sistem 1 1
21 penyakti penyakit 1 1
22 membandignkan membandingkan 1 1
23 memiliik memiliki 1 1
24 kaurasi akurasi 1 1
25 wkatu waktu 1 1
26 ekskeusi eksekusi 1 1
27 kassu kasus, kasau, kasdu 1 1
28 uij uih, uik, uis, uit, uji 5 0.2
29 sebaynak sebanyak 1 1
30 uknci kunci 1 1
5.3 Analisis Hasil Penelitian

Berdasarkan hasil perhitungan RR untuk masing-masing kata salah ejaan,

maka didapat nilai MRR untuk masing-masing jenis kesalahan kata yang terdiri dari

insertion, deletion, substitution, dan transposition. Hasil Mean Reciprocal Rank

(MRR) dapat dilihat pada tabel V-6.

Tabel V-6. Hasil Mean Reciprocal Rank (MRR)

No. Jenis Kesalahan MRR

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

ranking 1. Jenis kesalahan substitution menghasilkan nilai MRR sebesar 86.11%,

hal ini dikarenakan ada beberapa kandidat kata berada pada ranking ke 2 dan 3 serta

berada diluar 5 ranking teratas. Jenis kesalahan transposition menghasilkan nilai


MRR sebesar 89%, hal ini dikarenakan ada beberapa kandidat kata yang berada

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

kesamaan bigram paling banyak dengan kandidat katanya, sehingga rata-rata

kandidat kata masing-masing query berada pada ranking ke 1.

Algoritma Damerau Levenshtein Distance dapat menghasilkan kandidat

kata yang sebenarnya berdasarkan kata salah ejaan. Namun ketika dilakukan

pengurutan berdasarkan nilai kemiripan menggunakan algoritma Cosine Similarity,

kandidat kata tersebut tidak masuk dalam 5 kandidat teratas. Hal ini dikarenakan

N-gram yang dihasilkan menghasilkan bigram yang sedikit. Pada proses

pengurutan kandidat kata, jika terdapat kandidat kata yang memiliki nilai Cosine

Similarity yang besarnya sama, maka akan diurutkan berdasarkan letak kata yang

lebih dulu di dalam kamus.

5.4 Kesimpulan

Dari hasil pengujian yang telah dilakukan, didapatkan hasil dari pengujian

perangkat lunak ini bahwa algoritma Damerau Levenshtein Distance dapat

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

KESIMPULAN DAN SARAN

6.1 Kesimpulan

Berdasarkan data yang digunakan dalam penelitian ini, dapat diperoleh

kesimpulan sebagai berikut :

1. Algoritma Damerau Levenshtein Distance dapat menghasilkan kandidat kata

yang sesuai berdasarkan empat kesalahan kata yaitu insertion, deletion,

substitution, dan transposition.

2. Hasil pengujian dengan menggunakan algoritma Damerau Levenshtein

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

transposition sebesar 89%.


6.2 Saran

Saran yang ingin penulis sampaikan untuk pengembangan lebih lanjut dari

penelitian ini yaitu :

1. Sistem dapat dikembangkan pada proses pengecekan kata menggunakan

kamus Bahasa Indonesia yang lebih lengkap lagi.

2. Keterkaitan kata dalam satu kalimat dapat juga diperhatikan dalam penelitian

selanjutnya, karena dalam penelitian ini hanya berupa identifikasi kata

berdasarkan kata-kata dalam kamus atau disebut dengan non-word error.

3. Sistem dapat dikembangkan dengan memberikan rekomendasi kata terhadap

kata yang sebelumnya dipilih.


DAFTAR PUSTAKA

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

Dokumen yang digunakan adalah abstrak Tugas Akhir Mahasiswa Jurusan

Teknik Informatika Fakultas Ilmu Komputer Universitas Sriwijaya yang telah

dimodifikasi berbagai jenis kesalahan kata.

Perbandingan Metode Probabilitas Bayes dan Certainty Factor untuk


Mendiagnosa Penyakit Tiroid

Oleh :

Henny Alvionita
091214020011
ABSTRAK

Probabilitas bayes merupakan metode untuk mengatasi ketidakpastian


dengan melihat probabilitas setiap evidence. Certainty factor merupakan metode
untuk mengatasi suatu masalah dengan menunjukan ukuran kepastian terhadap
suatu aturan dan fakta. Penyakit tiroid merupakan salah satu penyakit yang dapat
menyebabkan kematian bila diabaikan. Saat ini banyak penderita penyakit tiroid
yang tidak menyadari karena kurangnya informasi. Untuk itu diperlukan sebuah
sistem pakar untuk mendiagnosa penyakit tiroid dengan membandingkan metode
probabilitas bayes dan certainty factor. Penelitian ini memiliki tingkat akurasi
99% untuk probabilitas bayes dan 98% untuk certainty factor. Waktu eksekusi
0,1411 ms untuk probabilitas bayes dan 0,1517 ms untuk certainty factor, dengan
kasus uji sebanyak 100 data.
Kata kunci : Certainty Factor, Penyakit Tiroid, Probabilitas Bayes, Sistem Pakar
LAMPIRAN 2 : NILAI COSINE SIMILARITY MASING-MASING

KANDIDAT KATA

1. Jenis Kesalahan Deletion

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

3. Jenis Kesalahan Substitution

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() {

Panel_utama = new javax.swing.JPanel();


lbl_judul = new javax.swing.JLabel();
Btn_OpenDokumen = new javax.swing.JButton();
Field_OpenDokumen = new javax.swing.JTextField();
jScrollPane1 = new javax.swing.JScrollPane();
Pnl_DokAwal = new javax.swing.JTextArea();
jScrollPane2 = new javax.swing.JScrollPane();
Pnl_DokHasil = new javax.swing.JTextArea();
Btn_cek = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jScrollPane5 = new javax.swing.JScrollPane();
Tbl_hasil = new javax.swing.JTable();
jLabel4 = new javax.swing.JLabel();
Field_MRR = new javax.swing.JTextField();
Btn_MRR = new javax.swing.JButton();
jLabel5 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

Panel_utama.setBackground(new java.awt.Color(204, 204, 204));


Panel_utama.setToolTipText("");

lbl_judul.setFont(new java.awt.Font("Times New Roman", 1, 24)); // NOI18N


lbl_judul.setText("SPELLING CHECKER SYSTEM");

Btn_OpenDokumen.setFont(new java.awt.Font("Times New Roman", 0, 11)); //


NOI18N
Btn_OpenDokumen.setText("Open File");
Btn_OpenDokumen.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
Btn_OpenDokumenActionPerformed(evt);
}
});

Field_OpenDokumen.setBackground(new java.awt.Color(240, 240, 240));


Field_OpenDokumen.setEnabled(false);

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);
}
});

jLabel1.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N


jLabel1.setText("Dokumen Awal");

jLabel2.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N


jLabel2.setText("Daftar Kata Salah");

jLabel3.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N


jLabel3.setText("Kandidat Kata");

Tbl_hasil.setFont(new java.awt.Font("Times New Roman", 0, 11)); // NOI18N


Tbl_hasil.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {

},
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
};

public Class getColumnClass(int columnIndex) {


return types [columnIndex];
}

public boolean isCellEditable(int rowIndex, int columnIndex) {


return canEdit [columnIndex];
}
});
Tbl_hasil.setColumnSelectionAllowed(true);
Tbl_hasil.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
Tbl_hasilMouseClicked(evt);
}
});
jScrollPane5.setViewportView(Tbl_hasil);
Tbl_hasil.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSel
ectionModel.SINGLE_INTERVAL_SELECTION);

jLabel4.setFont(new java.awt.Font("Times New Roman", 1, 12)); // NOI18N


jLabel4.setText("MRR : ");

Field_MRR.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N


Field_MRR.setEnabled(false);

Btn_MRR.setFont(new java.awt.Font("Times New Roman", 0, 11)); // NOI18N


Btn_MRR.setText("Hitung MRR");
Btn_MRR.setAutoscrolls(true);
Btn_MRR.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
Btn_MRRActionPerformed(evt);
}
});

jLabel5.setFont(new java.awt.Font("Times New Roman", 1, 12)); // NOI18N


jLabel5.setText("Kandidat Terpilih ");

javax.swing.GroupLayout Panel_utamaLayout = new


javax.swing.GroupLayout(Panel_utama);
Panel_utama.setLayout(Panel_utamaLayout);
Panel_utamaLayout.setHorizontalGroup(

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())
);

javax.swing.GroupLayout layout = new


javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
.addComponent(Panel_utama, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(6, 6, 6)
.addComponent(Panel_utama, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);

pack();
}// </editor-fold>

private void Btn_OpenDokumenActionPerformed(java.awt.event.ActionEvent evt) {


String path, teks, nama_file;
String[] ekstensi;
JFileChooser chooser = new JFileChooser();
int result = chooser.showOpenDialog(this);

boolean eks_benar;

eks_benar = false;
if(result == JFileChooser.APPROVE_OPTION){
File selectedFile = chooser.getSelectedFile();
path = selectedFile.getAbsolutePath();

System.out.println("selected file : "+selectedFile.getAbsolutePath());


nama_file = selectedFile.getName();
ekstensi = nama_file.split("\\.");

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);

private void Pnl_DokAwalAncestorAdded(javax.swing.event.AncestorEvent evt) {

private void Btn_cekActionPerformed(java.awt.event.ActionEvent evt) {


ArrayList<ArrayList> kandidat_query_terurut;
ArrayList<Query> query_list = new ArrayList<>();
ArrayList<Kandidat_Kata> kandidat_list = new ArrayList<>();
String teks_CF = new String();

manager.do_Pra_Pengolahan();
manager.do_Pengecekan_Kata_Salah();
query_list = manager.getQueryList();

for(int i=0; i<query_list.size();i++){


Pnl_DokHasil.append(query_list.get(i).getIstilah_kata()+"\n");
}
manager.do_Penentuan_Kandidat_Kata();
manager.do_pemecahan_Kata();
manager.do_pembobotan();
manager.do_kemiripan();
kandidat_query_terurut = manager.getkandidat_query_terurut();

try{

DefaultTableModel model = (DefaultTableModel)Tbl_hasil.getModel();

String[] rows = new String[7];


int count;
for(int i=0; i<query_list.size();i++){
count = 0;
kandidat_list = kandidat_query_terurut.get(i);

rows[0] = String.valueOf(i+1);
rows[1] = query_list.get(i).getIstilah_kata();

if(count < kandidat_list.size()){


rows[2] = kandidat_list.get(0).getIstilah_kata();
count++;
}
else{
rows[2] = "-";
}

if(count < kandidat_list.size()){


rows[3] = kandidat_list.get(1).getIstilah_kata();
count++;
}
else{
rows[3] = "-";
}

if(count < kandidat_list.size()){


rows[4] = kandidat_list.get(2).getIstilah_kata();
count++;
}
else{
rows[4] = "-";
}

if(count < kandidat_list.size()){


rows[5] = kandidat_list.get(3).getIstilah_kata();
count++;
}
else{
rows[5] = "-";
}
if(count < kandidat_list.size()){
rows[6] = kandidat_list.get(4).getIstilah_kata();
count++;
}
else{
rows[6] = "-";
}

model.addRow(rows);

Btn_cek.setEnabled(false);
}

ranking = new double[query_list.size()];

for (int i = 0; i < ranking.length; i++) {


ranking[i] = -1;
}

}catch(Exception e){
}
}

private void Btn_MRRActionPerformed(java.awt.event.ActionEvent evt) {


double mrr;

mrr = 0;
for (int i = 0; i < ranking.length; i++) {
if(ranking[i] != -1){
mrr = mrr+(1/ranking[i]);
}
}

mrr = (mrr/ranking.length)*100 ;

DecimalFormat df = new DecimalFormat("#.##");

Field_MRR.setText(String.valueOf(df.format(mrr)+"%"));
Btn_OpenDokumen.setEnabled(true);
}

private void Tbl_hasilMouseClicked(java.awt.event.MouseEvent evt) {


int baris, kolom, nBaris;

baris = Tbl_hasil.getSelectedRow();
kolom = Tbl_hasil.getSelectedColumn();
nBaris = Tbl_hasil.getRowCount();

for (int i = 0; i < nBaris; i++) {


if(i == baris && kolom >= 2){
if(kolom == 2){
ranking[i] = 1;
}
else if(kolom == 3){
ranking[i] = 2;
}
else if(kolom == 4){
ranking[i] = 3;
}
else if(kolom == 5){
ranking[i] = 4;
}
else{
ranking[i] = 5;
}
}
}

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>

/* Create and display the form */


java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Antarmuka_main().setVisible(true);
}
});
}

// Variables declaration - do not modify


private javax.swing.JButton Btn_MRR;
private javax.swing.JButton Btn_OpenDokumen;
private javax.swing.JButton Btn_cek;
private javax.swing.JTextField Field_MRR;
private javax.swing.JTextField Field_OpenDokumen;
private javax.swing.JPanel Panel_utama;
private javax.swing.JTextArea Pnl_DokAwal;
private javax.swing.JTextArea Pnl_DokHasil;
private javax.swing.JTable Tbl_hasil;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JScrollPane jScrollPane5;
private javax.swing.JTextField jTextField1;
private javax.swing.JLabel lbl_judul;
// End of variables declaration
}

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(){

public String muat_data(String path){


teks = "";

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);

try (BufferedReader reader = new BufferedReader(new InputStreamReader(din)))


{
String nilai;
while((nilai = reader.readLine())!= null){
list_line.add(nilai);
teks = teks + nilai + "\n";
}
reader.close();
} catch (IOException ex) {
}
} catch (FileNotFoundException ex) {
}

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();

for(int x=0; x<kandidat_query.size(); x++){


kandidat_list = kandidat_query.get(x);

System.out.print("Kandidat query "+querylist.get(x).getIstilah_kata()+" : ");


for(int y=0; y<kandidat_list.size(); y++){
System.out.print(kandidat_list.get(y).getIstilah_kata()+" ");
}
System.out.println();
}
}
public void do_pemecahan_Kata(){
bigram = new Pemecahan_Bigram();
bigram.initKataSalah(querylist);
bigram.initKandidatKata(kandidat_query);
bigram.bigram_KataSalah();
bigram.Bigram_Kandidat();

}
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;

kemiripan = new Cosine_Similarity();


kemiripan.init_bobot(list_bobot);
kemiripan.hitung_cosine();
kemiripan.sorting(kandidat_query);
list_cosine_terurut = kemiripan.getCosineSimilarity();
kandidat_query_terurut = kemiripan.getKandidatTerurut();

for(int i=0; i<querylist.size(); i++){


System.out.println("Query '"+querylist.get(i).getIstilah_kata()+"' : ");

nilai_kemiripan = list_cosine_terurut.get(i);
kandidat = kandidat_query.get(i);

for(int j=0; j<nilai_kemiripan.length; j++){


System.out.println(kandidat.get(j).getIstilah_kata()+" (kandidat "+(j+1)+") :
"+nilai_kemiripan[j]);
}
}
}

public ArrayList<Query> getQueryList (){


return querylist;
}

public ArrayList<ArrayList> getkandidat_query(){


return kandidat_query;
}
public ArrayList<ArrayList> getkandidat_query_terurut(){
return kandidat_query_terurut;
}
}
3. Pra_Pengolahan.java

package Controller;

import java.util.ArrayList;
/**
*
* @author Nur Hamidah
*/
public class Pra_Pengolahan {
String teks;
String teks_CF;
ArrayList<String> token_teks;

public void init_teks(String teks){


this.teks = teks;
}

public void do_CaseFolding(){


teks_CF = teks.toLowerCase();
}

public void do_Tokenizing(){


String[] delimiter = {"."," ",",","(",")","1","2","3","4","5","6","7"
,"8","9","0","\t","-",">","<","\n","&","?","/"
,"%","!","+","_",":"};
String[] stopword = {"bayes","henny", "alvionita", "certainty", "factor",
"evidence","ms"};

String word = "";


boolean char_delimiter_flag, filter_flag;
token_teks = new ArrayList<>();

for(int i=0; i<teks_CF.length(); i++){


char_delimiter_flag = false;

for(int j=0; j<delimiter.length; j++){


if(String.valueOf(teks_CF.charAt(i)).equals(delimiter[j])){
char_delimiter_flag = true;
}
}

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 = "";
}
}
}
}

public String getTeksCF(){


return teks_CF;
}

public ArrayList<String> getToken_teks() {


return token_teks;
}
}

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;
}

public void muat_kamus(){


try {
Scanner dict = new Scanner(new File("D:\\Kuliah\\belajar
java\\Skripsi\\kbbi.txt"));
while (dict.hasNext()) {
kamus.add(dict.next());

} dict.close();
} catch (FileNotFoundException e) {
System.out.println("Kamus Tidak Ditemukan");
}
}

public void cek_kata(){


hasil_deteksi = new ArrayList<>();
boolean flag;
String word = "";

for(int a=0; a<token.size();a++){


Query query = new Query();
flag = false;

for(int b=0; b<kamus.size(); b++){


if(kamus.get(b).equals(token.get(a))){
flag = true;
}
}
if(flag == true){
hasil_deteksi.add(token.get(a));
} else{
query.setIstilah_kata(token.get(a));
kata_salah.add(query);
}
}
System.out.println("Kata Salah yaitu : ");
for(int j=0; j<kata_salah.size();j++){
System.out.println(""+kata_salah.get(j).getIstilah_kata());
}
}

public ArrayList<Query> getKata_salah() {


return kata_salah;
}
public ArrayList<String> getKamus(){
return kamus;
}
}

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() {
}

public int MinimumA(int a, int b, int c){


return Math.min(Math.min(a, b), c);
}
public int MinimumB(int a,int b){
return Math.min(a,b);
}
public void initKamus(ArrayList<String> kamus){
this.kamus = kamus;
}
public void initKataSalah(ArrayList<Query> kata_salah){
this.kata_salah = kata_salah;
}

public void hitung_nilai_edit(){


ArrayList<Kandidat_Kata> kandidat;
Kandidat_Kata kand;
String s;
String t;
int nilai_edit[][];
int d[][];
int m,n,i,j,k,l;
int cost;
char s_i, t_j;

nilai_edit = new int[kata_salah.size()][kamus.size()];


kandidat_query = new ArrayList<>();
for(k=0; k<kata_salah.size(); k++){
s = kata_salah.get(k).getIstilah_kata();
m = s.length();

for(l=0; l<kamus.size(); l++){


t = kamus.get(l);
n = t.length();

d = new int[m+1][n+1];

for(i = 0; i<=m ; i++){


d[i][0] = i;
}
for(j = 0; j<=n ; j++){
d[0][j] = j;
}

for (i = 1; i <= m; i++) {


s_i = s.charAt(i - 1);
for (j = 1; j <= n; j++) {
t_j = t.charAt(j - 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];
}

kandidat = new ArrayList<>();


for(int z=0; z<kamus.size(); z++){
if(nilai_edit[k][z] == 1){
kand = new Kandidat_Kata();
kand.setIstilah_kata(kamus.get(z));
kandidat.add(kand);
}
}
kandidat_query.add(kandidat);
}
}
public ArrayList<ArrayList> getKandidatQuery(){
return kandidat_query;
}
}

6. Pemecahan_Bigram.java

package Controller;

import Entity.Kandidat_Kata;
import Entity.Query;
import java.util.ArrayList;

/**
*
* @author Nur Hamidah
*/
public class Pemecahan_Bigram {

ArrayList<Query> kata_salah = new ArrayList<>();


ArrayList<ArrayList> kandidat_query = new ArrayList<>();

public Pemecahan_Bigram() {
}

public void initKandidatKata(ArrayList<ArrayList> kandidat_query){


this.kandidat_query = kandidat_query;
}
public void initKataSalah(ArrayList<Query> kata_salah){
this.kata_salah = kata_salah;
}

public void bigram_KataSalah(){


String[] bigram;
Query bg;
String s,t,s_baru;
int m;
for(int i=0; i<kata_salah.size(); i++){
s = kata_salah.get(i).getIstilah_kata();
s_baru = "_"+s+"_";
m = s_baru.length();

bigram = new String[m-1];

if(s_baru.length() > 2){


for(int j=0; j<bigram.length; j++){
bigram[j] = s_baru.substring(j, j+2);
}
}
kata_salah.get(i).setBigram_kata(bigram);
}
}
public void Bigram_Kandidat(){
String[] bigram, bigram_k;
Kandidat_Kata bg;
ArrayList<Kandidat_Kata> kandidat;
String s, s_baru;
int m;

for(int h=0; h<kandidat_query.size() ; h++){


kandidat = kandidat_query.get(h);

for(int i=0; i<kandidat.size(); i++){


s = kandidat.get(i).getIstilah_kata();
s_baru = "_"+s+"_";
m = s_baru.length();

bigram = new String[m-1];

if(s_baru.length() > 2){


for(int j=0; j<bigram.length; j++){
bigram[j] = s_baru.substring(j, j+2);
}
}

kandidat.get(i).setBigram_kata(bigram);
}
kandidat_query.set(h, kandidat);
}
}

public ArrayList<Query> getBigramQuery(){


return kata_salah;
}
public ArrayList<ArrayList> getBigramKandidat(){
return kandidat_query;
}
}

7. Pembobotan_tf_idf.java

package Controller;

import Entity.Kandidat_Kata;
import Entity.Query;
import java.util.ArrayList;

/**
*
* @author Nur Hamidah
*/

public class Pembobotan_tf_idf {


ArrayList<Query> query_list = new ArrayList<>();
ArrayList<ArrayList> kandidat_query = new ArrayList<>();
ArrayList<double[][]> list_tf;
ArrayList<double[]> list_df;
ArrayList<double[]> list_idf;
ArrayList<double[][]> bobot;

public Pembobotan_tf_idf() {
}

public void initBigram_Query(ArrayList<Query> query_list){


this.query_list = query_list;
}
public void initBigram_Kandidat(ArrayList<ArrayList> kandidat_query){
this.kandidat_query = kandidat_query;
}

public void hitung_tfidf(){


ArrayList<String> bigram_list;
String[] bigram;
double[][] tf;
ArrayList<Kandidat_Kata> kandidat_list;
double[] df,idf;
double sum, jumlah_tf;

list_tf = new ArrayList<>();


list_df = new ArrayList<>();
list_idf = new ArrayList<>();

for(int b=0; b<query_list.size();b++){


bigram_list = new ArrayList<>();

bigram = query_list.get(b).getBigram_kata();

for(int c=0; c<bigram.length; c++){


bigram_list.add(bigram[c]);
}

kandidat_list = kandidat_query.get(b);

for(int c=0; c<kandidat_list.size(); c++){


bigram = kandidat_list.get(c).getBigram_kata();
for(int d=0; d<bigram.length;d++){
boolean flag_ada = false;
for(int e=0; e<bigram_list.size(); e++){
if(bigram[d].equals(bigram_list.get(e))){
flag_ada = true;
}
}

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();

boolean flag_ada = false;


for(int e=0; e<bigram.length; e++){
if(bigram_list.get(y).equals(bigram[e])){
flag_ada = true;
}
}
if(flag_ada == true){
tf[y][0] = 1;
}
else{
tf[y][0] = 0;
}

for(int z=0; z<kandidat_list.size();z++){


bigram = kandidat_list.get(z).getBigram_kata();

flag_ada = false;

for(int e=0; e<bigram.length; e++){


if(bigram_list.get(y).equals(bigram[e])){
flag_ada = true;
}
}

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];

for(int j=0; j<tf.length; j++){


sum =0;
for(int k=1; k<tf[j].length;k++){
sum = sum + tf[j][k];
}
df[j] = sum;
}

list_df.add(df);

//MENGHITUNG NILAI IDF

idf = new double[df.length];

for(int k=0; k<df.length;k++){


jumlah_tf = tf[k].length-1;
if (df[k] == 0) {
idf[k] = 0;
} else {
idf[k] = Math.log10(jumlah_tf/df[k]);
}
}

list_idf.add(idf);
}
}

public void pembobotan(){


double w[][];
double[][] tf;
double[] idf;

bobot = new ArrayList<>();

for(int a=0 ; a<list_tf.size(); a++){


tf = list_tf.get(a);

w = new double[tf.length][tf[0].length];
idf = list_idf.get(a);

for(int b=0; b<tf.length; b++){


for(int c=0; c<tf[b].length; c++){
w[b][c] = tf[b][c] * idf[b];
}
}
bobot.add(w);
}
}

public ArrayList<double[][]> getBobot() {


return bobot;
}
}

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() {
}

public void init_bobot(ArrayList<double[][]> bobot){


list_bobot = bobot;
}

public void hitung_cosine(){


double[][] w,tf;
double[] vektor_query,vektor_kandidat,sim,vektor_cosine;

cosine = new ArrayList<>();

vektor_query = new double[list_bobot.size()];

for(int a=0; a<list_bobot.size();a++){


w = list_bobot.get(a);

vektor_kandidat = new double[w[0].length-1];


vektor_cosine = new double[w[0].length-1];

for(int b=0; b<w[0].length; b++){


if(b == 0){
for(int c=0; c<w.length; c++){
vektor_query[a] += Math.pow(w[c][b], 2);
}
vektor_query[a] = Math.sqrt(vektor_query[a]);
}else{
for(int c=0; c<w.length; c++){
vektor_kandidat[b-1] += Math.pow(w[c][b], 2);
}
vektor_kandidat[b-1] = Math.sqrt(vektor_kandidat[b-1]);
}
}
for(int b=1; b<w[0].length; b++){
vektor_cosine[b-1] = 0;

for(int c=0; c<w.length; c++){


vektor_cosine[b-1] += w[c][0] * w[c][b];
}
vektor_cosine[b-1] = vektor_cosine[b-1]/(vektor_query[a]*vektor_kandidat[b-
1]);

if(Double.isNaN(vektor_cosine[b-1])){
vektor_cosine[b-1] = 0;
}
}
cosine.add(vektor_cosine);
}
}

public void sorting(ArrayList<ArrayList> kandidat_query){


ArrayList<Kandidat_Kata> kandidat_list;
double[] sim_cosine;
double temp;
Kandidat_Kata kandidat_temp;

cosine_terurut = new ArrayList<>();


kandidat_query_terurut = new ArrayList<>();

list_bobot = new ArrayList<>();


for(int a=0; a<cosine.size();a++){
sim_cosine = cosine.get(a);
kandidat_list = kandidat_query.get(a);

for(int i=0 ; i<sim_cosine.length ; i++){


for(int j=0 ; j<sim_cosine.length-i-1 ; j++){
if(sim_cosine[j] < sim_cosine[j+1]){
temp = sim_cosine[j];
sim_cosine[j] = sim_cosine[j+1];
sim_cosine[j+1] = temp;

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);
}
}

public ArrayList<double[]> getCosineSimilarity(){


return cosine_terurut;
}

public ArrayList<ArrayList> getKandidatTerurut(){


return kandidat_query_terurut;
}

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() {
}

public ArrayList<String> getKandidat_terurut() {


return Kandidat_terurut;
}

public void setKandidat_terurut(ArrayList<String> Kandidat_terurut) {


this.Kandidat_terurut = Kandidat_terurut;
}

public String[] getBigram_kata() {


return bigram_kata;
}

public void setBigram_kata(String[] bigram_kata) {


this.bigram_kata = bigram_kata;
}

public String getIstilah_kata() {


return istilah_kata;
}

public void setIstilah_kata(String istilah_kata) {


this.istilah_kata = istilah_kata;
}
}

10. Kandidat_Kata.java

package Entity;

/**
*
* @author Nur Hamidah
*/
public class Kandidat_Kata {
String[] bigram_kata;
String istilah_kata;

public Kandidat_Kata(){
}

public String[] getBigram_kata() {


return bigram_kata;
}

public void setBigram_kata(String[] bigram_kata) {


this.bigram_kata = bigram_kata;
}

public String getIstilah_kata() {


return istilah_kata;
}

public void setIstilah_kata(String istilah_kata) {


this.istilah_kata = istilah_kata;
}
}

Anda mungkin juga menyukai