SKRIPSI APLIKASI PENDETEKSI KEMIRIPAN ISI TEKS DOKUMEN MENGGUNAKAN METODE LEVENSHTEIN DISTANCE
Diajukan Untuk Memenuhi Salah Satu Syarat Memperoleh Gelar Sarjana Teknik
NA’FIRUL HASNA ARIYANI E1E1 11 099
JURUSAN TEKNIK INFORMATIKA FAKULTAS TEKNIK UNIVERSITAS HALU OLEO KENDARI 2016
i
ii
iii
iv
INTISARI Na’firul Hasna Ariyani, E1E1 11 099 APLIKASI PENDETEKSI KEMIRIPAN ISI TEKS MENGGUNAKAN METODE LEVENSHTEIN DISTANCE
DOKUMEN
Skripsi, Fakultas Teknik, 2016 (xii+67+lampiran) Kata KuncI: Dokumen, Levenshtein Distance, Preprocessing, kemiripan, Plagiat Teknologi informasi yang berkembang pesat membawa dampak positif dan negatif bagi kehidupan Salah satu dampak negatif yang ditimbulkan adalah plagiarisme. Plagiarisme adalah tindakan menjiplak karya orang lain dan mengakui sebagai hasil karya pribadinya. Oleh karena itu pendeteksian plagiarisme perlu dilakukan untuk mengurangi penjiplakan terhadap hasil karya orang lain. Skripsi ini bertujuan untuk mendeteksi kemiripan dokumen teks menggunakan algoritma levenshtein distance sehingga dapat digunakan untuk membantu menentukan plagiarisme. Tipe dokumen yang diuji adalah .pdf .docx dan .txt. Dokumen yang digunakan untuk perbandingan teks ini adalah dokumen yang berbahasa Indonesia.ng, Tahapan dalam sistem adalah preprocessing yang teridiri dari Case Folding, Tokenizing, Filtering, Stemming, Sorting. Setelah proses preprocessing maka tahap selanjutnya adalah dilakukan perhitungan menggunakan metode Levenshtein Distance dan penggukuran nilai similarity sehingga mendapatkan nilai presentase kemiripan antara kedua dokumen. Pada pengujian menggunakan data real yaitu data dokumen berplagiat dengan algoritma Levenshtein Distance menghasilkan nilai similarity yang tinggi yaitu diatas 77% sampai 100% untuk dokumen yang tingkat kemiripannya tinggi. Sedangkan untuk dokumen dengan tingkat kemiripan yang rendah atau tidak berplagiat maka menghasilkan nilai similarity dibawah 40%.
v
ABSTRACT Na’firul Hasna Ariyani, E1E1 11 099 THE DETECTOR APPLICATION TO TEST THE SIMILARITY OF TEXT BY USING LEVENSHTEIN DISTANCE METHOD Minithesis, Faculty of Engineering, 2016 (xii+67+attachments) Keywords: Document, Levenshtein Distance, Plagiarism
Preprocessing,
Similarity,
The expanding of technology information rapidly, brings positive and negative impacts to the lives. One of the negative impacts is plagiarism. Plagiarism is the act of plagiarizing the work of others and recognize as his/her own work. Therefore, detection of plagiarism needs to be done to reduce plagiarism of other people's work. This thesis aims to detect the similarity of text document using algorithm levenshtein distance, so it can be used to help in determining plagiarism. The type of document to be tested are .pdf., .docx and .txt. Documents that used for comparison of this text is a document that used Indonesian language. Stages in the system is preprocessing that consist of Case Folding, tokenizing, Filtering, Stemming, and Sorting. After the process of preprocessing, the next step is doing the calculation using the Levenshtein Distance method and measuring value of the similarity. Thus getting a percentage value of the similarity between the two documents. In the testing by using real data, that is data of plagiarized documents by Levenshtein Distance algorithm produces a high similarity value is above 77% to 100% for the document that a high level of similarity. As for the document with a low degree of similarity or not plagiarized, the result of similarity values below 40%.
vi
KATA PENGANTAR Assalamu’alaikum warrahmatullahi wabarakatuh Dengan memanjatkan puji syukur kehadirat Allah SWT yang telah melimpahkan rahmat dan hidayahNya, serta shalawat dan salam untuk junjungan kami, Nabi Muhammad SAW, penulis bersyukur atas tersusunnya skripsi yang berjudul “Apikasi pendeteksi kemiripan isi teks dokumen menggunakan metode Levenshtein Distance” untuk melengkapi salah satu persyaratan yang diajukan
dalam rangka menempuh ujian akhir untuk memperoleh gelas Sarjana Teknik pada jenjang Strata Satu Program Studi Teknik Informatika Pada Fakultas Teknik Universitas Halu Oleo Kendari. Penulis menyadari, bahwa penulisan skripsi ini tidak akan terwujud tanpa adanya dukungan dan bantuan dari berbagai pihak. Maka, dalam kesempatan ini penulis mengucapkan terima kasih yang sebesar-besarnya kepada yang terhormat:
1. Bapak Prof. Dr. Ir. H. Usman Rianse, M.Si selaku Rektor Universitas Halu Oleo. 2. Bapak Mustarum Musaruddin, ST., MIT.,Ph.D, Selaku Dekan Fakultas Teknik Universitas Halu Oleo. 3. Ibu Ika Purwanti Ningrum, S.Kom.,M.Cs, Selaku Ketua Program Studi Teknik Informatika Fakultas Teknik Universitas Halu Oleo. 4. Bapak Sutardi, S.kom., MT. selaku pembimbing I yang telah meluangkan begitu banyak waktu, tenaga, dan pikiran serta dengan sabar membimbing penulis sejak awal hingga terselesaikanya Laporan Skripsi /Tugas Akhir (TA) ini. 5. Bapak Rahmat Ramadhan, S.Si., M.Cs, selaku dosen pembimbing II yang didalam berbagai kesibukan dapat menyempatkan diri membimbing dan mengarahkan serta memberi petunjuk dan saran yang sangat berharga bagi penulisan tugas akhir ini ini.
vii
6. Dosen serta para Staff Fakultas Teknik Universitas Halu Oleo, khususnya pada Program
Studi
Teknik
Informatika
(Bu
Anisa)
atas
bimbingan
dan
IlmuPengetahuannya. 7. Kedua orang tua tercinta yaitu Ayahanda Ir. Ari Sismanto, Ibunda Fosdar Wahyuningrum dan kedua saudaraku tercinta Mahardika Luhung Prayoga dan Elysia Khosy Azarine terima kasih telah menjadi orang tua dan saudara terhebat sejagad raya, yang selalu memberikan motivasi, nasehat, cinta, perhatian, dan kasih sayang serta doa yang tentu takkan bisa saya balas. 8. Teman-teman Teknik Informatika angkatan 2011 yang selalu memberikan inspirasi, khususnya teman-teman anak ganjil yang tercinta dan tersayang terima kasih banyak atas segala dukungan dan bantuannya. Terima kasih juga buat (Rezky Septiana, ST, Holis Hermansyah, ST) yang bersedia membantu dalam penyelesaian skripsi saya. Serta seluruh teman-teman dan semua pihak yang tidak dapat saya sebutkan satu persatu, Akhir kata penulis mohon maaf atas kekeliruan dan kesalahan yang terdapat dalam skripsi ini dan berharap semoga skripsi ini dapat memberikan manfaat bagi khasanah ilmu pengetahuan Teknologi Informasi di Indonesia. Wassalamualaikum Warahmatullahi Wabarakatuh. Kendari,
April 2016 Penulis
Na’firul Hasna Ariyani
viii
DAFTAR ISI HALAMAN JUDUL ......................................................................................i HALAMAN PENGESAHAN ........................................................................ii HALAMAN PERNYATAAN .......................................................................iv INTI SARI ......................................................................................................v ABSTRACT ...................................................................................................vi KATA PENGANTAR ....................................................................................vii DAFTAR ISI ..................................................................................................ix DAFTAR TABEL ...........................................................................................xi DAFTAR GAMBAR .....................................................................................xii BAB I PENDAHULUAN ..............................................................................1 1.1 1.2 1.3 1.4 1.5 1.6 1.7
Latar Belakang .................................................................................1 Rumusan Masalah ............................................................................2 Batasan Masalah ...............................................................................2 Tujuan Penelitian .............................................................................2 Manfaat Penelitian ...........................................................................3 Sistematika Penulisan .......................................................................3 Tinjauan Pustaka ..............................................................................4
BAB II LANDASAN TEORI .........................................................................6 2.1 Plagiarisme .......................................................................................6 2.1.1 Pengertian Plagiarisme.............................................................6 2.1.2 Jenis-Jenis Plagiarisme.............................................................6 2.2 Dokumen ...........................................................................................8 2.3 Teks Mining ......................................................................................11 2.3.1 Pengertian Teks Mining ...........................................................11 2.3.2 Tahapan dalam Teks Mining....................................................12 2.4 Metode Levenshtein Distance ..........................................................15 2.4.1 Pengertian Levenshtein Distance .............................................15 2.4.2 Mekanisme Levenshtein Distance............................................15 2.5 Pengukuran Nilai Similarity .............................................................16 2.6 Algoritma Nazief dan Adriani ..........................................................16 2.7 Unified Modeling Language (UML) ..................................................24 2.8 FlowChart ..........................................................................................31 2.9 Model Pengembangan Perangkat Lunak............................................32 2.10 MySQL ...........................................................................................34 2.11 XAMPP ...........................................................................................36 2.12 Pemrograman Java ..........................................................................36 2.13 Netbeans ..........................................................................................37
ix
BAB III METODOLOGI PENELITIAN........................................................39 3.1 Data yang digunakan ........................................................................39 3.2 Metode Pengumpulan Data ...............................................................39 3.3 Prosedur Pengembangan Perangkat Lunak ......................................39 3.4 Waktu Penelitian ...............................................................................40 BAB IV ANALISIS DAN PERANCANGAN SISTEM ................................41 4.1. Analisis Sistem ..................................................................................41 4.1.1 Analisis Kerja Sistem Lama..................................................41 4.1.2 Analisis Kerja Sistem Baru ...................................................41 4.2. Ilustrasi Metode Levenshtein Distance Terhadap Perencanaan Aplikasi ....41 4.2.1 Preprocessing .........................................................................43 4.2.2 Penerapan Metode Levenshtein Distance ..............................47 4.2.3 Penerapan Pengkuran Nilai Similarity ....................................49 4.3 Perancangan Sistem ..........................................................................49 4.3.1 Diagram Usecase ....................................................................49 4.3.2 Diagram Activity......................................................................50 4.3.3 Diagram Squence ....................................................................52 4.4 Analisis Kebutuhan Sistem ...............................................................54 4.4.1 Kebutuhan Data Masukan ....................................................54 4.4.2 Kebutuhan Data Keluaran ....................................................54 4.5 Perancangan Antar Muka (Interface)................................................55 BAB V IMPLEMENTASI DAN PENGUJIAN SISTEM ..............................57 5.1 Kebutuhan Sistem ..............................................................................57 5.2 Implementasi Antarmuka Sistem .......................................................57 5.3 Pengujian Sistem ................................................................................63 BAB VI PENUTUP........................................................................................67 4.1 Kesimpulan....................................................................................67 4.2 Saran ..............................................................................................67 DAFTAR PUSTAKA LAMPIRAN
x
DAFTAR TABEL Tabel 2.1 Awalan dan Akhiran Dalam Bahasa Indonesia ............................... 17 Tabel 2.2 Awalan dan Akhiran yang tak diizinkan ......................................... 19 Tabel 2.3 Aturan Pemengalan Awalan ........................................................... 20 Tabel 2.4 Simbol-simbol pada Use Case Diagram.......................................... 25 Tabel 2.5 Simbol-simbol Activity Diagram ..................................................... 26 Tabel 2.6 Simbol-simbol Squence Diagram .................................................... 27 Table 2.7 Simbol-simbol Class Diagram......................................................... 29 Tabel 2.8 Entity Relasionship Diagram........................................................... 30 Tabel 2.9 Simbol Flow Chart .......................................................................... 31 Tabel 3.1 Waktu Penelitian.............................................................................. 39 Tabel 4.1 Matriks Perhitungan metode Levenshtein Distance ........................ 48 Tabel 5.1 Daftar Dokumen Asli....................................................................... 63 Tabel 5.2 Daftar Dokumen Pembanding ......................................................... 64 Tabel 5.3 Hasil Perbandingan.......................................................................... 65 Tabel 5.4 Hasil Perbandingan dokumen yang tidak mirip .............................. 65
xi
DAFTAR GAMBAR Gambar 2.1 Tahap Preprocessing ................................................................ 12 Gambar 2.2 Tahap Case Folding.................................................................. 12 Gambar 2.3 Tahap Tokenizing ...................................................................... 13 Gambar 2.4 Tahap Filtering ....................................................................... 13 Gambar 2.5 Tahap Stemming ....................................................................... 14 Gambar 2.6 Tahap Sorting............................................................................ 14 Gambar 4.1 Flowchart Program .................................................................. 42 Gambar 4.2 Flowchart Preprocessing.......................................................... 43 Gambar 4.3 Contoh Dokumen ..................................................................... 44 Gambar 4.4 Flowchart Read File ................................................................. 44 Gambar 4.5 Contoh Tahap Case Folding...................................................... 44 Gambar 4.6 Contoh Tahap Tokenizing ........................................................ 45 Gambar 4.7 Contoh Tahap Filtering ............................................................ 46 Gambar 4.8 Contoh Tahap Stemming .......................................................... 46 Gambar 4.9 Diagram Use Case .................................................................... 49 Gambar 4.10 Diagram Activity Menu Bantuan............................................. 50 Gambar 4.11 Diagram Activity Menu Perbandingan 2 Dokumen ................ 51 Gambar 4.12 Diagram Activity Menu Perbandingan Banyak Dokumen ...... 52 Gambar 4.13 Diagram Sequence Menu Perbandingan Banyak Dokumen ... 53 Gambar 4.14 Diagram Sequence Menu Perbandingan 2 Dokumen ............. 54 Gambar 4.15 Desain Interface Menu Perbandingan 2 Dokumen ................. 55 Gambar 4.16 Desain Interface Menu Perbandingan Banyak Dokumen ....... 56 Gambar 4.17 Desain Interface Menu Bantuan ............................................. 56 Gambar 5.1 Tampilan Beranda ..................................................................... 58 Gambar 5.2 Tampilan Perbandingan 2 Dokumen ........................................ 58 Gambar 5.3 Proses Preprocessing dan menampilkan hasil........................... 59 Gambar 5.4 Proses Levenshtein Distance .................................................... 60 Gambar 5.5 Proses membaca file.................................................................. 61 Gambar 5.6 Tampilan Perbandingan banyak dokumen................................ 62 Gambar 5.7 Tampilan Bantuan ..................................................................... 63
xii
BAB I PENDAHULUAN 1.1 Latar Belakang Pemanfaatan teknologi digital telah menjadi kebutuhan dalam era modern
saat ini. Komponen yang ada di dalam
dunia digital
salah
satunya adalah
dokumen teks. Dokumen dalam bentuk digital memudahkan dalam hal penyimpanan, efisien, mudah dicari, bahkan
mudah
dalam
hal penjiplakan.
Praktek penjiplakan sering terjadi dalam dunia akademik, baik tingkat sekolah maupun perguruan tinggi. Tindakan plagiat yang dilakukan oleh siswa maupun mahasiswa ini sangat tidak mencerminkan sikap kreatif dan terpelajar sebagai kaum intelektual. Demi menyelesaikan tugas-tugasnya
dengan
cepat, siswa
maupun mahasiswa dapat melakukan teknik copy-paste-modify tanpa perlu mempelajari dan mengeksplorasi materi terlebih dahulu. Kadangkala tindak penjiplakan ini dimodifikasi dengan mengganti kata-kata yang mengandung sinonim, dengan maksud agar terlihat berbeda dari pekerjaan teman. Hal semacam ini dapat menimbulkan masalah terhadap evaluasi hasil belajar siswa/mahasiswa. Penjiplakan atau plagiarisme berarti mencontoh atau meniru atau mencuri tulisan dan karya orang lain yang kemudian diakui sebagai karangannya sendiri dengan ataupun tanpa seizin penulisnya. Penjiplakan dokumen digital bukanlah hal yang susah, cukup dengan menggunakan teknik copy-paste-modify pada sebagian isi dokumen dan bahkan keseluruhan isi dokumen sudah bisa dikatakan bahwa dokumen tersebut merupakan hasil duplikasi dari dokumen lain (Irianto, 2014). Cara untuk mengatasi permasalahan terjadinya plagiarisme, yaitu dengan mencegah dan mendeteksi. Mencegah berarti menjaga atau menghalangi agar plagiarisme tidak dilakukan. Usaha ini harus dilakukan sedini mungkin terutama pada sistem pendidikan dan moral masyarakat.
Mendeteksi berarti melakukan
usaha untuk menemukan tindakan plagiat yang telah dilakukan. Cara mendekteksi terbagi menjadi dua yang pertama secara manual dan yang kedua secara otomatis. 1
2
Secara manual dapat dilakuka dengan cara membandingkan manual antara kedua jenis dokumen tersebut namun hal tersebut tentulah kurang efektif. Pendeteksian secara manual sebenarnya mempunyai tingkat akurasi yang tinggi, hal ini dikarenakan kemampuan manusia dalam memahami makna dan maksud sangat terbatas, serta gaya
bahasa
dari
kata atau kalimat. Hanya saja,
dapat
membutuhkan waktu dan tenaga yang banyak jika mendeteksi dokumen yang sangat banyak sehingga menjadi tidak efektif didalam proses pengerjaanya. Melihat
masalah
tersebut penulis tertarik merancang
solusi untuk
mendeteksi kemiripan suatu dokumen teks agar dapat membantu dalam proses pengerjaan untuk mendeteksi perbandingan duah buah dokumen dalam jumlah yang sangat banyak dengan efektif dan efesien. Salah satu metode yang tepat dalam melakukan deteksi kemiripan dokumen teks adalah dengan melakukkan perhitungan
dengan
metode
Levenshtein
Distance.
Levenshtein
Distance
memperhatikan tiga operasi dalam menentukan jarak diff, yaitu (1) operasi penyisipan (insertion), (2) operasi penghapusan (deletion), (3) operasi penggatian (subtitution), sebuah huruf yang berdekatan. Hasil akhir yang diberikan dalam sistem ini adalah memberikan presentase nilai similarity antara kedua dokumen (Andriyani, 2010).
1.2 Rumusan Masalah Rumusan masalah dalam penelitian ini adalah sebagai berikut: 1. Bagaimana membangun Aplikasi Pendeteksi kemiripan dokumen dengan menggunakan metode LD (Levenshtein Distance). 2. Bagaimana akurasi Aplikasi Pendeteksi Plagiat tersebut dapat mendeteksi kemiripan dua dokumen atau lebih.
1.3 Batasan Masalah Batasan masalah dalam penelitian ini adalah sebagai berikut: 1. Dokumen yang digunakan dalam penelitian ini adalah dokumen teks yang tidak meliputi dokumen yang berisi gambar. 2. Dokumen yang digunakan untuk perbandingan teks ini adalah dokumen yang berbahasa Indonesia.
3
3. Tipe dokumen yang digunakan dalam penelitian ini adalah .pdf .docx dan .txt 4. Aplikasi ini mengabaikan adanya sinonim (persamaan kata). 5. Aplikasi ini tidak memperhatikan kesalahan penulisan dalam dokumen. 6. Aplikasi ini tidak memperhatikan kesamaan makna dalam kalimat.
1.4 Tujuan Penelitian Tujuan dalam penelitian ini adalah sebagai berikut: 1. Merancang
sistem
aplikasi
pendeteksi
kemiripan
isi
teks
dokumen
menggunakan metode Levenshtein Distance. 2. Mengetahui akurasi kemiripan (similarty)
antara satu dokumen dengan
dokumen lainnya.
1.5 Manfaat Penelitian Manfaat penelitian dalam penelitan ini adalah : 1. Dapat membantu instansi pendidikan dalam mendeteksi hasil laporan dan tugas yang diberikan. 2. Mengetahui tingkat kemiripan (similarity) dokumen teks antara dokumen yang satu dengan yang lain. 3. Dengan mengetahui persentase kemiripan teks, sehingga dapat digunakan sebagai bahan pertimbangan untuk mendeteksi adanya tindakan meniru. 4. Mempecepat proses pengoreksian dengan jumlah yang sangat besar dengan cepat dan efektif.
1.6 Sistematika Penulisan Sistematika dalam skripsi ini terdiri dari beberapa bagian utama yaitu sebagai berikut: BAB I Pendahuluan Merupakan bab pendahuluan yang menguraikan latar belakang masalah, rumusan masalah, tujuan penelitian, manfaat penelitian, batasan masalah dan sistematika penulisan.
4
BAB II Landasan Teori Membahas mengenai dasar-dasar teori pendukung yang digunakan dalam penelitian ini seperti Plagiat, Dokumen, Teks Mining, Metode Levenshtein Distance, Penggukuran Nilai Similarity, UML, Flowchart, Model Pengembang Perangkat Lunak, MySQL, Netbeans, XAMPP, Pemrograman Java. BAB III Metodologi Penelitian Membahas mengenai waktu dan tempat penelitian, metode pengumpulan data, metode pengembangan sistem yang digunakan dalam penelitian tugas akhir ini. BAB IV Analisis Perancangan Sistem Pada bagian ini diuraikan analisis sistem yang akan dibuat dan kebutuhan sistem yang meliputi kebutuhan fungsional, kebutuhan non fungsional sistem. Rancangan sistem meliputi rancangan arsitektur sistem, rancangan proses, rancangan prosedural, rancangan data, dan rancangan user interface. BAB V Implementasi Dan Pengujian Sistem Menguraikan tentang
implementasi dan pengujian dari perangkat lunak
yang dibangun berdasarkan hasil analisis dan perancangan (desain) pada bab sebelumnya. BAB VI Penutup Menguraikan kesimpulan penelitian dan saran-saran sebagai bahan pertimbangan untuk pengembangan penelitian.
1.7 Tinjauan Pustaka Penelitian ini didasarkan pada penelitian sebelumnya yang dilakukan oleh Irianto (2014) yang berjudul “Penentuan Tingkat Plagiarisme Dokumen Penelitian Menggunakan Centroid Linkage Hierarchical Method (CLHM)” dalam penelitian tersebut telah dikembangkan sistem penentuan tingkat plagiarisme dokumen menggunakan metode CLHM berdasarkan kemiripan topic
pada
abstraksi
dokumen penelitian. CLHM digunakan untuk mengelompokkan dokumen berdasarkan kemiripannya menggunakan hill climbing. Perhitungan prosentase kemiripan pada sistem ini menggunakan cosine similarity.
5
Salah satu penelitian yang mendasari penelitian ini adalah penelitian yang dilakukn oleh Mudafiq dkk. (2012) yang berjudul “Aplikasi Pendeteksi Duplikasi Dokumen Teks Bahasa Indonesia Menggunakan Algoritma Winnowing Dengan Metode K-Gram Dan Synonym Recognition” dalam penelitian tersebut Pencarian menggunakan teknik hashing akan menjadi lebih efisien daripada pencarian karakter-per-karakter pada nama-nama yang panjangnya bervariasi dan Sistem yang dibangun telah dapat mendeteksi duplikasi dengan pendekatan dengan perbedaan ± 0.82 % lebih besar menggunakan
sinonim
synonym recognition
daripada tanpa synonym recognition. Salah satu penelitian yang mendasari penelitian ini adalah penelitian yang dilakukn oleh Tudesman dkk. (2013) yang berjudul “Sistem deteksi plagiarisme dokumen
bahasa
indonesia
menggunakan
metode
vector
space
model”
menjelaskann bahwa hasil penerapan metode Vector Space Model dalam uji coba aplikasi untuk mendeteksi tingkat plagiarisme dapat menggunakan TF atau TFIDF, dimana hasil dengan menggunakan TF-IDF jauh lebih baik dibandingkan dengan TF.
BAB II LANDASAN TEORI 2.1 Plagiarisme 2.1.1 Pengertian Plagiarisme Plagiarisme merupakan tindakan kriminal yang sering terjadi dalam dunia akademis. Plagiarisme itu sendiri berasal dari kata latin “Plagiarus” yang berarti penculik dan “Plagiare” yang berarti mencuri. Jadi, secara sederhana plagiat berarti mengambil ide, kata-kata, dan kalimat seseorang dan memposisikannya sebagai hasil karyanya sendiri atau mengunakan ide, kata-kata, dan kalimat tanpa mencantumkan sumber dimana seorang penulis mengutipnya (Sastroasmoro, 2007). Dalam Kamus Besar Bahasa Indonesia (2008) disebutkan: "Plagiat adalah pengambilan karangan (pendapat dan sebagainya) orang lain dan menjadikannya seolah-olah karangan (pendapat) sendiri". Plagiat dapat di anggap sebagai tindak kriminal karena mencuri hak cipta orang lain. Di dalam dunia akademis, pelaku plagiarisme akan mendapat hukuman yang berat. Pelaku plagiat disebut plagiator.
2.1.2 Jenis-jenis Plagiarisme Terdapat jenis jenis plagiarism, menurut Sudigdo Sastroasmoro dalam makalahnya berjudul Beberapa Catatan tentang Plagiarisme pada tahun 2007, mengklasifikasikan plagiarisme dalam empat jenis. Jenis plagiarisme berdasarkan klasifikasinya diantaranya:
a. Jenis plagiarisme berdasarkan aspek yang dicuri Dalam klasifikasi ini terdiri atas 4 kategori yaitu kategori plagiarisme ide, plagiarisme isi, plagiarisme kata, kalimat, paragraf, dan plagiarisme total. Plagiarisme ide sering dikaitkan dengan penelitian replikatif. Penelitian reflikatif adalah penelitian yang berdasarkan atas ide orang lain. Apabila dalam melakukan penelitian, analisis yang digunakan sama dengan penelitian sebelumnya sama, maka harus mencantumkan sumber dan alasan ilmiah mengapa penelitian ulang tersebut perlu dilakukan.
6
7
Plagiarisme isi dari data penelitian adalah fabrikasi dan falsifikasi. Fabrikasi adalah tindakan membuat data yang tidak ada menjadi ada. Sedangkan falsifikasi adalah mengubah data dengan maksud agar sesuai dengan yang dikehendaki oleh peneliti tersebut. Plagiarisme kata, kalimat, paragraf merupakan jenis plagiarisme yang mengubah sebagian kecil dalam sebuah karya tulis, seperti menganti sebagian kalimat atau paragraf atau meniru seluruh isinya dengan bahasa yang berbeda. Plagiarisme total merupakan plagiarisme yang dibuat tanpa merubah total isi dari penelitian tersebut dan sama persis dengan karya orang lain. plagiarisme ini merupakan plagiarisme yang paling berat.
b. Klasifikasi berdasarkan sengaja atau tidaknya plagiarisme Plagirisme sengaja adalah mencuri atau dengan sengaja menjiplak hasil karya orang lain dengan kepentingannya sendiri. Hal ini dapat terjadi bila seseorang menjiplak ide, kata, frasa, kalimat atau pragraf tanpa mencantumkan sumbernya dan dilakukan dengan sadar untuk kepentingan sendiri. Plagiarisme tidak disengaja adalah plagiarisme yang terjadi karena ketidaktahuan. Ketidaktahuan ini biasa terjadi dalam menggunakan dokumentasi, teknik mengutip karya tulis,
dan parafrase kalimat yang keliru. Meskipun
plagirisme tidak disengaja namun sanksi yang dikenakan sama seperti plagiarisme yang disengaja. Hal tersebut dapat dicegah dengan menunjukan bagaimana menghindari plagiarisme.
c. Klasifikasi berdasarkan proporsi atau persentase kata, kalimat, paragraf yang dibajak Ada tiga macam klasifikasi plagiarisme berdasarkan poporsi atau persentase kata, kalimat, paragraf yang di bajak yaitu:
Plagiarisme ringan, plagiarisme yang jumlah proporsi atau persentase kata, kalimat, paragraf yang dibajak tidak melebihi 30 persen (< 30%).
Plagiarisme sedang, plagiarisme yang jumlah proporsi atau persentase kata, kalimat, paragraf yang dibajak antara 30-70 persen.
8
Plagiarisme berat, plagiarisme yang jumlah proporsi atau persentase kata, kalimat, paragraf yang dibajak lebih dari 70 persen (>70%).
d. Berdasarkan pada pola plagiarisme Berdasarkan pada pola plagiarisme dibedakan menjadi dua yaitu plagiarisme kata demi kata (word for word plagiarizing) dan plagiarisme mosaik. Plagiarisme kata demi kata (word for word plagiarizing) adalah pola plagiarisme dengan melakukan penjiplakan sebagian kecil kalimat, dapat juga satu paragraf, atau seluruh isi meskipun ditulis dengan bahasa lain. Sedangkan plagiarisme mosaik adalah penyajian tidak dilakukan kata demi kata, tapi menyipkan kata atau frase dari beberapa karya orang lain tanpa menuliskan sumbernya sehingga memberi kesan kalimat tersebut adalah asli penulis.
2.2 Dokumen Dokumen menurut bahasa Inggris berasal dari kata “document” yang mempunyai arti suatu yang tertulis atau yang tercetak dan segala benda yang memiliki berbagai keterangan dipilih untuk disusun, di kumpulkan, di sediakan ataupun untuk disebarkan (Sora 2014). Sedangkan menurut Kamus Umum Bahasa Indonesia menyebutkan dokumen adalah sesuatu yang tertulis atau tercetak yang dapat dipergunakan sebagai bukti atau keterangan. Dokumen merupakan salah satu hal yang sangat penting karena merupakan sumber informasi yang diperlukan oleh suatu instansi, organisasi, atau Negara. Tanpa dokumen kita akan kehilangan data-data yang diperlukan untuk kegiatan kantor/organisasi masa yang akan datang. Jenis-jenis format dokumen adalah sebagai berikut:
1. Portable Document Format (*.pdf) PDF (Portable Document Format) adalah sebuah format berkas yang dibuat oleh Adobe System pada tahun 1993 untuk keperluan pertukaran dokumen digital. Format PDF digunakan untuk merepresentasikan dokumen dua dimensi yang meliputi teks, huruf, citra dan grafik vektor dua dimensi. Pada Acrobat 3-D,
9
kemampuan PDF juga meliputi pembacaan dokumen tiga dimensi. PDF telah menjadi standar ISO pada tanggal 1 Juli 2008 dengan kode ISO 32000-1:2008. Berkas PDF dapat dibuat secara spesifik agar dapat diakses oleh orang-orang dengan keterbatasan fisik. Format berkas PDF dapat dilengkapi dengan label (tag) XML, teks ekuivalen, perbesaran visual teks (magnifier), penambahan fasilitas audio/suara, dan sebagainya. Beberapa perangkat lunak kreator PDF seperti Adobe InDesign dapat secara otomatis membuat berkas PDF berlabel. Berkas PDF dapat disandikan sehingga untuk dapat membuka atau mengeditnya diperlukan katakunci tertentu. Penyandian berkas PDF dilakukan dalam dua tingkat, yakni 40-bit dan 128-bit dengan menggunakan sistem sandi kompleks RC4 dan MD5. Berkas PDF juga dapat diberi pembatasan DRM untuk membatasi aktivitas penggandaan, penyuntingan, maupun pencetakan berkas tersebut. Format dokumen PDF mengkombinasikan tiga teknologi:
Sub-set dari pemrograman deskripsi halaman PostScript untuk menghasilkan tampilan dan grafik
Sistem penempatan/pemindahan huruf untuk mengijinkan perpindahan huruf di dalam dokumen
Sistem penyimpanan terstruktur untuk menempatkan dan mengkompresi elemen-elemen dokumen ke dalam satu berkas (Vicky, 2007).
2. Teks biasa (*.txt) Berkas ASCII atau teks biasa (bahasa Inggris: ‘plain text’) dalam istilah komputer, adalah suatu jenis berkas komputer yang berupa teks tidak terformat. Lawan dari jenis berkas ini adalah teks berformat. Jenis berkas ini biasanya disunting dengan menggunakan editor teks. Berkas ini biasanya hanya mengandung teks-teks yang diformat dengan menggunakan pengkodean ASCII. Berkas ini hanya terdiri atas karakter, angka, tanda baca, tabulasi, dan karakter pemisah baris (carriage return). Dalam berkas ASCII, tidak ada pemformatan yang ekstensif seperti dalam dokumen Microsoft Word atau Rich Text Format, melainkan pemformatan yang digunakan hanyalah pemformatan standar yakni ASCII.
10
Dalam sistem operasi Windows, berkas ASCII ini dapat dibuat dengan menggunakan program Notepad atau editor teks lainnya. Sistem operasi lainnya juga mengimplementasikannya, tapi beberapa sistem operasi (utamanya adalah keluarga UNIX) tidak mengharuskan adanya ekstensi berkas seperti pada Windows. Normalnya, sebagian besar berkas dalam sistem operasi UNIX merupakan berkas ASCII, kecuali berkas yang dapat dieksekusi (program). Berkas ASCII umumnya digunakan sebagai berkas teks biasa, skrip, kode sumber sebuah program (source code sebuah bahasa pemrograman), berkas konfigurasi (terutama dalam keluarga sistem operasi UNIX), atau berkas teks lainnya. Bahkan, banyak juga orang yang membuat gambar dengan menggunakan berkas ASCII, yang sering disebut sebagai ASCII Art. Karena berkas ASCII mengandung teks yang tidak diformat, berkas tersebut dapat dipahami banyak sistem operasi, karena memang ASCII adalah sebuah standar internasional (Windows, Macintosh, dan UNIX mendukung sepenuhnya standar ini). Akibatnya, berkas tersebut dapat menjadi sangat berguna dalam rangka berbagi informasi antar platform atau aplikasi (Mahfudin, 2015).
3. Word Document (*.doc) Ekstensi doc permata kali muncul pada dokumen yang digunakan oleh pengolah kata WordPerfect yaitu pada tahun 1980. Doc merupakan singkatan dari dokumen , adalah sebuah ekstensi file yang digunakan pada dokumen pengolah kata biasanya digunakan pada Microsoft Word. Pada tahun 1990-an Microsoft memilih menggunakan ekstensi *.doc pada pengolah kata Microsoft Word. File dengan ekstensi DOC bervariasi, pada versi Microsoft Word 97 dan 2003 masih menggunakan file dengan ekstensi *.doc, sedangkan pada Microsoft Word 2007 dan 2010 format dengan ekstensi *.doc diganti dengan ekstensi docx. File ekstensi *.doc merupakan ekstensi asli yang dihasilkan dari Microsoft Word tetapi file ekstensi ini tidak hanya dapat dibaca dan diedit dengan menggunakan pengolah kata Microsoft Word saja, tetapi pengolah kata lainnya juga dapat membaca dan membuatnya seperti, OpenOffice.org Writer, Google Docs, Apple Pages, dan AbiWord (Labuna, 2013).
11
2.3 Teks Mining 2.3.1 Pengertian Teks Mining Text mining memiliki definisi menambang data yang berupa teks dimana sumber data biasanya di dapatkan dari dokumen, dan tujuannya adalah mencari kata-kata yang dapat mewakili isi dari dokumen sehingga dapat dilakukan analisa keterhubungan antar dokumen. Text mining merupakan penerapan konsep dan teknik data mining untuk mencari pola dalam teks, yaitu proses penganalisisan teks guna menyarikan informasi yang bermanfaat untuk tujuan tertentu. Berdasarkan ketidakteraturan struktur data teks, maka proses text mining memerlukan beberapa tahap awal yang pada intinya adalah mempersiapkan agar teks dapat diubah menjadi lebih terstruktur. Pada prinsipnya, text mining adalah bidang ilmu multidisipliner, melibatkan information retrieval (IR), text analysis, information extraction (IE), clustering, categorization, visualization, database technology, natural language processing (NLP), machine learning, dan data mining. Dapat pula dikatakan bahwa text mining merupakan salah satu bentuk aplikasi kecerdasan buatan (atau artificial intelligence / AI). Text mining mencoba memecahkan masalah information overload dengan menggunakan teknik-teknik dari bidang ilmu yang terkait. Text mining dapat dipandang sebagai suatu perluasan dari data mining atau knowledge-discovery in database (KDD), yang mencoba untuk menemukan pola-pola menarik dari basis data berskala besar. Namun text mining memiliki potensi komersil yang lebih tinggi dibandingkan dengan data mining, karena kebanyakan format alami dari penyimpanan informasi adalah berupa teks. Text mining menggunakan informasi teks tak terstruktur dan mengujinya dalam upaya mengungkap struktur dan arti yang “tersembunyi” didalam teks. Perbedaan mendasar antara text mining dan data mining terletak pada sumber data yang digunakan. Pada data mining, pola-pola diekstraki dari basis data yang terstruktur, sedangkan di text mining, pola-pola diekstraki dari data tekstual (natural language). Secara umum, basis data didesain untuk program dengan tujuan
12
melakukan pemrosesan secara otomatis, sedangkan teks ditulis untuk dibaca langsung oleh manusia. Bagaimanapun juga, tugas dalam text mining jauh lebih kompleks dibandingkan dengan data mining, karena melibatkan data teks yang sifatnya tidak terstruktur dan tidak jelas (fuzzy).
2.3.2 Tahapan dalam Teks Mining Ada beberapa tahapan dalam teks mining yaitu: CASE FOLDING TOKENIZING FILTERING STEMMING ANALYZING Gambar 2.1 Tahap preprocessing
a. Tahap Case folding Tahap case folding adalah tahap mengubah semua huruf dalam dokumen menjadi huruf kecil hanya huruf a sampai z yang di terima. Contoh tahap case folding adalah Berkebun adalah hobi yang sangat menyenangkan dan bermanfaat
berkebun adalah hobi yang sangat menyenangkan dan bermanfaat
Gambar 2.2 Tahap case folding b. Tahap tokenizing Pada dasarnya proses Tokenizing yaitu proses memisahkan setiap kata yang menyusun suatu dokumen. Pengertian Tokenizing itu sendiri adalah proses pemotongan input berdasarkan tiap kata yang menyusunnya. Umumnya setiap kata
13
teridentifikasi atau terpisahkan dengan kata lain oleh karakter spasi, sehingga proses Tokenizing mengandalkan karakter spasi pada dokumen untuk melakukan pemisahan kata. Karakter spasi dan titik digunakan sebagai Delimiter yang berfungsi untuk memisahkan kata perkata dan kalimat perkalimat.
Contoh tahap
tokenizing adalah: berkebun adalah hobi yang sangat menyenangkan dan bermanfaat (Teks Input)
berkebun adalah Hobi yang sangat menyenangka n dan bermanfaat (Hasil Token)
Gambar 2.3 Tahap Tokenizing c. Tahap filtering Tahap Filtering adalah tahap pengambilan kata yang penting dari hasil Tokenizing. Tahap Filtering ini dapat menggunakan algoritma stoplist. Stoplist yaitu menyaring terhadap kata-kata yang tidak layak untuk dijadikan pembeda dari kata kunci sehingga kata-kata tersebut dapat dihilangkan. Kata-kata hasil dari Tokenizing akan dicocokan dengan kata dari stoplist. Apabila kata tersebut sama dengan kata yang ada dalam tabel stoplist maka akan di hilangkan. Berkebun adalah Hobi yang sangat menyenangkan dan bermanfaat
Berkebun Hobi Menyenangkan bermanfaat
(Hasil Token)
Gambar 2.4 Tahap filtering
(Hasil Filter)
14
d. Tahap stemming Stemming adalah proses mengubah kata menjadi kata dasarnya dengan menghilangkan imbuhan imbuhan pada kata dalam dokumen. Stem (akar kata) adalah bagian dari kata yang tersisa setelah dihilangkan imbuhanya (awalan atau akhiran). Dalam tahap stemming diperlukan suatu algoritma yaitu Nazief dan Andriani. Algoritma ini mengacu pada aturan morfologi bahasa Indonesia yang mengelompokan imbuhan, yaitu imbuhan yang diperbolehkan atau imbuhan yang tidak diperbolehkan. Pengelompokan ini termaksud imbuhan di depan (awalan), imbuhan dibelakang (akhiran) atau imbuhan ditengah kata (sisipan) dan kombinasi imbuhan pada awal dan akhir kata (konfliks). Algoritma ini menggunakan kamus kata keterangan yang digunakan untuk mengetahui bahwa proses stemming telah mendapatkan kata dasar. Contoh dari tahap ini adalah:
]][polp Berkebun Hobi Menyenangkan bermanfaat
Kebun Hobi Senang manfaat
(Hasil Filter)
(Hasil Stemminng)
Gambar 2.5 Tahap Stemming e. Tahap Sorting Sorting teks digunakan untuk mengurutkan kata hasil dari stemming secara ascending atau menaik sehingga pencocokan string dokumen dilakukan pada data yang sudah terurut. Interface ini akan menjaga elemen dalam koleksi terurut. Contoh dari sorting teks adalah : Kebun Hobi Senang manfaat
Hobi Kebun manfaat Senang
(Hasil Stemminng)
(Hasil Sorting)
Gambar 2.6 Tahap Sorting
15
f. Tahap analyzing Tahap analyzing merupakan tahap penentuan seberapa jauh
keterhubungan
antar kata-kata antar dokumen yang ada (Harlian, 2010).
2.4 Metode Leveinstein Distance 2.4.1 Pengertian metode Leveinstein Distance Levenshtein Distance dibuat oleh Vladimir Levenshtein pada tahun 1965. Perhitungan edit distance didapatkan dari matriks yang digunakan untuk menghitung jumlah perbedaan string antara dua string. Perhitungan jarak antara dua string ini ditentukan dari jumlah minimum operasi perubahan untuk membuat string A menjadi string B dengan menggunakan 3 macam operasi utama yaitu: (1) operasi penyisipan (insertion), (2) operasi penghapusan (deletion),(3) operasi penggatian (subtitution) (Andriyani, 2010).
2.4.2 Mekanisme Levenshtein Distance Ada 3 macam operasi utama yang dapat dilakukan oleh algoritma ini yaitu : 1. Operasi Pengubahan Karakter Operasi pengubahan karakter merupakan operasi menukar sebuah karakter dengan karakter lain contohnya penulis menuliskan string “yamg” menjadi “yang”. Dalam kasus ini karakter “m” diganti dengan huruf “n”. 2. Operasi Penambahan Karakter Operasi penambahan karakter berarti menambahkan karakter ke dalam suatu string. Contohnya string “kepad” menjadi string “kepada”, dilakukan penambahan karakter “a” di akhir string. Penambahan karakter tidak hanya dilakukan diakhir kata, namun bisa ditambahkan diawal maupun disisipkan ditengah string . 3. Operasi Penghapusan Karakter Operasi penghapusan karakter dilakukan untuk menghilangkan karakter dari suatu string. Contohnya string “barur” karakter terakhir dihilangkan sehingga menjadi string “baru”. Pada operasi ini dilakukan penghapusan karakter “r” (Andriyani, 2010).
16
Algoritma ini berjalan mulai dari pojok kiri atas sebuah array dua dimensi yang telah diisi sejumlah karakter sring awal dan string target dan diberikan nilai cost. Nilai cost pada ujung kanan bawah menjadi nilai edit distance yang menggambarkan jumlah perbedaan dua string. 0, 0 = 0
( , 0) =
(0, ) = (, )=
− 1,
{
(2.1)
+ 1,
, − 1 + 1,
( − 1, − 1) + 1 2.5 Pengukuran Nilai Similarity Setelah mendapatkan biaya edit-distance maka untuk menghitung nilai Levenshtein Distance atau perhitungan similarity menggunakan Persamaan berikut: Plagiarized Value = 1 −
,
∗ 100
(2.2)
CS = Source String ST = Target String Similarity = Nilai kemiripan Diff = Jarak Levenshtein Max(CS.ST)= Nilai string terpanjang (Nafik, 2013).
2.6 Algoritma Nazief dan Adriani Algoritma Nazief dan Andriani merupakan sebuah algoritma untuk mencari sebuah kata dasar atau lebih dikena dengan istilah stemming. Proses stemming antara satu bahasa tidak sama dengan proses stemming dengan bahasa lain, dengan kata lain algoritma stemming untuk bahasa indonesia tidak dapat digunakan untuk proses stemming bahasa inggris atau bahasa lainnya karena masing-masing bahasa mempunyai struktur morfologi yang berbeda. Algoritma Nazief dan Adriani adalah algoritma stemming yang digunakan khusus untuk bahasa indonesia, walaupun ada
17
banyak algoritma stemming lainnya untuk bahasa indonesia, akan tetapi Nazief dan Adriani lebih banyak digunakan oleh para praktisi maupun para pegiat akademik, karena memang sampai saat ini Nazief dan Adriani mempunyai akurat yang baik jika dibandingkan dengan yang lainnya. Konjungsi dalam Algoritma stemming Nazief dan Adriani dikembangkan berdasarkan aturan morfologi Bahasa Indonesia yang mengelompokkan imbuhan menjadi awalan (prefix), sisipan (infix), akhiran (suffix) dan gabungan awalan akhiran (confixes). Berikut tabel awalan dan akhiran dalam bahasa Indonesia. Tabel 2.1 Awalan dan Akhiran dalam bahasa Indonesia Awalan BerBelTerMeMengMenyMemMenMengediKeKuPePengPemPenPengPenyPengePerSe-
Akhiran -an -i -kan -ku -mu -nya -kah -lah -tah -pun
Algoritma ini menggunakan kamus kata dasar dan mendukung recoding, yakni penyusunan kembali kata-kata yang mengalami proses stemming berlebih. Aturan morfologi Bahasa Indonesia mengelompokkan imbuhan ke dalam beberapa kategori sebagai berikut:
18
1. Inflection suffixes yakni kelompok akhiran yang tidak merubah bentuk kata dasar. Sebagai contoh,
kata “duduk” yang diberikan akhiran “-lah” akan
menjadi “duduklah”. Kelompok ini dapat dibagi menjadi dua: a. Particle (P) atau partikel yakni termaksud di dalamnya “-lah”, “kah”, “tah” dan “pun”. b. Possessive pronoun (PP) atau kata genti kepunyaan, termaksud di dalamnya “-ku”,”-mu” dan “-nya”. 2. Derivation suffixes (DS) yakni kumpulan akhiran asli Bahasa Indonesia yang secara langsung ditambahkan pada kata dasar yaitu akhiran “-i”, “-kan”, dan “an”. 3. Derivation prefixes (DP) yakni kumpulan awalan yang dapat langsung diberikan pada kata dasar murni, atau pada kata dasar yang sudah mendapatkan penambahan sampai dengan 2 awalan. Termaksud di dalamnya adalah: a. Awalan yang dapat bermorfologi (“me-“, “be-“, “pe-“ dan “te”). b. Awalan yang tidak bermorfologi (“di-“, “ke-“ dan “se-“). Berdasarkan pengklasifikasi imbuhan-imbuhan di atas, maka bentuk kata berimbuhan dalam Bahasa Indonesia dapat dimodelkan sebagai berikut: [
+ [
+ [
]]]
[[+
][+
]
(2.3)
Keterangan : DP : Derivation prefixes DS : Derivation suffixes PP : Possessive pronoun Dengan model bahasa Indonesia diatas serta aturan-aturan dasar morfologi Bahasa Indonesia, aturan yang digunakan dalam proses algoritma Nazief & Adriani sebagai berikut: 1. Tidak semua kombinasi awalan dan akhiran diperbolehkan. Kombinasikombinasi imbuhan yang tidak diperbolehkan, yaitu “be-i”, “ke-i”, “ke-kan”, “me-an”, “se-i”, “se-kan” dan “te-an”. 2. Penggunaan imbuhan yang sama secara berulang tidak diperkenankan.
19
3. Jika suatu kata hanya terdiri dari satu atau dua huruf, maka proses tidak dilakukan. 4. Penambahan suatu awalan tertentu dapat mengubah bentuk asli kata dasar, ataupun awalan yang telah diberikan sebelumnya pada kata dasar bersangkutan. Sebagai contoh, awalan “me-“ dapat berubah menjadi “meng-“, “men-“, “meny“, dan “mem-“. Oleh karena itu diperlukan suatu aturan yang mampu mengatasi masalah morfologi ini. Algoritma Nazief & Adriani memiliki tahap-tahap sebagai berikut: 1. Cari kata dalam kamus jika ditemukan maka diasumsikan bahwa kata tersebut adalah kata dasar. Algoritma berhenti. Jika tidak ditemukan maka lakukan langkah 2. 2. Hilangkan inflectional suffixes bila ada. Dimulai dari inflectional particle (“lah”, “-kah”, “-tah” dan “-pun”), kemudian possessive pronoun (“-ku”, “-mu” dan “-nya”). Cari kata pada kamus jika ditemukan algoritma berhenti, jika kata tidak ditemukan dalam kamus lakukan langkah 3. 3. Hilangkan derivation suffixes (“-an”, “-i” dan “-kan”). Jika akhiran “-an” dihapus dan ditemukan akhiran “-k”, maka akhiran “-k” dihapus. Cari kata pada kamus jika ditemukan algoritma berhenti, jika kata tidak tidak ditemukan maka lakukan langkah 4. 4. Pada langkah 4 terdapat tiga iterasi. a. Iterasi berhenti jika : 1) Ditemukannya kombinasi awalan yang tidak diizikan berdasarkan awalan. Tabel 2.2 Awalan dan Akhiran yang tak diizinkan Awalan
Akhiran yang tidak diizinkan
be-
-i
di-
-an
ke-
-i, -kan
me-
-an
se-
-i, -kan
20
2) Awalan yang dideteksi saat ini sama dengan awalan yang dihilangkan sebelumnya. 3) Tiga awalan telah dihilangkan. b. Identifikasikasikan tipe awalan dan hilangkan. Awalan terdiri dari dua tipe: 1) Standar (“di-“, “ke-“, “se-”) yang dapat langsung dihilangkan dari kata. 2) Kompleks (“me-“, “be-“, “pe-“, “te”) adalah tipe-tipe awalan yang dapat bermorfologi sesuai
kata dasar yang mengikutinya. Oleh karena itu
dibutuhkan aturan pada tabel 2.3 untuk mendapatkan hasil pemenggalan yang tepat. Tabel 2.3 Aturan Pemenggalan Awalan Aturan
Format Kata
Pemenggalan
1
berV…
ber-V … | be-rV
2
berCAP…
ber-CAP… dimana C != ‘r’ & P != ‘er’
3
berCAerV
ber-CaerV… dimana C != ‘r’
4
Belajar
bel-ajar
5
berC1erC2…
be-C1erC2… dimana C1 != ‘r’ | ‘l’
6
terV…
ter-V… | te-rV…
7
terCerV…
ter-CerV dimana C != ‘r’
8
terCP…
Ter-CP… dimana C!=’r’ dan P !=’er’
9
teC1erC2…
Te-C1erC2… dimana C1 != ‘r’
10
me{l|r|w|y}V…
me – {l|r|w|y} V…
11
mem{b|f|v}…
mem-{b|f|v}…
12
Mempe
mem-pe…
13
mem{rV|V}…
me-m{rV|V}… | me-p{rV|V}
14
men{c|d|j|s|z}…
men-{c|d|js|z}…
15
menV…
me-nV… | me-tV
16
meng{g|h|q|k}…
meng-{g|h|q|k}…
17
mengV…
meng-V… | meng-kV…| mengV-... jika V=’e’
18
menyV…
meny-sV….
19
mempA…
mem-pA… dimana A != ‘e’
21
20
pe{w|y}V…
pe-{w|y}V…
21
perV…
per-V… | pe-rV…
23
perCAP…
per-CAP… dimana C != ‘r’ dan P != ‘er’
24
perCAerV…
per-CAerV… dimana C != ‘r’
25
pem{b|f|V}…
pem-{b|f|V}…
26
pem{rV|V}…
pe-m{rV|V}… | pe-p{rV|V}…
27
pen{c|d|j|z}…
pen-{c|d|j|z}…
28
penV…
pe-nV… | pe-tV…
29
pengC…
peng-C…
30
pengV…
Peng-V… | peng-kV… | pengV-... jika V=’e’
31
penyV…
peny-sV…
32
pelV…
pe-lV… kecuali “pelajar” yang menghasilkan “ajar”
33
peCerV…
Per-erV … dimana C!= {r|w|y|l|m|n}
34
peCP
Pe-CP… dimana C!={r|w|y|l|m|n}dan P!= ‘er’
35
terC1erC2...
ter-C1erC2... dimana C1!= ‘r’
36
peC1erC2...
pe-C1erC2... dimana C1!={r|w|y|l|m|n}
Keterangan simbol huruf C : huruf konsonan V : huruf vocal A : huruf vocal atau konsonan P : partikel atau fragmen dari setiap kata, misalnya “er” c. Cari kata yang telah dihilangkan awalannya. Apabila tidak ditemukan, maka langkah 4 diulang kembali. Apabila ditemukan, maka algoritma berhenti. 5. Apabila setelah langkah 4 kata dasar masih belum ditemukan, maka proses recording dilakukan dengan mengacu pada aturan tabel 2.3. Recording dilakukan dengan menambahkan karakter recording di awal kata yang dipenggal. Pada tabel 2.3, karakter recording adalah huruf kecil setelah tanda hubung (‘-‘) dan terkadang berada sebelum tanda kurung. Sebagai contoh, kata “menangkap” (aturan 15) pada tabel 2.3, setelah dipenggal menjadi “nangkap”.
22
Karena tidak valid, maka recording dilakukan dan menghasilkan kata “tangkap”. 6. Jika semua langkah gagal, maka input kata yang diuji pada algoritma ini dianggap sebagai kata dasar. Berikut contoh-contoh aturan yang terdapat pada awalan sebagai pembentuk kata dasar. 1. Awalan SESe + semua konsonan dan vokal tetap tidak berubah Contoh :
Se + bungkus = sebungkus
Se + nasib = senasib
Se + arah
= searah
Se + ekor
= seekor
2. Awalan MEMe + vokal (a,i,u,e,o) menjadi sengau “meng” Contoh :
Me + inap = menginap
Me + asuh = mengasuh
Me + ubah = mengubah
Me + ekor = mengekor
Me + oplos = mengoplos
Me + konsonan b menjadi “mem” Contoh :
Me + beri = member
Me + besuk = membesuk
Me + konsonan s menjadi “meny” (luluh) Contoh :
Me + sapu = menyapu
Me + satu = menyatu
Me + konsonan t menjadi “men” (luluh) Contoh :
23
Me + tanama = menanam
Me + tukar = menukar
Me + konsonan (l,m,n,r,w) menjadi tetap “me” Contoh :
Me + lempar = melempar
Me + masak = memasak
Me + naik = menaik
Me + rawat = merawat
Me + warna = mewarna
3. Awalan KEKe + semua konsonan dan vokal tetap tidak berubah Contoh :
Ke + bawa = kebawa
Ke + atas = keatas
4. Awalan PEPe + konsonan (h,g,k) dan vokal menjadi “per” Contoh :
Pe + hitung + an = perhitungan
Pe + gelar + an = pergelaran
Pe + kantor + = perkantoran
Pe + konsonan “t” menjadi “pen” (luluh)
Contoh : Pe + tukar = penukar
Pe + tikam = penikam
Pe + konsonan (j,d,c,z) menjadi “pen” Contoh :
Pe + jahit = penjahit
Pe + didik = pendidik
Pe + cuci = pencuci
Pe + zina = penzina
Pe + konsonan (b,f,v) menjadi “pem”
24
Contoh :
Pe + beri = pemberi
Pe + bunuh = pembunuh
Pe + konsonan “p” menjadi “pem” (luluh) Contoh :
Pe + piker = pemikir
Pe + potong = pemotong
Pe + konsonan “s” menjadi “peny” (luluh) Contoh :
Pe + siram = penyiram
Pe + sabar = penyabar
Pe + konsonan (l,m,n,r,w,y) tetap tidak berubah Contoh :
Pe + lamar = pelamar
Pe + makan = pemakan
Pe + nanti = penanti
Pe + wangi = pewangi
2.7 Unified Modeling Languange (UML) UML (Unified Modeling Languange) adalah ‘bahasa’ pemodelan untuk sistem atau perangkat lunak yang berparadigma ‘berorientasi objek’. Pemodelan (modeling)
sesungguhnya
digunakan
untuk
penyederhanaan
permasalahan-
permasalahan yang kompleks sedemikian rupa sehingga lebih mudah dipelajari dan dipahami (Nugroho, 2010 ). UML adalah sekumpulan simbol dan diagram untuk memodelkan software. Dengan menggunakan UML, desain software dapat diwujudkan dalam bentuk simbol, dan diagram. Desain dalam bentuk simbol dan diagram. Kemudian dapat diterjemahkan menjadi kode program (Azis, 2005). Diagram-diagram dalam UML sebagai berikut (Rosa, 2011):
25
1. Use Case Diagram Use case atau diagram use case merupakan pemodelan untuk kelakuan (behavior) sistem informasi yang akan dibuat. Use case mendeskripsikan sebuah interaksi antara satu atau lebih aktor dengan sistem informasi yang akan dibuat. Tabel 2.4 Simbol-simbol pada Use case Diagram Simbol Use Case
Deskripsi Fungsionalitas
yang
disediakan
sistem sebagai unit-unit yang saling bertukar pesan antar unit atau aktor, biasanya
dinyatakan
dengan
menggunakan kerja diawal fase nama use case. Aktor/ Actor
Orang, proses, atau sistem lain yang berinteraksi dengan sistem informasi yang akan dibuat di luar sistem informasi
yang akan dibuat itu
sendiri, jadi walaupun simbol dari aktor adalah gambar dari orang , tapi aktor belum tentu merupakan orang; biasanya dinyatakan menggunakan kata benda di awal frase nama aktor. Asosiasi / Association
Komunikasi antara aktor dan use case yang berpartisipasi pada use case atau use case memiliki interaksi dengan aktor.
Ekstensi/ Extend <<extend>>
Relasi use case tambahan ke sebuah use case dimana use case yang ditambahkan dapat berdiri sendiri walau tanpa use case tambahan itu; mirip dengan prinsip inheritance pada pemograman berorientasi objek;
26
biasanya use case tambahan memiliki nama depan yang sama dengan use case yang ditambahkan. Generalisasi/ Generalization
Hubungan
generalisasi
dan
spesialisasi (umum-khusus) antara dua buah use case dimana fungsi yang satu adalah fungsi yang lebih umum dari lainnya. Menggunakan / Include/ Uses <
> <<uses>>
Relasi Use case tambahan ke sebuah use case dimana use case yang ditambahkan memerlukan use case ini untuk menjalankan fungsinya atau sebagai syarat dijalankan use case ini.
2. Activity Diagram Diagram aktivitas atau activity diagram menggambarkan workflow (aliran kerja) atau aktivitas dari sebuah sistem atau proses bisnis. Yang perlu diperhatikan disini adalah bahwa diagram aktivitas menggambarkan aktivitas sistem bukan apa yang dilakukan aktor, jadi aktivitas yang dapat dilakukan oleh sistem ditunjukan pada Tabel 2.5 Tabel 2.5 Simbol-simbol pada Activity Diagram Simbol Status awal
Deskripsi Status awal aktivitas sistem, sebuah diagram aktivitas memiliki sebuah status awal.
Aktivitas
Aktivitas yang dilakukan sistem, aktivitas
aktivitas biasanya diawali dengan kata kerja.
percabangan
Asosiasi percabangan dimana jika ada pilihan aktivitas lebih dari satu.
27
Penggabungan/ join
Asosiasi penggabungan dimana lebih dari
satu
aktivitas
digabungkan
menjadi satu. Status akhir
Status akhir yang dilakukan sistem, sebuah diagram aktivitas memiliki sebuah status akhir.
3. Sequence Diagram Sequence diagram
menggambarkan kelakuan objek pada use case dengan
mendeskripsikan waktu hidup objek dan message yang dikirimkan dan diterima antar objek. Oleh karena itu untuk menggambar sequence diagram maka harus diketahui objek-objek yang terlibat dalam sebuah use case beserta metode-metode yang dimiliki kelas yang diinstansiasi menjadi objek itu seperti yang ditujukan pada Tabel 2.6 Tabel 2.6 Simbol-simbol pada Sequence Diagram Simbol Aktor
Deskripsi Orang, proses, atau sistem lain yang berinteraksi dengan sistem informasi yang akan dibuat di luar sistem informasi yang akan dibuat itu sendiri, jadi
nama_aktor
walaupun simbol dari aktor adalah gambar dari orang, tapi aktor belum tentu
atau nama aktor
merupakan orang; biasanya dinyatakan menggunakan kata benda di awal frase
tanpa waktu aktif
nama aktor.
Garis hidup/ Lifeline
Menyatakan kehidupan suatu objek
Objek
Menyatakan objek yang berinteraksi
Nama objek : nama kelas
pesan.
28
Waktu aktif
Menyatakan objek dalam keadaan aktif dan berinteraksi pesan.
Pesan tipe create <>
Menyatakan suatu objek membuat objek yang lain, arah panah mengarah pada objek yang dibuat.
Pesan tipe call 1: nama_metode()
Menyatakan suatu objek memanggil operasi/ metode yang ada pada objek lain atau dirinya sendiri
1: nama_metode() Arah panah mengarah pada objek yang memiliki operasi/ metode, karena ini memanggil
operasi/metode
yang
dipanggil harus ada pada diagram kelas sesuai
dengan
kelas
objek
yang
berinteraksi. Pesan tipe send
Menyatakan
bahwa
suatu
objek
mengirimkan data/ masukkan/ informasi 1:masukkan
ke objek lainnya, arah panah mengarah pada objek yang dikirim.
Pesan tipe return
Menyatakan bahwa suatu objek yang telah menjalankan suatu operasi atau
1: keluaran
metode menghasilkan suatu kembalian ke objek tertentu, arah panah mengarah pada objek yang menerima kembalian.
Pesan tipe destroy <<destroy>>
Menyatakan suatu objek mengakhiri hidup objek yang lain, arah panah mengarah pada objek yang diakhiri, sebaiknya jika ada create maka ada destroy.
29
4. Class diagram Class Diagram menggambarkan struktur sistem dari segi pendefinisian kelaskelas yang akan dibuat untuk membangun sistem. Kelas memiliki apa yang disebut atribut dan metode atau operasi. - Atribut merupakan variabel-variabel yang dimiliki oleh suatu kelas. - Operasi atau metode adalah fungsi-fungsi yang dimiliki oleh suatu kelas. Tabel 2.7 Simbol-simbol pada Class Diagram Simbol Kelas
nama_kelas
Deskripsi Kelas pada struktur sistem
+atribut +operasi()
Antarmuka /interface
Sama dengan konsep interface dalam pemograman berorientasi objek.
nama_interface Asosiasi/ Association
Relasi antar kelas dengan makna umum, asosiasi biasanya juga disertai dengan multiplicity. Relasi antar kelas dengan makna kelas yang satu digunakan oleh kelas yang lain, asosiasi biasanya juga disertai dengan
Generalisasi
Relasi
antar
kelas
dengan
makna
generalisasi-spesialisasi (umum khusus). Kebergantungan/ Dependency
Relasi
antar
kelas
dengan
makna
kebergantungan antar kelas. Agregasi/ Aggregation
Relasi antar kelas dengan makna semuabagian (whole-part).
30
5. Entity Relationship Diagram (ERD) Menurut Rosa A.S dan M. Shalahuddin Entity Relationship Diagram (ERD) dikembangkan berdasarkan teori matematika. ERD adalah
bentuk paling awal
dalam melakukan perancangan basis data relasional. Tabel 2.8 Simbol-simbol pada ERD Simbol Entitas/ Entity nama_entitas Atribut
Deskripsi Entitas merupakan data inti yang akan disimpan; bakal tabel dalam basis data.
Field nama_atribut
Atribut kunci primer
atau kolom data yang butuh
disimpan dalam suatu entitas.
Field atau kolom data yang butuh disimpan
nama_kunci primer
dalam suatu entitas dan digunakan sebagai kunci akses record yang diinginkan; biasanya berupa id.
Relasi
Relasi yang menghubugkan antar entitas; nama_rela si
biasanya diawali dengan kata kerja.
2.8 Flowchart Algoritma merupakan suatu alur pemikiran seseorang yang harus dapat dituangkan secara tertulis. Salah satu caranya adalah dengan menggunakan simbolsimbol yang memang sudah standar pada dunia komputer. Simbol itu disebut dengan flowchart (Antonius, 2010). Dengan menggunakan flowchart (diagram alir) maka seseorang programmer dapat memberikan idenya secara tertulis sehingga dapat dipahami oleh programmer lain, oleh klien, atau oleh tim kerjanya. Flowchart merupakan alur pemikiran yang dituangkan ke dalam bentuk simbol. Dengan demikian perlu dipelajari terlebih dahulu bentuk-bentuk simbol
31
standar beserta kegunaan masing-masing. Berikut adalah tabel simbol-simbol flowchart : Tabel 2.9 Simbol flowchart Deskripsi
Simbol
Mulai
Start
Selesai
Finish
Aliran data
Proses / kejadian
X=y+z
X>2
Percabangan
Input
Masukan data
Tampilkan data
Output
Memanggil suatu fungsi/prosedur
Faktorial (5)
Konektor di halaman yang sama
A
32
Konektor di halaman yang berbeda
B
2.9 Metode Pengembangan Perangkat Lunak Metode Waterfall merupakan
metode
yang
sering
digunakan
oleh
penganalisa sistem pada umumnya. Waterfall air terjun sering juga disebut sekuensial linier atau alur hidup klasik. Model air terjun menyediakan pendekatan alur hidup perangkat lunak secara sekuensial atau terurut mulai dari analisis kebutuhan, desain sistem, pengodean, pengujian, dan tahapan pendukung (support). Berikut adalah model gambar metode waterfall (Rosa dan Shalahuddin, 2013). Analisa Kebutuhan Desain Sistem
Penulisan Kode Program
Pengujian Program Penerapan Program dan Pemelihaaan
Gambar 2.7 Tahap-tahap metode Waterfall (Rosa dan Shalahuddin, 2013)
1. Analisa Kebutuhan Langkah ini merupakan analisa terhadap kebutuhan sistem. Pengumpulan data dalam tahap ini bisa melakukan sebuah penelitian, wawancara atau studi literatur. Sistem analis akan menggali informasi sebanyak-banyaknya dari user sehingga akan tercipta sebuah sistem komputer yang bisa melakukan tugastugas yang diinginkan oleh user tersebut. Tahapan ini akan menghasilkan dokumen user requirment atau bisa dikatakan sebagai data yang berhubungan
33
dengan keinginan user dalam pembuatan sistem. Dokumen ini lah yang akan menjadi acuan sistem analis untuk menerjemahkan ke dalam bahasa pemrogram.
2. Desain Sistem Tahapan dimana dilakukan penuangan pikiran dan perancangan sistem terhadap solusi dari permasalahan yang ada dengan menggunakan perangkat pemodelan sistem seperti diagram alur data (data flow diagram), diagram hubungan entitas (entity relationship diagram) serta struktur dan bahasan data.
3. Penulisan Kode Program Penulisan kode program atau coding merupakan penerjemahan design dalam bahasa yang bisa dikenali oleh komputer. Dilakukan oleh programmer yang akan meterjemahkan transaksi yang diminta oleh user. Tahapan ini lah yang merupakan tahapan secara nyata dalam mengerjakan suatu sistem. Dalam artian penggunaan komputer akan dimaksimalkan dalam tahapan ini. Setelah pengkodean selesai maka akan dilakukan testing terhadap sistem yang telah dibuat tadi. Tujuan testing adalah menemukan kesalahan-kesalahan terhadap sistem tersebut dan kemudian bisa diperbaiki.
4. Pengujian Program Tahapan
akhir dimana sistem
yang baru
diuji
kemampuan dan
keefektifannya sehingga didapatkan kekurangan dan kelemahan sistem yang kemudian dilakukan pengkajian ulang dan perbaikan terhadap aplikasi menjadi lebih baik dan sempurna.
5. Penerapan Program dan Pemeliharaan Perangkat lunak yang sudah disampaikan kepada pelanggan pasti akan mengalami perubahan. Perubahan tersebut bisa karena mengalami kesalahan karena perangkat lunak harus menyesuaikan dengan lingkungan (periperal atau sistem operasi baru) baru, atau karena pelanggan membutuhkan perkembangan fungsional.
34
2.10
MySQL MySQL merupakan open source SQL database yang sangat populer yang
disediakan oleh MySQL AB. MySQL adalah Relational Databse Managemet System (RDBMS) yang didistribusikan secara gratis. MySQL sebenarnya merupakan turunan salah satu konsep utama dalam database sejak lama, yaitu SQL (Structure Query Languange). SQL adalah sebuah konsep pengoprasian database, terutama untuk pemilihan atau seleksi dan pemasukkan data, yang memungkinkan pengoprasian data dikerjakan degan mudah secara otomatis (Miftahul, 2010). 2.9.1 Kelebihan MySQL Sebagai server database dengan konsep databse modern, MySQL memiliki banyak kelebihan. Beberapa kelebihan yang dimiliki MySQL sebagai berikut 1. Portability Databse MySQL berfungsi dengan stabil tanpa kendala, berarti berlaku pada berbagai sistem operasi seperti Windows, Linux, FreeBSD, Mac OS X Server, Solaris dan lain-lain. 2. Open Source MySQl merupakan basis data open source (gratis), yang digunakan tanpa harus membayar. 3. Multiuser MySQL merupakan basis data yang dapat digunakan untuk menangani beberapa user dalam waktu bersamaan tanpa mengalami masalah atau konflik. Basis data server juga memungkinkan MySQL dapat diakses client secara bersamaan. 4. Performance Tuning MySQL mempunyai kecepatan yang cukup baik dalam menangani query-query sederhana, serta mampu memproses lebih banyak SQL per satuan waktu. 5. Column Type Databse MySQL didukung dengann tipe data yang sangat kompleks, seperti signed/unsigned integer, float, double, char, varchar, text, blob, data, time, datetime, timestamp, year, set serta enum. 6. Command dan Function MySQL server operator dan fungsi s ecara penuh yang mendukung perintah
35
select dan where dalam query. 7. Security Sistem security pada MySQL mempunyai beberapa lapisan sekuritas seperti level subnetmask, nama host, dan izin akses user dengan sistem perizinan yang mendetail serta password terenkripsi. 8. Scalability dan limits MySQL mempunyai kemampuan menangani databse dalam skala cukup besar, dengan jumlah record lebih dari 50 juta dan 60 ribu tabel serta 5 miliar baris. Selain itu dapat menampung indeks sampai 32 indeks pada tiap tabelnya. 9. Connectivity Adanya
kemamampuan
MySQL
melakukan
koneksi
dengan
client
menggunakan protokol TCP/IP, Unix soket (Unix), atau Named Pipes (NT). 10. Localisation Adanya kemampuan dalam mendeteksi pesan kesalahan (error code)
pada
client menggunakan lebih dari dua puluh bahasa. 11. Interface MySQL memilki interface terhadap berbagai aplikasi dan bahasa pemograman menggunakan fungsi API (Application Programming Interface). 12. Client dan Tools Database MySQL dilengkapi berbagai tool yang dapat digunakan untuk administrasi database. 13. Strukture Table MySQL memiliki struktur tabel cukup baik serta cukup fleksibel, misalnya ketika menangani alter table. 2.9.2 Kelemahan MySQL Berikut beberapa kekurangan MySQL sebagai berikut (Aziz, 2010): 1. Adanya ‘feature-creep’ dimana MySQL berusaha untuk kompatibel dengan beberapa standar serta berusaha memenuhinya akan tetapi fitur-fitur tersebut belumlah lengkap dan berperilaku sesuai standar. 2.
Sisi security atau keamanan dari MySQL sepertinya terlalu sederhana bagi
sebuah SQL engine.
36
2.11
XAMPP XAMPP adalah perangkat lunak bebas, yang mendukung banyak sistem
operasi, merupakan kompilasi dari beberapa program. Fungsinya adalah sebagai server yang berdiri sendiri (localhost), yang terdiri atas program Apache HTTP Server, MySQL database, dan penerjemah bahasa yang ditulis dengan bahasa pemrograman PHP dan Perl. Nama XAMPP merupakan singkatan dari X (empat sistem operasi apapun), Apache, MySQL, PHP dan Perl. Program ini tersedia dalam GNU General Public License dan bebas, merupakan web server yang mudah digunakan yang dapat melayani tampilan halaman web yang dinamis. XAMPP adalah singkatan yang masing-masing hurufnya adalah: 1. X: Program ini dapat dijalankan dibanyak sistem operasi, seperti Windows, Linux, Mac OS, dan Solaris. 2. A: Apache, merupakan aplikasi web server. Tugas utama Apache adalah menghasilkan halaman web yang benar kepada user berdasarkan kode PHP yang dituliskan oleh pembuat halaman web. 3. M: MySQL, merupakan aplikasi database server. Perkembangannya disebut SQL yang merupakan kepanjangan dari Structured Query Language. SQL merupakan bahasa terstruktur yang digunakan untuk mengolah database. MySQL dapat digunakan untuk membuat dan mengelola database beserta isinya. Kita dapat memanfaatkan MySQL untuk menambahkan, mengubah, dan menghapus data yang berada dalam database. 4. P: PHP, bahasa pemrograman web. Bahasa pemrograman PHP merupakan bahasa pemrograman untuk membuat web yang bersifat server-side scripting. 5. P: Perl, bahasa pemrograman.
2.12
Pemrograman Java Java adalah bahasa pemrograman berorientasi objek yang dikembangkan
oleh Sun Microsystems sejak tahun 1991. Bahasa ini dikembangkan dengan model yang mirip dengan bahasa C++ dan Smalltalk, namun dirancang agar lebih mudah dipakai dan platform independent, yaitu dapat dijalankan di berbagai jenis sistem
37
operasi dan arsitektur komputer. Bahasa ini juga dirancang untuk pemrograman di Internet sehingga dirancang agar aman dan portabel. Beberapa keunggulan java yaitu java merupakan bahasa yang sederhana. Java dirancang agar mudah dipelajari dan digunakan secara efektif. Java tidak menyediakan fitur-fitur rumit bahasa pemrograman tingkat tinggi, serta banyak pekerjaan pemrograman yang mulanya harus dilakukan manual, sekarang digantikan dikerjakan Java secara otomatis seperti dealokasi memori (Didi, 2009). Berikut kode untuk HelloWorld.java: public class HelloWorld { public static void main(String[] args) { System.out.println("Apa Kabar Dunia?"); } } 2.13 Netbeans Netbeans adalah salah satu aplikasi IDE yang digunakan programmer untuk menulis, meng-compile, mencari kesalahan, dan menyebarkan program. Netbeans ditulis dalam bahasa java namun dapat juga mendukung bahasa pemrogramman lain. Adapun fitur-fitur pada netbeans yaitu: 1.
Smart code completion: mengusulkan nama variabel dari suatu tipe, melengkapi keyword, dan mengusulkan tipe parameter dari method
2.
Menggunakan code generator: dengan menggunakan fitur ini kita dapat meng-generate constructor, setter and getter method, dll.
3.
Error stripe: fitur yang menandai baris yang error dengan meng-higlight merah.
4.
Bookmarking: fitur yang digunakan untuk menandai baris yang suatu saat hendak kita modifikasi.
5.
Go to commands: fitur yang digunakan untuk jump ke deklarasi variable, source code atau file yang ada pada project yang sama.
38
Database yang didukung Netbeans a.
JDBC merupakan spesifikasi standar dari javasoft API yang memungkinkan program java untuk mengakses sistem database manajemen.
b.
JDBC API terdiri dari satu set interface dan kelas yang ditulis dengan bahasa pemrogramman java.
c.
OJDBC
(oracle
java
database
conectivity)
adalah
driver
yang
menghubungkan program java dan oracle. d.
mysql-connector-java adalah driver yang menghubungkan program java dan oracle
e.
JDBC-ODBC
f.
mySQL-server
BAB III METODE PENELITIAN
3.1 Data yang digunakan Data yang digunakan dalam penelitian ini adalah dokumen yang berekstensi .docx, .txt, dan .pdf. Dokumen tersebut akan menjadi bahan untuk membandingkan kemiripan antar dokumen.
3.2 Metode Pengumpulan Data Beberapa metode yang digunakan dalam pembuatan sistem ini adalah a. Studi Literatur Pada tahap ini peneliti mengumpulkan informasi dan mempelajari materi serta sumber-sumber data yang diperlukan untuk membangun sistem yaitu metode Levenshtein Distance. b. Sampling Pada tahap ini peneliti membutuhkan suatu sampe data yang berekstensi .doc .txt atau .pdf yang akan dijadikan sebagai bahan uji coba pada aplikasi Pendeteksi kemiripan isi teks dokumen.
3.3 Prosedur Pengembangan Perangkat Lunak Metode pengembangan perangkat lunak yang digunakan dalam pembangunan sistem ini adalah metode Waterfall yang terdiri dari beberapa tahap, yaitu: a. Analisis Pada tahap analisis adalah tahap dimana peneliti menganalisis permasalahan yang ada yaitu kriteria-kriteria pemilihan laptop berdasarkan kebutuhan pembeli dan melakukan perhitungan. b. Desain Pada tahap desain merupakan tahap dimana peneliti merancang pembuatan tampilan awal atau interface dari aplikasi yang akan dibangun. Tampilan interfaceakan dirancang melalui data-data yang telah diperoleh pada saat tahap analisis.
39
40
c. Coding Pada tahap coding yaitu menerjemahkan aplikasi kedalam bahasa pemrograman yang telah ditentukan yaitu bahasa pemrograman Java. d. Test Merupakan tahap pengujian terhadap aplikasi yang telah dibuat menjadi suatu perangkat lunak yang siap pakai dengan tujuan untuk mengetahui apakah sistem yang dibuat sudah sesuai dengan yang diharapkan. e. Pemeliharaan Pada tahap pemeliharaan yaitu tahap dimana melakukan koreksi dari berbagai error yang tidak ditemukan pada tahap-tahap sebelumnya sehingga dilakukan perbaikan, agar dapat menghasilkan sistem yang lebih baik dari sebelumnya.
3.4
Waktu Penelitian Waktu pelaksanaan penelitian tugas akhir dilaksanakan mulai pada bulan juli
sampai dengan bulan desember. Rincian kegiatan dapat dilihat pada tabel Gannt Chart dibawah ini. Tabel 3.1 Gannt Chart waktu penelitian No
Uraian
1 1
Studi Literatur
2
Analisis
3
Desain
4
Pembuatan Program
5
Pengujian
6
Pemeliharaan
Waktu Bulan ke - 2 Bulan ke-3 Bulan ke - 4 Bulan ke - 5 Bulan ke–6 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
Bulan Ke - 1
2 3
BAB IV ANALISIS DAN PERANCANGAN SISTEM
4.1 Analisis Sistem 4.1.1 Analisis Kerja Sistem Lama Sistem yang sedang berjalan dalam mendeteksi kemiripan isi teks dokumen saat ini dilakukan secara manual, dimana kita harus memeriksa satu persatu kalimat demi kalimat dalam dokumen tersebut. Pendeteksian secara manual sebenarnya mempunyai tingkat akurasi yang tinggi, hal ini dikarenakan kemampuan manusia dalam memahami makna dan maksud dokumen sangat tinggi, serta gaya bahasa dari kata atau kalimat. Hanya saja, dapat membutuhkan waktu dan tenaga yang banyak jika mendeteksi dokumen yang sangat banyak sehingga menjadi tidak efektif didalam proses pengerjaanya.
4.1.2 Analisis Kerja Sistem Baru Sistem yang diusulkan dalam pedeteksi isi teks dokumen adalah sistem yang dilakukan secara otomatis. Aplikasi proses pendeteksi kemiripan isi teks dokumen yang diusulkan ini menggunakan metode Leveinstein Distance. Dokumen yang diperiksa dalam sistem ini adalah dokumen berekstensi .doc, .pdf dan .txt. User dapat memasukan dokumen asli dan dokumen pembanding yang akan dihitung tingkat kemiripan isi teks dokumen tersebut. Keluaran dari sistem ini adalah presentase tingkat kemiripan isi teks dokumen. Setelah user memasukan kedua dokumen yang akan menjadi pembanding maka sistem akan melakukan tahap preprocessing dan tahap pencocokan string.
4.2 Ilustrasi Metode Levenshtein Distance Terhadap Perancangan Aplikasi Sistem kemiripan isi teks dokumen ini adalah sistem yang akan mendeteksi dan memberikan hasil presentase dari kemiripan antara dokumen asli dan dokumen pembanding yang diuji coba. Secara garis besar sistem pendeteksi kemiripan isi teks dokumen dibangun oleh tiga tahapan utama yaitu preprocessing, tahap pencocokan string dan tahap penggukuran nilai similarity. Tahap preprocessing adalah tahap dimana dilakukan proses untuk mengurangi noise yang terdapat dalam dokumen. 41
42
Tahap preprocessing yang dilakukan dalam sistem ini adalah Case Folding, Tokenizing, Filtering, Stemming dan Sorting. Setelah tahap preprocessing maka tahap selanjutnya adalah pencocokan string menggunakan metode Levenshtein Distance untuk mencari nilai diff antara kedua dokumen. Tahap pengukuran nilai Similarity akan memberikan presentase nilai kemiripan antara dokumen asli dan dokumen pembanding. Gambar 4.1 adalah flowchart yang akan menjelaskan alur dari program. Mulai Memasukan Dokumen No Berhasil
Read File
End Yes
Preprocessing (Case Folding, Tokenizing, Filtering, Stemming, Sorting)
Pencocokan String menggunakan metode LD 1, 1, ,
1,
1
1
1,
1
Pengukuran nilai similarity 1
max
,
∗ 100
Hasil Kemiripan dan Waktu Proses
Selesai
Gambar 4.1 Flowchart program
43
4.2.1 Preprocessing Fungsi preprocessing pada program ini adalah untuk mendapatkan keyword yang akan digunakan sebagai pencocokan string atau perbandingan dokumen. Proses tersebut digambarkan dalam flowchart preprocessing. Mulai
Read file
Case Folding
Tokenizing
Filtering
Stemming
Sorting
Mulai Gambar 4.2 Flowchart preprocessing Pada tahap preprocessing ini akan dimasukan sebuah contoh kalimat yang akan mengambarkan tentang bagaimana sistem bekerja
1. Read File Pada tahap ini dokumen yang dimasukan akan dibaca karakter perkarakter. Sistem secara otomatis akan menghilangkan simbol-simbol yang akan terbaca sebagai spasi kosong. Dalam tahap ini juga mengubah semua huruf kapital menjadi huruf kecil. Dokumen yang dimasukan adalah
44
Dokumen Asli
Dokumen Pembanding
Jurusan Teknik informatika adalah jurusan dengan peminat terbanyak di fakultas teknik.
Tahun ini Teknik Informatika menjadi jurusan terbaik.
Gambar 4.3 Contoh Dokumen
Selesai
Gambar 4.4 Flowchart Read File 2. Case Folding Proses Case folding adalah tahap mengubah semua huruf dalam dokumen menjadi huruf kecil hanya huruf a sampai z yang diterima.
Selesai
Hasil proses case folding Dokumen Pembanding
Dokumen Asli jurusan teknik informatika adalah
tahun
jurusan
menjadi jurusan terbaik
dengan
peminat
ini
teknik
terbanyak di fakultas teknik
Gambar 4.5 Contoh Tahap Case Folding
informatika
45
3. Tokenizing Pada dasarnya proses Tokenizing yaitu proses memisahkan setiap kata yang menyusun suatu dokumen. Pengertian Tokenizing itu sendiri adalah proses pemotongan input berdasarkan tiap kata yang menyusunnya. Umumnya setiap kata teridentifikasi atau terpisahkan dengan kata lain oleh karakter spasi, sehingga proses Tokenizing mengandalkan karakter spasi pada dokumen untuk melakukan pemisahan kata. Karakter spasi dan titik digunakan sebagai Delimiter yang berfungsi untuk memisahkan kata perkata dan kalimat perkalimat.
Gambar 4.6
menjelaskan hasil proses tokenizing.
Dokumen Asli jurusan teknik informatika adalah jurusan dengan peminat terbanyak di fakultas teknik
Dokumen Pembanding tahun ini teknik informatika menjadi jurusan terbaik
Gambar 4.6 Contoh Tahap Tokenizing 4. Filtering Tahap Filtering adalah tahap pengambilan kata yang penting dari hasil Tokenizing. Tahap Filtering ini dapat menggunakan algoritma stoplist dan wordlist. Stoplist yaitu menyaring terhadap kata-kata yang tidak layak untuk dijadikan pembeda dari kata kunci sehingga kata-kata tersebut dapat dihilangkan. Kata-kata hasil dari Tokenizing akan dicocokan dengan tabel dari stoplist yang telah dibuat. Apabila kata tersebut sama dengan kata yang ada dalam tabel stoplist maka akan di hilangkan. Gambar 4.7 menjelaskan hasil tahap filtering.
46
Dokumen Asli jurusan teknik informatika jurusan peminat fakultas teknik
Dokumen Pembanding teknik informatika jurusan terbaik
Gambar 4.7 Contoh Tahap Filtering
5. Stemming Stemming adalah proses mengubah kata menjadi kata dasarnya dengan menghilangkan imbuhan imbuhan pada kata dalam dokumen. Dalam tahap stemming diperlukan suatu algoritma yaitu Nazief dan Andriani. Algoritma ini mengacu pada aturan morfologi bahasa Indonesia yang mengelompokan imbuhan, yaitu imbuhan yang diperbolehkan atau imbuhan yang tidak diperbolehkan. Pengelompokan ini termaksud imbuhan di depan (awalan), imbuhan di belakang (akhiran) atau imnuhan di tengah kata (sisipan) dan kombinasi imbuhan pada awal dan akhir kata (konfliks). Algoritma ini menggunakan kamus kata keterangan yang digunakan untuk mengetahui bahwa proses stemming telah mendapatkan kata dasar. Gambar 4.8 menjelaskan hasil tahap Stemming. Dokumen Asli jurus teknik informatika jurus minat fakultas teknik
Dokumen Pembanding teknik informatika jurus terbaik
Gambar 4.8 Contoh Tahap Stemming
47
6. Sorting Sorting teks digunakan untuk mengurutkan kata hasil dari stemming secara ascending atau menaik sehingga pencocokan string dokumen dilakukan pada data yang sudah terurut. Hasil tahap sorting adalah sebagai berikut: Dokumen Asli (dok_asli) : fakultasinformatikajurusjuruspeminatteknikteknik Dokumen Pembanding (dok_uji) : Informatikajurusteknikterbaik 4.2.2 Penerapan Metode Levenshtein Distance Setelah proses preprocessing tahap selanjutnya adalah menccocokan kedua string dari dokumen asli dan dokumen pembanding menggunakan metode Leveinstein Distance dengan persamaan 2.1 Dokumen Asli (dok_asli) : fakultasinformatikajurusjuruspeminatteknikteknik Dokumen Pembanding (dok_uji) : Informatikajurusteknikterbaik Proses perhitungan Levenshtein distance terlihat pada Tabel 4.1
Tabel 4.1 Matriks perhitungan metode Levenshtein Distance f
a
k
u
l
T
a
s
I
n
f
o
r
m
a
t
i
k
a
j
u
r
u
s
j
u
r
u
s
p
e
m
i
n
a
t
t
e
k
n
i
K
t
e
k
n
i
k
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
2
3
4
5
6
7
8
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
i
1
1
n
2
2
3
3
4
5
6
7
8
9
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
f
3
2
3
3
4
5
6
7
8
9
9
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
o
4
3
3
4
4
5
6
7
8
9
10
9
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
r
5
4
4
4
5
5
6
7
8
9
10
10
9
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
m
6
5
5
5
5
6
6
7
8
9
10
11
10
9
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
a
7
6
5
6
6
6
7
6
7
8
9
10
11
10
9
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
t
8
7
6
6
7
7
6
7
7
8
9
10
11
11
10
9
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
i
9
8
7
7
7
8
7
7
8
7
8
9
10
11
11
10
9
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
k
10
9
8
7
8
8
8
8
8
8
8
9
10
11
12
11
10
9
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
a
11
10
9
8
8
9
9
8
9
9
9
9
10
11
12
12
11
10
9
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
j
12
11
10
9
9
9
10
9
9
10
10
10
10
11
12
13
12
11
10
9
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
u
13
12
11
10
9
10
10
10
10
10
11
11
11
11
12
13
13
12
11
10
9
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
r
14
13
12
11
10
10
11
11
11
11
11
12
12
11
12
13
14
13
12
11
10
9
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
u
15
14
13
12
11
11
11
12
12
12
12
12
13
12
12
13
14
14
13
12
11
10
9
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
s
16
15
14
13
12
12
12
12
12
13
13
13
13
13
13
13
14
15
14
13
12
11
10
9
9
10
11
12
13
14
15
16
17
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
t
17
16
15
14
13
13
12
13
13
13
14
14
14
14
14
14
13
14
15
14
13
12
11
10
9
9
10
11
12
13
14
15
16
17
18
19
19
20
21
22
23
24
25
26
27
28
29
30
31
e
18
17
16
15
14
14
13
13
14
14
14
15
15
15
15
15
14
14
15
15
14
13
12
11
10
10
10
11
12
13
14
14
15
16
17
18
19
20
20
21
22
23
24
25
26
27
28
29
30
k
19
18
17
16
15
15
14
14
14
15
15
15
16
16
16
16
15
15
14
15
15
14
13
12
11
11
11
11
12
13
14
15
15
17
18
19
19
18
19
20
21
22
23
24
25
26
27
28
29
n
20
19
18
17
16
16
15
15
15
15
15
16
16
17
17
17
16
16
15
15
16
15
14
13
12
12
12
12
12
13
14
15
16
16
16
17
18
19
20
21
20
21
22
23
24
25
26
27
28
i
21
20
19
18
17
17
16
16
16
15
16
16
17
17
18
18
17
16
16
16
16
16
15
14
13
13
13
13
13
13
14
15
16
16
17
17
18
19
20
21
21
20
21
22
23
24
25
26
27
k
22
21
20
19
18
18
17
17
17
16
16
17
17
18
18
19
18
17
16
17
17
17
16
15
14
14
14
14
14
14
14
15
16
17
17
18
19
20
20
21
21
20
21
21
22
23
24
25
26
t
23
22
21
20
19
19
18
18
18
17
17
17
18
18
19
19
19
18
17
17
18
18
17
16
15
15
15
15
15
15
15
15
16
17
18
18
18
18
19
20
21
22
21
20
21
22
23
24
25
e
24
23
22
21
20
20
19
19
19
18
18
18
18
19
19
20
20
19
18
18
18
19
18
17
16
16
16
16
16
16
16
15
16
17
18
19
19
19
18
19
20
21
22
21
20
21
22
23
24
r
25
24
23
22
21
21
20
20
20
19
19
19
19
18
19
20
21
20
19
19
19
19
19
18
17
17
17
16
17
17
17
16
16
17
18
19
20
20
19
19
20
21
22
22
21
21
22
23
24
b
26
25
24
23
22
22
21
21
21
20
20
20
20
19
19
20
21
21
20
20
20
20
20
19
18
18
18
17
17
18
18
17
17
17
18
19
20
21
20
20
20
21
22
23
22
22
22
23
24
a
27
26
25
24
23
23
22
21
22
21
21
21
21
20
20
19
20
21
21
20
21
21
21
20
19
19
19
18
18
18
19
18
18
18
18
18
19
20
21
21
21
21
22
23
23
23
23
23
24
i
28
27
26
25
24
24
23
22
22
22
22
22
22
21
21
20
20
20
21
21
21
22
22
21
20
20
20
19
19
19
19
19
19
18
19
19
19
20
21
22
22
21
22
23
24
24
24
23
24
k
29
28
27
26
25
25
24
23
23
23
23
23
23
22
22
21
21
21
20
21
22
22
23
22
21
21
21
20
20
20
20
20
20
19
19
20
20
20
21
21
22
22
21
22
23
24
25
24
23
Keterangan:
Substring karakter awal sampai karekter akhir Nilai Matriks Nilai Diff
48
49
Dari hasil perhitungan menggunakan levenshtein distance maka jarak yang didapat dari kedua kalimat diatas adalah 23. 4.2.3 Penerapan Pengukuran Nilai Similarity Setelah mendapatkan distance atau jarak dari hasil perhitungan menggunakan levenshtein distance diatas, maka diperlukan perhitungan pengukuran nilai similarity untuk mengetahui berapa persen tingkat kemiripan dengan persamaan 2.2 dibawah ini: Dik : Diff = 23 Max(CS,ST) = 48 Penyelesaian : = 1
∗ 100
=
= 52.08 %
∗ 100
Maka nilai kesamaan dari kata di atas adalah 52.08 % 4.3 Perancangan Sistem 4.3.1 Use Case Diagram
Gambar 4.9 Diagram Use Case Pada Gambar 4.9 Diagram Use Case, pengguna dapat mengakses menu utama, membandingan dua dokumen, membandingkan dengan banyak dokumen, mengakses menu bantuan. 49
50
4.3.2 Diagram Activity a. Diagram Activity menu Bantuan Pada Gambar 4.10 diagram activity menu bantuan, user mengakses aplikasi, kemudian sistem menampilkan halaman utama, lalu user memilih menu bantuan, sistem kemudian menampilkan halaman menu bantuan.
Gambar 4.10 Diagram Activity Menu Bantuan
b. Diagram Activity menu Perbandingan Dua Dokumen Pada Gambar 4.11 diagram activity menu perbandingan dua dokumen, user dapat mengambil dua dokumen yang akan dibandingkan. Setelah user memilih
dokumen yang akan dibandingkan user dapat memilih stemming atau no stemming setelah itu user dapat memilih deteksi untuk mengetahui presentase dari hasil perbandingan dari kedua dokumen tersebut. Setelah melakukan deteksi user dapat mengkosongkan form dengan memilih clear dan melalukan pendeteksi dokumen lagi.
51
Gambar 4.11 Diagram Activity Perbandingan Dua Dokumen
c. Diagram Activity menu Perbandingan banyak Dokumen Pada menu perbandingan banyak dokumen user dapat memasukan dokumen yang akan dimasukan kedalam database, sebelum memasukan dokumen maka terlebih dahulu dilakukan deteksi dengan dokumen yang terdapat dalam database, apabila terdapat dokumen yang sama maka dokumen secara otomatis tidak akan masuk kedalam database.
52
Gambar 4.12 Diagram Activity Menu Perbandingan Banyak Dokumen
4.3.3 Diagram Sequence a. Diagram Sequence Perbandingan Banyak Dokumen Pada diagram Sequence menu perbandingan banyak dokumen user dapat memasukan dokumen kedalam database tetapi sebelum memasukan dokumen kedalam database maka dilakukan perbandingan terlebih dahulu dengan seluruh dokumen yang ada dalam database. Apabila tidak terdeteksi plagiat maka dokumen akan masuk dan apabila terdeteksi plagiat maka dokumen secara otomatis tidak akan masuk. Diagram sequence perbandingan banyak dokumen terdapat pada Gambar 4.13.
53
Gambar 4.13 Diagram Sequence Perbandingan Banyak Dokumen
b. Diagram Sequence Perbandingan Dua Dokumen Pada diagram Sequence dapat dilihat user memasukan dokumen kemudian sistem akan membaca dan akan menampilkan jumlah kalimat dan kata. User dapat memilih Stemming atau No Stemming dan kemudian memilih tombol deteksi. Setelah itu maka sistem akan melakukan proses Tokenizing, Filtering, dan melakukan proses stemming jika user memilih untuk dilakukan proses stemming atau no stemming. Proses berikutnya adalah sorting, kemudian sistem akan melakukan string maching dengan menggunakan metode Levenshtein Distance dan melakukan proses similarity sehingga akan keluar hasil presentase nilai similarity kesamaan dokumen dan waktu proses yang dibutuhkan. Diagram sequence perbandingan dua dokumen terdapat pada Gambar 4.14.
54
Gambar 4.14 Diagram Sequences menu Perbandingan 2 Dokumen
4.4.
Analisis Kebutuhan Sistem
4.4.1. Kebutuhan Data Masukan Untuk data masukan yang dibutuhkan dari sistem ini adalah dokumen yang berekstensi .doc, .txt, dan .pdf. Selanjutnya sistem akan menggunakan metode Levenshtein Distance dan Pengukuran Nilai Similarity untuk menghasilkan output.
4.4.2. Kebutuhan Data Keluaran Data keluaran dari sistem yang telah diproses untuk kemudian ditampilkan kepada pengguna sistem yaitu presentase nilai kemiripan dan kesimpulan dari hasil presentase apakah dokumen tersebut merupakan plagiat atau bukan.
55
4.5 Perancangan Interface Perancangan interface merupakan perancangan untuk melihat desain awal dari sebuah sistem. Berikut adalah perancangan sistem interface dari peracangan aplikasi pendeteksi kemiripan isi teks dokumen.
4.5.1 Desain Interface Halaman Perbandingan Dua Dokumen Berikut ini adalah gambar desain interface dari halaman perbandingan dua dokumen.
Gambar 4.16 Desain interface Menu Perbandingan Dua Dokumen Gambar 4.16 ini merupakan gambar dari halaman Perbandingan dua Dokumen. Pada menu ini user dapat memasukan dokumen asli dan dukumen pembanding. Kemudian dokumen yang dimasukan akan tampil pada kolom dan akan tampil info jumlah kalimat dan kata. User dapat memilih stemming atau no stemming dan memilih deteksi sehingga akan muncul nilai kemiripan dan waktu proses.
4.5.2 Desain Interface Halaman Perbandingan Banyak Dokumen Berikut ini adalah Gambar 4.17 desain interface dari halaman Perbandingan Banyak Dokumen
56
Gambar 4.17 Desain interface Menu Perbandingan Banyak Dokumen Pada desain perbandingan banyak dokumen user dapat memasukan dokumen kedalam tabel apabila dokumen tidak tersdeteksi plagiat maka dokumen akan masuk kedalam tabel, sedangkan dokumen yang terdeteksi plagiat dengan salah satu dari dokumen yang ada dalam tabel maka secara otomastis dokumen tidak dapat masuk ke dalam tabel. 4.5.3 Desain Interface Halaman Bantuan Berikut ini adalah Gambar 4.18 desain interface dari halaman bantuan
Gambar 4.18 Desain interface Menu Bantuan Pada halaman ini user dapat melihat bantuan pada untuk menjalankan aplikasi.
BAB V IMPLEMENTASI DAN PENGUJIAN SISTEM 5.1 Kebutuhan Sistem Tahap implementasi sistem merupakan proses pengubahan sistem yang telah dirancang pada bab sebelumnya menjadi sistem yang dapat dijalankan. Perancangan Aplikasi Pendeteksi Kemiripan
Isi
Teks
Dokumen
ini
memerlukan perangkat lunak (software) dan perangkat keras (hardware) dalam pembuatannya agar sistem dapat
berjalan sesuai dengan yang diharapkan.
Adapun kebutuhan-kebutuhan yang digunakan dalam pembuatan aplikasi baik dari kebutuhan perangkat keras maupun kebutuhan perangkat lunak adalah sebagai berikut: a. Perangkat lunak 1. Sistem Operasi yang digunakan adalah Windows 8. 2. Database Management System yang digunakan adalah MySQL (XAMPP 3.2.1). 3. Program aplikasi yang digunakan adalah NetBeans IDE 8.0.2. 4. Penghubung antara database dan NetBeans yang digunakan adalah MySQL Connector/ODBC 5.1. 5. Pembuatan laporan dengan menggunakan library jxl. b. Perangkat keras 1. Processor Intel® CoreTM i3 2.1 GHz. 2. RAM 2.00 GB 3. Hardisk 500 GB.
5.2 Implementasi Antarmuka Sistem Setelah
memenuhi
menerangkan kegunaan
kebutuhan sistem, proses selanjutnya adalah
form-form
Kemiripan Isi Teks Dokumen
yang ada di dalam
dengan
Menggunakan
aplikasi Metode
pendeteksi Levenshteinn
Distance beserta desain formnya, di antaranya dapat dilihat pada subbab di bawah ini.
57
58
5.2.1 Form Halaman Beranda
Gambar 5.1 Tampilan Beranda Tampilan Beranda diatas merupakan tampilan antarmuka yang muncul pertama ketika menjalankan program. Terdapat tombol yang memudahkan user untuk langsung memasukan
dokumen dengan memilih Browse atau dapat
memilih menu perbandingan dua dokumen, perbandingan banyak dokumen, Bantuan, dan keluar. 5.2.2 Form Halaman Perbandingan Dua Dokumen
Gambar 5.2 Tampilan Perbandingan Dua Dokumen Pada tampilan Perbandingan Dua Dokumen, User dapat mandeteksi kemiripan antara dua dokumen. User dapat mengambil data dari direktori file
59
kemudian melakukan analisis sehingga akan didapatkan hasil kemiripan dari perbandingannya. Berikut ini adalah listing yang digunakan untuk proses tokenizing, filtering, stemming dan menampilkan hasil.
Gambar 5.3 Proses Preprocessing dan menampilkan hasil.
Berikut ini adalah listing yang digunakan untuk proses Levenshtein Distance
60
Gambar 5.4 proses Levenshtein Distance
Berikut ini adalah listing yang digunakan untuk proses membaca file dengan ekstensi .docx .pdf dan .txt
61
Gambar 5.5 Proses membaca file
62
5.2.3 Form Halaman Perbandingan Banyak Dokumen
Gambar 5.6 Tampilan Perbandingan Banyak Dokumen
Pada menu Halaman Perbandingan banyak dokumen pengguna dapat melakukan perbandingan dengan banyak dokumen yang ada dalam database. Proses perbandingan sama dengan proses perbandingan dua
dokumen dalam
menu yang
dokumen untuk
sebelumnya. Pengguna
dapat memasukan
dimasukan kedalam database. Tahap pertama adalah membaca file yang akan dimasukan kemudian setelah dokumen terbaca kedalam teks area maka akan dilakukan insert, apabila dokumen yang dimasukan terdeteksi plagiat dengan salah satu dokumen yang ada dalam database maka secara otomatis dokumen tidak akan ter-input kedalam database. Begitu sebaliknya apabila dokumen yang dimasukan tidak terdeteksi plagiat dengan salah satu dokumen yang ada dalam database maka dokumen akan secara otomatis masuk kedalam database.
63
5.2.4 Form Halaman Bantuan
Gambar 5.7 Tampilan Bantuan
Pada menu ini pengguna dalam melihat bantuan dalam menjalankan proses perbandingan.
Terdapat dua menu dalam proses
tersebut yaitu
perandingan dua dokumen dan perbandingan banyak dokumen.
5.3 Pengujian Sistem Pada tahap ini dilakukan proses pengujian terhadap suatu sistem yang dibangun. Pengujian sistem adalah analisis kemampuan aplikasi berdasarkan somilaritas, waktu dan
tipe-tipe
dokumen dengan kemungkinan
file. Pengujian pertama dilakukan
pada
kemiripan yang besar, sedangkan pengujian
kedua dilakukan pada dokumen yang dengan kemungkinan kemiripan
yang
kecil. Table 5.1 Daftar dokumen asli No
Nama File
Isi
Tipe File
Ukuran file
1
Dok_Asli_1
Berisi makalah tentang
.docx
27 Kb
.pdf
1196 Kb
pencemaran air 2
Dok_Asli_2
Berisi tentang jurnal yang berjudul “sistem penilaian otomatis jawaban esai menggunakan Algoritma
64
levenshtein distance” 3
Dok_Asli_3
Berisi tentang materi Cybercrime
.docx
24 Kb
4
Dok_Asli_4
Berisi tentang makalah Ekonomi
.docx
28 Kb
islam 5
Dok_Asli_5
Berisi tentang materi jantung
.txt
13 Kb
6
Dok_Asli_6
Berisi tentang materi media sosial
.docx
8 Kb
7
Dok_Asli_7
Berisi tentang jurnal “Teknologi
.docx
504 Kb
.pdf
125 Kb
.txt
6 Kb
.docx
924 Kb
Informasi: Kesiapan Pustakawan Memanfaatkannya” 8
Dok_Asli_8
Berisi tentang jurnal “Tinjauan profesi di bidang teknologi Informasi”
9
Dok_Asli_9
Berisi tentang “Pengertian MEA dan Ciri-ciri Masyarakat Ekonomi ASEAN”
10
Dok_Asli_10 Berisi tentang pembahasan “Pemanasan Global”
Table 5.2 Daftar dokumen pembanding No
Nama File
Isi
Tipe file
Ukuran file
1
Dok_Uji_1
Berisi pembahasan dari
.docx
28 Kb
.docx
745 Kb
Dok_Asli_1 2
Dok_Uji_2
Berisi pembahasan dari Dok_Asli_2
3
Dok_Uji_3
Berisi tentang materi cybercrime
.txt
19 Kb
4
Dok_Uji_4
Berisi makalah tentang “Makalah
.docx
24 Kb
.pdf
421 Kb
.docx
44 Kb
.docx
8 Kb
Ekonomi Islam Di Indonesia” 5
Dok_Uji_5
6
Dok_Uji_6
Berisi makalah yang berjudul “skiat-kiat pola makan yang sehat” Berisi tentang “Media Sosial dan Interaksi Remaja”
7
Dok_Uji_7
Berisi tentang pendahuluan dari Dok_Asli_7
65
8
Dok_Uji_8
Berasal dari Dok_Asli_8
.docx
70 Kb
9
Dok_Uji_9
Berasal dari Dok_Asli_9
.pdf
48 Kb
10
Dok_Uji_10
Beris tentang “pemanasan global
.pdf
467Kb
dan lubang ozon”
Dari hasil perbandingan antara dokumen asli dan dokumen pembanding maka diperoleh hasil perbandingan waktu dokumen dengan kemungkinan kemiripan yang besar seperti Tabel 5.3. Tabel 5.3 Hasil Perbandingan Dokumen No
Dokumen Asli
Dokumen Pembanding
Stemming Kemiripan Waktu (%) (detik) 78,318 6,375
No Stemming Kemiripan Waktu (%) (detik) 78.288 6.851
1
Dok_Asli_1
Dok_Uji_1
2
Dok_Asli_2
Dok_Uji_2
82,809
18,672
83,028
20,32
3
Dok_Asli_3
Dok_Uji_3
84,426
6,468
84.453
5.917
4
Dok_Asli_4
Dok_Uji_4
83,313
5,016
83.424
6.761
5
Dok_Asli_5
Dok_Uji_5
77,145
4,328
76.970
3.544
6
Dok_Asli_6
Dok_Uji_6
100
5,437
100
8.906
7
Dok_Asli_7
Dok_Uji_7
100
13,468
100
12,324
8
Dok_Asli_8
Dok_Uji_8
91,614
21,063
91,276
10,224
9
Dok_Asli_9
Dok_Uji_9
99,118
4,469
99,032
6,235
10
Dok_Asli_10
Dok_Uji_10
78,060
12,407
79,142
11,43
Hasil perbandingan dokumen diatas menunjukan bahwa dokumen dengan kemungkinan kemiripan yang besar menghasilkan nilai similaritas yang tinggi yaitu diatas 77% sampai dengan 100% Tabel 5.4 Hasil Perbandingan Dokumen yang tidak mirip No
Dokumen Asli
Dokumen Pembanding
Stemming Kemiripan Waktu (%) (detik) 35,013 5,609
No Stemming Kemiripan Waktu (%) (detik) 35,032 10,625
1
Dok_Asli_1
Dok_Uji_3
2
Dok_Asli_2
Dok_Uji_5
19,670
5,297
19,637
6,813
3
Dok_Asli_3
Dok_Uji_4
28,196
13,516
28,187
6,39
4
Dok_Asli_4
Dok_Uji_7
27,985
9,469
24,131
5,86
5
Dok_Asli_5
Dok_Uji_8
25,724
5,969
25,741
5,641
6
Dok_Asli_6
Dok_Uji_9
27,605
3,109
28,045
5,64
7
Dok_Asli_7
Dok_Uji_10
30,851
9,563
31,452
7,127
8
Dok_Asli_8
Dok_Uji_6
26,295
12,484
26,353
11,23
9
Dok_Asli_9
Dok_Uji_2
14,581
7,891
14,923
8,83
10
Dok_Asli_10
Dok_Uji_1
36,565
11,188
36,262
11,224
66
Hasil perbandingan dokumen diatas menunjukan bahwa dokumen dengan kemungkinan kemiripan yang kecil menghasilkan nilai similaritas yang rendah yaitu dibawah 40%. Dari kedua Hasil pengujian dokumen di atas menunjukan bahwa yang paling mempengaruhi lama tidaknya perhitungan nilai similarity
bukan
ditentukan oleh jenis dokumen maupun ukuran dokumen, namun oleh jumlah substring yang dikandung oleh dokumen tersebut. Dimana
semakin
besar
jumlah substring yang dikandung dokumen, maka waktu yang diperlukan untuk menghitung nilai kesamaan akan semakin besar. Hasil perbandingan diatas juga menunjukan bahwa dengan melakukan proses no stemming maka waktu yang dibutuhkan akan lebih lama.
BAB VI PENUTUP 6.1
Kesimpulan Berdasarkan uraian dan hasil analisa yang telah dilakukan selama
pengembangan
Aplikasi
Deteksi
Kemiripan
isi
teks
dokumen
dengan
menggunakan metode Levenshtein Distance ini, dapat diambil kesimpulan yaitu 1.
Aplikasi pendeteksi kemiripan isi teks dokumen dengan menggunakan metode Levenshtein Distance ini menggunakan proses Preprocessing dan proses penggukuran nilai similarity untuk mendapatkan nilai kemiripan.
2.
Pada pengujian menggunakan data real yaitu data dokumen berplagiat yang diambil
dari
artikel/berita
lewat
internet,
algoritma Levenshtein
Distance menghasilkan nilai similarity yang tinggi yaitu diatas 85 % sampai 100 % untuk dokumen yang tingkat kemiripannya tinggi. Sedangkan untuk dokumen dengan tingkat kemiripan yang rendah atau tidak berplagiat maka menghasilkan nilai similarity dibawah 40%.
6.2
Saran Dalam pembuatan Aplikasi pendeteksi kemiripan isi teks dokumen dengan
menggunakan metode Levenshtein Distance ini masih banyak terdapat kekurangan dan jauh dari kata sempurna. Untuk itu masih perlu dilakukan sebuah penyempurnaan. Berikut beberapa saran untuk pengembangan lebih lanjut dari aplikasi ini : 1.
Perlu ditambahkan proses untuk mendeteksi
padanan kata yaitu kata-
kata yang berbeda namun memiliki makna yang sama. 2.
Perlu
ditambahkan
sebuah
proses
yang
bisa mendeteksi
adanya
kesalahan ejaan karena kesalahan ejaan ini sangat mempengaruhi proses filtering dan stemming sehingga dapat mengurangi nilai similarity 3.
Dalam program yang selanjutnya dapat dikembangkan untuk proses yang juga bisa membaca dokumen berbentuk .xlx
67
Daftar Pustaka
Andriyani NM, 2010 , Implementasi Algoritma Levenshtein Distance dan Metode Empiris untuk menampilkan saran perbaikan kesalahan pengetikan dokumen berbahasa Indonesia, skripsi, Teknik Informatika, Universitas Udayana, Bali. Aziz, F, 2005, Object Oriented Programming dengan PHP5, Elexmedia Komputindo, Jakarta. Harlian, M, 2010, Text Mining http://iwanarif.lecturer.pens.ac.id/kuliah/dm /6Text%20 Mining.pdf (Diakses pada 4 juni 2015 22.23 WITA) Irianto, WA. 2014. Penentuan Tingkat Plagiarisme Dokumen Penelitian Menggunakan Centroid Linkage Hierarchical Method (CLHM). Jurnal. Program Teknologi Informasi dan Ilmu Komputer, Universitas Brawijaya. Malang. Labuna,
Z, 2013, Cara Membuka File DOC, http://www.clinickomputer.com/2013/03/cara-membuka-file-doc.html (Diakses pada 27 September 2015 22.25 WITA)
Mahfudin, B, 2015, Membuka dan Mengedit File Text (.txt) di Android, http://pelajarterbaik.com/2015/02/Aplikasi-Bagus-Membuka-danmengedit-file-text-txt-android.html (Diakses pada 27 September 2015 19.01 WITA) Miftahul dan Bunafit Komputer, 2010, Membuat Aplikasi Database dengan Java, MySQL dan NetBeans. PT Elex Media Komputindo, Jakarta. Nafik, MZ, 2013, Sistem Otomatis Jawaban Esai Menggunakan Algoritma Levenshtein Distance, Skripsi, Ilmu Komputer, Universitas Brawijaya, Malang. Nugroho, A, 2009, Rekayasa Perangkat Lunak Menggunkan UML & Java, Andi Offset, Yogyakarta. Pratama, MR, 2013, Aplikasi Pendeteksi Duplikasi Dokumen Teks Bahasa Indonesia Menggunakan Algoritma Winnowing Dengan Metode K-Gram dan Synonym Recognition, Skripsi, Jurusan Teknik Informatika Universitas Muhammadiyah, Malang. Rosa, A.S dan Shalahuddin, M, 2013, Rekayasa Perangkat Lunak (Terstruktur dan Berorientasi Objek), Informatika, Bandung.
Sastroasmoro, S, 2007, Beberapa Catatan Tentang Plagiarisme, Majalah Kedokteran Indonesia, volum:57, nomor:8, Agustus 2007. Sora,
2014, Mengetahui Pengertian Dokumen dan Dokumentasi, http://www.pengertianku.net /2014/09/mengetahui-pengertian-dokumendan-dokumentasi.html (Diakses pada 2 Juni 00.26 WITA)
Sutisna, U, 2010, Koreksi Ejaan Queri Bahasa Indonesia Menggunakan Algoritma Damerau Levenshtein, Jurnal, Departemen Ilmu Komputer, Institut Pertanian Bogor, Bogor. Tudesman, 2013, Sistem Deteksi Plagiarisme Dokumen Bahasa Indonesia Menggunakan Metode Vector Space Model, Skripsi, Program Studi Teknik Informatika, STIMIK GI MDP. Vicky, 2007, Mengenal PDF dan cara mengconvert File Word to PDF dengan Microsoft word 2007, http://belajar-komputer-mu.com/mengenal-pdf-dancara-mengconvert-file-word-to-pdf-dengan-microsoft-word-2007/ (Diakses pada 27 September 2015 22.42 WITA) Yufis, 2016, Stemming Bahsa Indonesia dengan Algoritma Nazief dan Adriani http://yufis.staff.umm.ac.id/2012/06/07stemming-bahasa-indonesiadengan-algoritma-nazief-dan-adriani/ (Diakses pada 10 Juli 2015 13.11 WITA)
LAMPIRAN
1. Open File public class plagiattesting extends javax.swing.JFrame { private File a, stop; String file1; long start; long end; private HWPFDocument doc; private WordExtractor we; String[] paragraphs; LineHighlightPainter lh = new LineHighlightPainter(); JFrame frame = new JFrame(); public static JProgressBar progressBar; public plagiattesting() { String lookAndFeel = javax.swing.UIManager.getSystem LookAndFeelClassName(); try { javax.swing.UIManager.setLookAndFeel(lookAndFeel); } catch (ClassNotFoundException | Instantiation Exception | IllegalAccessException | UnsupportedLookAndFeelException e) { } initComponents(); Dimension screenSize = Toolkit.getDefaultToolkit() .getScreenSize(); double width = screenSize.getWidth(); double height = screenSize.getHeight(); pack(); this.setSize((int) width, (int) height); jToggleButton1.setEnabled(false); background31.setSize((int) width, (int) height); hapusDokumen1(); hapusDokumen2(); jButton1.setBackground(Color.red); } public JTextArea getArea1() { return jTextArea1; } public JTextArea getArea2() { return jTextArea2; } public JTextField getTexfield1() { return jTextField1; } public JTextField getTexfield2() { return jTextField2; } public JTextField getTexfield3() { return jTextField3; }
public JTextField getTexfield4() { return jTextField4; } public JTextField getTexfield5() { return jTextField5; } public JTextField getTexfield6() { return jTextField6; } public void readDocxFile() { JFileChooser pilihfile = new JFileChooser("."); int pilih1 = pilihfile.showOpenDialog(this); if (pilih1 == JFileChooser.APPROVE_OPTION) { try { a = pilihfile.getSelectedFile(); FileInputStream file = new FileInputStream (a.getAbsoluteFile()); if (a.getPath().endsWith(".docx")) { jTextField1.setText(a.getPath()); XWPFWordExtractor extractor; XWPFDocument hdoc; String poip = ""; jTextArea1.setText(""); try { FileInputStream fs = new FileInput Stream(a.getPath()); hdoc = new XWPFDocument(OPCPackage.open(fs)); extractor = new XWPFWordExtractor(hdoc); poip = extractor.getText(); //System.out.println(poip); jTextArea1.setText(poip); jTextArea1.setLineWrap(true); hitungKata(); hitungKalimat(); } catch (Exception e) { e.addSuppressed(e); } } else if (a.getPath().endsWith(".pdf")) { jTextField1.setText(a.getPath()); PDDocument document = null; document = PDDocument.load(new (a.getPath())); document.getClass(); if (!document.isEncrypted()) {
File
PDFTextStripperByArea stripper = new PDFTextStripperByArea(); stripper.setSortByPosition(true); PDFTextStripper Tstripper = new PDFTextStripper(); String st = Tstripper.getText(document); jTextArea1.setText("");
jTextArea1.setLineWrap(true); jTextArea1.setText(st); hitungKata(); hitungKalimat(); //proses(); } } else if (a.getPath().endsWith(".txt") || a.getPath().endsWith(".TXT")) { jTextField1.setText(a.getPath()); a = pilihfile.getSelectedFile(); setTitle(a.getPath()); FileReader baca_file = new FileReader(a); BufferedReader br = new BufferedReader (baca_file); jTextArea1.setText(""); while (br.ready()) { jTextArea1.append(br.readLine() + "\n"); } jTextArea1.setLineWrap(true); hitungKata(); hitungKalimat(); //proses(); } else if (a.getPath().endsWith(".doc")) { jTextField1.setText(a.getPath()); FileInputStream fis = new FileInputStream (a.getPath()); doc = new HWPFDocument(fis); we = new WordExtractor(doc); //get Paragraph text as array paragraphs = we.getParagraphText(); jTextArea1.setText(""); String para = ""; for (int i = 0; i < paragraphs.length; i++) { //jTextArea1.append(paragraphs[i]); para += paragraphs[i]; } jTextArea1.setText(para); hitungKata(); hitungKalimat(); //proses(); } else { JOptionPane.showMessageDialog(rootPane, "File tidak diketahui"); } } catch (DOMException de) { de.addSuppressed(de); } catch (IOException ie) { ie.addSuppressed(ie); } } }
2. Preprocessing public void proses() { IndonesianStemmer isteam = new IndonesianStemmer(); String str = jTextArea1.getText(); String str1 = str.toLowerCase(); StringTokenizer st4 = new StringTokenizer(str1, "\n \b \r \f \t (?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/).,"); String out = ""; String out2 = ""; while (st4.hasMoreTokens()) { RemoveStopWords st = new RemoveStopWords(); SimpleTokenizer simpleTokenizer = Simple Tokenizer.INSTANCE; String tokens[] = simpleTokenizer.tokenize (st4.nextToken()); String list[] = st.removeStopWords(tokens); for (String word : list) { out2 += "\n" + word; StringTokenizer stemer = new StringTokenizer(word,"\n"); String stem = isteam.findRootWord(stemer. nextToken()); out += "\n" + stem; } } StringTokenizer st5 = new StringTokenizer(out2, "\n \b \r \f \t (?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/).,"); List<String> sort = new ArrayList<>(); while (st5.hasMoreTokens()) { sort.add(st5.nextToken()); } Collections.sort(sort); String x = sort.toString(); String outFile3 = "D:\\dokumen3.txt"; String e = x.replace("[", ""); String b = e.replace("]", ""); String c = b.replace(",", ""); String d = c.replace("\\n", ""); String ee = d.replace(" ", ""); BacaTulisFile.tulisFile(ee, outFile3); StringTokenizer st3 = new StringTokenizer(out, "\n \b \r \f \t (?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/).,"); List<String> f = new ArrayList<>(); while (st3.hasMoreTokens()) { f.add(st3.nextToken()); } Collections.sort(f); String h = f.toString(); String outFile = "D:\\dokumen1.txt"; String i = h.replace("[", ""); String j = i.replace("]", ""); String k = j.replace(",", ""); String l = k.replace("\\n", ""); String m = l.replace(" ", ""); BacaTulisFile.tulisFile(m, outFile); } public void proses2() { IndonesianStemmer isteam = new IndonesianStemmer();
String str = jTextArea2.getText(); String str1 = str.toLowerCase(); StringTokenizer st4 = new StringTokenizer(str1, "\n \b \r \f \t (?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/).,"); String out = ""; String out2 = ""; while (st4.hasMoreTokens()) { RemoveStopWords st = new RemoveStopWords(); SimpleTokenizer simpleTokenizer = SimpleTokenizer. INSTANCE; String tokens[] = simpleTokenizer.tokenize (st4.nextToken()); String list[] = st.removeStopWords(tokens); for (String word : list) { out2 += "\n" + word; StringTokenizer stemer = new StringTokenizer(word,"\n"); String stem = isteam.findRootWord(stemer.nextToken()); out += "\n" + stem; } } StringTokenizer st5 = new StringTokenizer(out2, "\n \b \r \f \t (?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/).,"); List<String> sort = new ArrayList<>(); while (st5.hasMoreTokens()) { sort.add(st5.nextToken()); } Collections.sort(sort); String x = sort.toString(); String outFile3 = "D:\\dokumen4.txt"; StringTokenizer stok = new StringTokenizer(x, "\n \b \r \f \t (?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/).,"); String e = x.replace("[", ""); String b = e.replace("]", ""); String c = b.replace(",", ""); String d = c.replace("\\n", ""); String ee = d.replace(" ", ""); BacaTulisFile.tulisFile(ee, outFile3); StringTokenizer st3 = new StringTokenizer(out, "\n \b \r \f \t (?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/).,"); List<String> f = new ArrayList<>(); while (st3.hasMoreTokens()) { f.add(st3.nextToken()); } Collections.sort(f); String h = f.toString(); String outFile = "D:\\dokumen2.txt"; String i = h.replace("[", ""); String j = i.replace("]", ""); String k = j.replace(",", ""); String l = k.replace("\\n", ""); String m = l.replace(" ", ""); BacaTulisFile.tulisFile(m, outFile); } private void hapusDokumen1() {
File out = new File("D:\\dokumen1.txt"); File out2 = new File("D:\\dokumen3.txt"); out.delete(); out2.delete(); } private void hapusDokumen2() { File out = new File("D:\\dokumen2.txt"); File out2 = new File("D:\\dokumen4.txt"); out.delete(); out2.delete(); } public static final double THRESHOLD = 70;
3. Indonesian Stemmer package Stemmer; import import import import import import
java.io.BufferedReader; java.io.FileReader; java.io.IOException; java.util.ArrayList; java.util.Collections; java.util.List;
public class IndonesianStemmer { private String current_word; public List<String> list_dictionaries = new ArrayList(); public IndonesianStemmer() { BufferedReader bufferedReader = null; try { String text; String sb = ""; bufferedReader = new BufferedReader(new FileReader ("./src/rootWord/rootword.txt")); while ((text = bufferedReader.readLine()) != null) { sb += text; } String[] dictionary = sb.split(" "); Collections.addAll(this.list_dictionaries,dictionary); } catch (IOException e) { e.printStackTrace(); } finally { try { if (bufferedReader != null) { bufferedReader.close(); } } catch (IOException ex) { ex.printStackTrace(); } } }
private boolean checkDictionary(String key) { if (this.list_dictionaries.contains(key)) { return true; } return false; } private void delInflectionSuffixes() { if (this.current_word.endsWith("lah")) { this.current_word = this.current_word.substring(0, this.current_word.length() - 3); } else if (this.current_word.endsWith("kah")) { this.current_word = this.current_word.substring(0, this.current_word.length() - 3); } else if (this.current_word.endsWith("ku")) { this.current_word = this.current_word.substring(0, this.current_word.length() - 2); } else if (this.current_word.endsWith("mu")) { this.current_word = this.current_word.substring(0, this.current_word.length() - 2); } else if (this.current_word.endsWith("nya")) { this.current_word = this.current_word.substring(0, this.current_word.length() - 3); } } private void delDerivationSuffixes() { if (this.current_word.endsWith("i")) { this.current_word = this.current_word.substring(0, this.current_word.length() - 1); } else if (this.current_word.endsWith("kan")) { this.current_word = this.current_word.substring(0, this.current_word.length() - 3); } else if (this.current_word.endsWith("an")) { this.current_word = this.current_word.substring(0, this.current_word.length() - 2); } } private void delDerivationPrefix() { if ((this.current_word.startsWith("di")) || (this.current_word.startsWith("ke")) || (this.current_word.startsWith("se"))) { this.current_word = this.current_word.substring(2); } if (!this.list_dictionaries.contains(this.current_word)) { if (this.current_word.startsWith("me")) { if (this.current_word.startsWith("meng")) { if (this.list_dictionaries.contains("k" + this.current_word.substring(4))) { this.current_word = ("k" + this.current_word.substring(4)); } else if (this.current_word.substring(4, 5). matches("[gh]")) { this.current_word = this.current_word.substring(4); } } else if (this.current_word.startsWith("meny")) {
if (this.list_dictionaries.contains("s" + this.current_word.substring(4))) { this.current_word = ("s" + this.current_word.substring(4)); } } else if (this.current_word.startsWith("mem")) { if (this.current_word.substring(3, 4). matches("[bpf]")) { this.current_word = this.current_word.substring(3); } } else if (this.current_word.startsWith("men")) { if (this.current_word.substring(3, 4). matches("[cdj]")) { this.current_word = this.current_word.substring(3); } else if (this.list_dictionaries.contains("t" + this.current_word.substring(3))) { this.current_word = ("k" + this.current_word.substring(3)); } } else { this.current_word = this.current_word.substring(2); } } else if (this.current_word.startsWith("te")) { if (this.current_word.startsWith("ter")) { if (this.list_dictionaries.contains("r" + this.current_word.substring(3))) { this.current_word = ("r" + this.current_word.substring(3)); } else { this.current_word = this.current_word.substring(3); } } } else if (this.current_word.startsWith("be")) { if (this.current_word.substring(3, 5). matches("er")) { this.current_word = this.current_word.substring(2); } else if (this.list_dictionaries.contains (this.current_word.substring(2))) { this.current_word = this.current_word.substring(2); } else { this.current_word = this.current_word.substring(3); } } if((!this.list_dictionaries.contains(this.current_word)) && (this.current_word.startsWith("pe"))) { if (this.list_dictionaries.contains(this.current _word.substring(2))) { this.current_word = this.current_word.substring(2); } else if (this.current_word.startsWith("per")) { this.current_word
this.current_word.substring(3); } else if (this.current_word.startsWith("pem")) { if (this.current_word.substring(3, 4). matches("[bfv]")) { this.current_word = this.current_word.substring(3); } else if (this.list_dictionaries.contains("p" + this.current_word.substring(3))) { this.current_word = ("p" + this.current_word.substring(3)) } } else if (this.current_word.startsWith("peny")) { if (this.list_dictionaries.contains("s" + this.current_word.substring(4))) { this.current_word = ("s" + this.current_word.substring(4)); } } else if (this.current_word.startsWith("pen")) { if (this.list_dictionaries.contains("t" + this.current_word.substring(3))) { this.current_word = ("t" + this.current_word.substring(3)); } else if (this.current_word.substring(3, 4). matches("[jdcz]")) { this.current_word = this.current_word.substring(3); } } } } } public void delReduplikasi() { String firstWord = null; String secondWord = null; if (this.current_word.contains("-")) { firstWord = this.current_word.substring(0, this.current_word.indexOf("-")); secondWord = this.current_word.substring(this.current_word.indexOf("-") + 1); if (this.list_dictionaries.contains(secondWord)) { this.current_word = secondWord; } else if (this.list_dictionaries.contains(firstWord)) { this.current_word = firstWord; } else { this.current_word = secondWord; } } } public String findRootWord(String key) { this.current_word = key; if (checkDictionary(this.current_word) == true) { return key; } delInflectionSuffixes(); delDerivationSuffixes(); //delDerivationPrefix(); delReduplikasi(); if (checkDictionary(this.current_word)) {
key = this.current_word; return key; } return key; } }
4. Metode Levenshtein Distance package LevensteinDistance; /** * * @author ASUS Zenbook */ public class Levenstein { private private private private
String compOne; String compTwo; int[][] matrix; Boolean calculated = false;
public Levenstein(String one, String two) { compOne = one; compTwo = two; } public int getSimilarity() { if (!calculated) { setupMatrix(); } return matrix[compOne.length()][compTwo.length()]; } public int[][] getMatrix() { setupMatrix(); return matrix; } private void setupMatrix() { matrix = new int[compOne.length() + 1][compTwo.length() + 1]; for (int i = 0; i <= compOne.length(); i++) { matrix[i][0] = i; } for (int j = 0; j <= compTwo.length(); j++) { matrix[0][j] = j; } for (int i = 1; i < matrix.length; i++) { for (int j = 1; j < matrix[i].length; j++) { if (compOne.charAt(i - 1) == compTwo.charAt(j 1)) { matrix[i][j] = matrix[i - 1][j - 1]; } else { int minimum = Integer.MAX_VALUE; if ((matrix[i - 1][j]) + 1 < minimum) {
minimum = (matrix[i - 1][j]) + 1; } if ((matrix[i][j - 1]) + 1 < minimum) { minimum = (matrix[i][j - 1]) + 1; } if ((matrix[i - 1][j - 1]) + 1 < minimum) { minimum = (matrix[i - 1][j - 1]) + 1; } matrix[i][j] = minimum; } } } calculated = true; //displayMatrix(); } private void displayMatrix() { System.out.println(" " + compOne); for (int y = 0; y <= compTwo.length(); y++) { if (y - 1 < 0) { System.out.print(" "); } else { System.out.print(compTwo.charAt(y - 1)); } for (int x = 0; x <= compOne.length(); x++) { System.out.print(matrix[x][y]); } System.out.println(); } } public static double similarity(String compOne, compTwo, int d) { int len = 0; if (compOne.length() > compTwo.length()) { len = compOne.length(); } else if len = } else { len = } return (1
(compOne.length() < compTwo.length()) { compTwo.length(); compOne.length(); - (float) d / len) * 100;
} }
5. Perbandingan Banyak Dokumen public class NewJFrame1 extends javax.swing.JFrame { Dokumen d = new Dokumen(); koneksi kd = new koneksi(); List dokumen = new ArrayList<>(); int currentRow = 0; ResultSet rs;
String
ResultSet rs2; private java.io.File a, stop; String file1; long start; long end; private HWPFDocument doc; private WordExtractor we; String[] paragraphs; String lokasi; String txt; String nama; /** * Creates new form NewJFrame1 */ public NewJFrame1() { String lookAndFeel = javax.swing.UIManager.getSystemLookAndFeelClassName(); try { javax.swing.UIManager.setLookAndFeel(lookAndFeel); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) { } initComponents(); this.setExtendedState(MAXIMIZED_BOTH); kd.koneksi(); tampil(); jToggleButton3.setEnabled(false); } public void setPath(String path) { this.lokasi = path; } public String getPath() { return lokasi; } public void setTxt(String txt) { this.txt = txt; } public String getTxt() { return txt; } public void setNama(String nama) { this.nama = nama; } public String getNama() { return nama; } private void open() { JFileChooser pilihfile = new JFileChooser("."); int pilih1 = pilihfile.showOpenDialog(this);
if (pilih1 == JFileChooser.APPROVE_OPTION) { try { a = pilihfile.getSelectedFile(); FileInputStream file = new FileInputStream (a.getAbsoluteFile()); if (a.getPath().endsWith(".docx")) { jTextField1.setText(a.getPath()); this.setNama(a.getName().replace(".docx","")); XWPFWordExtractor extractor; XWPFDocument hdoc; String poip = ""; jTextArea1.setText(""); try { FileInputStream fs = new FileInputStream(a.getPath()); hdoc = new XWPFDocument(OPCPackage.open(fs)); extractor = new XWPFWordExtractor(hdoc); poip = extractor.getText(); this.setTxt(poip); jTextArea1.setText(poip); jTextArea1.setLineWrap(true); } catch (Exception e) { e.addSuppressed(e); } } else if (a.getPath().endsWith(".pdf")) { jTextField1.setText(a.getPath()); this.setNama(a.getName().replace(".pdf", "")); PDDocument document = null; document = PDDocument.load(new File(a.getPath())); document.getClass(); if (!document.isEncrypted()) { PDFTextStripperByArea stripper = new PDFTextStripperByArea(); stripper.setSortByPosition(true); PDFTextStripper Tstripper = new PDFTextStripper(); String st = Tstripper.getText(document); this.setTxt(st); jTextArea1.setText(""); jTextArea1.setLineWrap(true); jTextArea1.setText(st); } document.close(); } else if (a.getPath().endsWith(".txt") || a.getPath().endsWith(".TXT")) { jTextField1.setText(a.getPath()); a = pilihfile.getSelectedFile(); setTitle(a.getPath()); FileReader baca_file = new FileReader(a); BufferedReader br = new BufferedReader (baca_file); jTextArea1.setText(""); while (br.ready()) {
jTextArea1.append(br.readLine() + "\n"); this.setTxt(br.readLine() + "\n"); } jTextArea1.setLineWrap(true); } else if (a.getPath().endsWith(".doc")) { jTextField1.setText(a.getPath()); this.setNama(a.getName().replace(".doc", "")); FileInputStream fis = new FileInputStream (a.getPath()); doc = new HWPFDocument(fis); we = new WordExtractor(doc); //get Paragraph text as array paragraphs = we.getParagraphText(); jTextArea1.setText(""); String para = ""; for (int i = 0; i < paragraphs.length; i++) { //jTextArea1.append(paragraphs[i]); para += paragraphs[i]; } this.setTxt(para); jTextArea1.setText(para); } else { JOptionPane.showMessageDialog(rootPane, "File tidak diketahui"); } jTextField1.setText(a.getPath()); jTextField2.setText(a.getName()); } catch (DOMException de) { de.addSuppressed(de); } catch (IOException ie) { ie.addSuppressed(ie); } } } private void bandingkan() { IndonesianStemmer isteam = new IndonesianStemmer(); String isi; double sim; rs = kd.tampil("select count(no) as no from dokumen"); int no = 0; try { while (rs.next()) { no += Integer.parseInt(rs.getString("no")); } } catch (SQLException ex) { Logger.getLogger(NewJFrame1.class.getName()).log(Level.SEVER E, null, ex); } if (no <= 0) { String outf = "D:\\out.txt"; BacaTulisFile.tulisFile(String.format("%.0f", 0.00), outf); } else { try {
rs = kd.tampil("select * from dokumen"); while (rs.next()) { String path = rs.getString("path"). replaceFirst(".", ""); String path2 = "C:/Users/ASUS Zenbook/ Documents/Plagiarism" + path; isi = BacaTulisFile.readTxt(path2); //System.out.println(path); String str1 = isi.toLowerCase(); StringTokenizer st4 = new StringTokenizer (str1, "\n \b \r \f \t (?:/\\*(?:[^*]| (?:\\*+[^*/]))*\\*+/).,"); String out = ""; String out2 = ""; while (st4.hasMoreTokens()) { RemoveStopWords st = new RemoveStopWords(); SimpleTokenizer simpleTokenizer = SimpleTokenizer.INSTANCE; String tokens[] = simpleTokenizer.tokenize(st4.nextToken()); String list[] = st.removeStopWords(tokens); for (String word : list) { out2 += "\n" + word; StringTokenizer stemer = new StringTokenizer(word, "\n"); String stem = isteam.findRootWord (stemer.nextToken()); out += "\n" + stem; } } StringTokenizer st5 = new StringTokenizer(out, "\n \b \r \f \t (?:/\\*(?:[^*]| (?:\\*+[^*/]))*\\*+/).,"); List<String> sort = new ArrayList<>(); while (st5.hasMoreTokens()) { sort.add(st5.nextToken()); } Collections.sort(sort); String x = sort.toString(); String e = x.replace("[", ""); String b = e.replace("]", ""); String c = b.replace(",", ""); String dd = c.replace(" ", ""); //System.out.println(dd); String area = jTextArea1.getText(); String area2 = area.toLowerCase(); StringTokenizer tok = new StringTokenizer (area2.toLowerCase(), "\n \b \r \f \t (?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/).,"); String out3 = ""; String out4 = ""; while (tok.hasMoreTokens()) { RemoveStopWords restopwords = new RemoveStopWords(); SimpleTokenizer simpleTok = SimpleTokenizer.INSTANCE;
String toks[] = simpleTok. Tokenize (tok.nextToken()); String list[] = restopwords.removeStopWords(toks); for (String words : list) { out4 += "\n" + words; StringTokenizer stem = new StringTokenizer(words, "\n"); String stems = isteam.findRootWord (stem.nextToken()); out3 += "\n" + stems; } } StringTokenizer tok2 = new StringTokenizer(out3, "\n \b \r \f \t (?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/).,"); List<String> sortt = new ArrayList<>(); while (tok2.hasMoreTokens()) { sortt.add(tok2.nextToken()); } Collections.sort(sortt); String xx = sortt.toString(); String ee = xx.replace("[", ""); String bb = ee.replace("]", ""); String cc = bb.replace(",", ""); String ddd = cc.replace(" ", ""); Levenstein lv = new Levenstein(dd, ddd); int diff = lv.getSimilarity(); sim = Levenstein.similarity(dd, ddd, diff); String outf = "D:\\out.txt"; BacaTulisFile.tulisFile(String.format("%.0f", sim), outf); } } catch (SQLException ex) { ex.addSuppressed(ex); } } } private void hapusDoc() { String outFile = "D:\\out.txt"; File f = new File(outFile); f.delete(); } private void insert() { String outString = "D:\\out.txt"; String p = BacaTulisFile.bacaFile2(outString); if (p.contains("70") || p.contains("71") || p.contains("72") || p.contains("73") || p.contains("74") || p.contains("75") || p.contains("76") || p.contains("77") || p.contains("78") || p.contains("79") || p.contains("80") || p.contains("81") || p.contains("82") || p.contains("83") || p.contains("84") || p.contains("85") || p.contains("86") ||
p.contains("87") || p.contains("88") || p.contains("89") || p.contains("90") || p.contains("91") || p.contains("92") || p.contains("93") || p.contains("94") || p.contains("95") || p.contains("96") || p.contains("97") || p.contains("98") || p.contains("99") || p.contains("100")) { jLabel5.setText("Dokumen terdeteksi plagiat dengan salah satu dokumen di database"); JOptionPane.showMessageDialog(rootPane, "Insert gagal! Dokumen Anda terdeteksi plagiat dengan dokumen di database"); } else { jLabel5.setText("Dokumen tidak terdeteksi plagiat dengan dokumen di database"); tulisPath(); String lok = this.getPath(); d.setPath(lok); d.setNama(jTextField2.getText()); if (kd.insertDok(d) > 0) { currentRow = dokumen.size() - 1; tulis(); tampil(); JOptionPane.showMessageDialog(rootPane, "Insert Sukses"); System.out.println("insert sukses"); } else { JOptionPane.showMessageDialog(rootPane, "Insert Gagal"); } } } public void tulisPath() { try { int numb; rs = kd.tampil("select count(no) as no from dokumen"); while (rs.next()) { numb = Integer.parseInt(rs.getString("no")); numb = numb + 1; String lok = "./DataBase/" + numb + "." + this.getNama() + ".txt"; this.setPath(lok); } } catch (Exception e) { } }
public void tulis() { String t = this.getTxt(); BacaTulisFile.tulisFile(t, this.getPath()); } private void hasil() { String outString = "D:\\out.txt";
String sim = BacaTulisFile.bacaFile2(outString); StringTokenizer token = new StringTokenizer(sim, "\n"); String similar = " Hasil Perhitungan Levenstein Distance\n " + "======================================"; int row = 1; while (token.hasMoreTokens()) { similar += "\n Dokumen No " + row + " Similaritas = " + token.nextToken() + "% \n"; row++; } jTextArea2.append(similar);
Nilai
} private void tampil() { DefaultTableModel tb = new DefaultTableModel(); tb.addColumn("No"); tb.addColumn("Nama File"); tb.addColumn("Path"); String hasil = "select * from dokumen"; rs = kd.tampil(hasil); try { int i = 1; while (rs.next()) { tb.addRow(new Object[]{i, rs.getString("path")}); i++; } jTable1.setModel(tb); } catch (SQLException e) { e.addSuppressed(e); } }
rs.getString("nama"),
public void selectTabel() { String isidb; try { int baris = jTable1.getSelectedRow(); int kolom = jTable1.getSelectedColumn(); String data = jTable1.getValueAt(baris, kolom).toString(); String kolom1 = jTable1.getValueAt(baris, 0).toString(); String kolom2 = jTable1.getValueAt(baris, 1).toString(); String kolom3 = jTable1.getValueAt(baris, 2).toString(); jTextField1.setText(""); jTextField2.setText(""); jTextField1.setText(kolom3); jTextField2.setText(kolom2); String path = kolom3.replaceFirst(".", ""); String path2 = "C:/Users/ASUS Zenbook/Documents/Plagiarism" + path; isidb = BacaTulisFile.readTxt(path2); jTextArea1.setText(isidb);
} catch (Exception e) { e.addSuppressed(e); } } private void refresh() { jTextArea1.setText(""); jTextArea2.setText(""); jTextField1.setText(""); jTextField2.setText("");