Implementasi Algoritma Knuth-Morris Pratt String Matching Untuk Mencari Kata Atau Istilah Pada Kamus Komputer Berbasis Android

(1)

Listing Program CariKata.java package com.indah.kmp; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast;

public class CariKata extends Activity { private AutoCompleteTextView actv;

EditText edkata, edarti; Button b1 , b2, btn2kembali; TextView tvarti, tvnotfound;

@Override

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

b1 = (Button) findViewById (R.id.btncari); b2 = (Button) findViewById

(R.id.button_tambah);

btn2kembali= (Button) findViewById (R.id.btn2_cari);


(2)

List<String> listkata = new ArrayList<String>();

File fl = new

File(Environment.getExternalStorageDirectory() + "/contoh");

String ck = fl.toString()+"/"+"kerjaku.csv";

BufferedReader br = null; String line = "";

String cvsSplitBy = "#";

try {

br = new BufferedReader(new FileReader(ck));

while ((line = br.readLine()) != null) {

String[] kamus = line.split(cvsSplitBy);

String kata_b = kamus[0];

listkata.add(kata_b);

}

} catch (FileNotFoundException e) { e.printStackTrace();

} catch (IOException e) { e.printStackTrace(); } finally {

if (br != null) { try {

br.close();

} catch (IOException e) { e.printStackTrace(); }

} }

String[] kata = listkata.toArray(new String[listkata.size()]);

ArrayAdapter adapter = new ArrayAdapter


(3)

actv = (AutoCompleteTextView)

findViewById(R.id.autoCompleteTextView1);

actv.setAdapter(adapter);

b1.setOnClickListener( new View.OnClickListener(){

public void onClick(View arg0) { actv = (AutoCompleteTextView)

findViewById(R.id.autoCompleteTextView1);

tvarti = (TextView) findViewById(R.id.tvArti);

File folder = new

File(Environment.getExternalStorageDirectory() +

"/contoh"); String csv =

folder.toString()+"/"+"kerjaku.csv";

KMP k = new KMP();

String cari = actv.getText().toString(); System.out.println("Terjemahan kata "+cari);

BufferedReader br = null;

String line = "";

String cvsSplitBy = "#";

int ketemu = 0; try {

br = new BufferedReader(new FileReader(csv)); while ((line = br.readLine()) != null) {

String[] kamus = line.split(cvsSplitBy);

String kata = kamus[0]; String arti = kamus[1];

int first_occur_position = k.kmp(kata , cari);

if(first_occur_position >= 0){ tvarti.setText(kata + "="+arti); System.out.println(kata + "="+arti); ketemu += 1;

}


(4)

}

} catch (FileNotFoundException e) { e.printStackTrace();

} catch (IOException e) { e.printStackTrace(); } finally {

if (br != null) { try {

br.close();

} catch (IOException e) { e.printStackTrace();

} }

}

System.out.println("Proses Baca Data Selesai");

if(ketemu<1){

tvarti.setText("Kata Tidak Ditemukan");

}

edkata.setText("");

}

});

b2.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub Intent i = new Intent(CariKata.this, TambahKata.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i); } }); btn2kembali.setOnClickListener(new View.OnClickListener() { @Override

public void onClick(View v) {


(5)

Intent i = new Intent(CariKata.this, MainActivity.class); startActivity(i); } }); } } KMP.java package com.indah.kmp; public class KMP {

public int[] prekmp(String pattern) {

int[] next = new int[pattern.length()]; int i=0, j=-1;

next[0]=-1;

while (i<pattern.length()-1) { while (j>=0 &&

pattern.charAt(i)!=pattern.charAt(j)) j = next[j]; i++;

j++;

next[i] = j; }

return next; }

public int kmp(String text, String pattern) { int[] next = prekmp(pattern);

int i=0, j=0;

while (i<text.length()) { while (j>=0 &&

text.charAt(i)!=pattern.charAt(j)) j = next[j]; i++; j++;

if (j==pattern.length()) return i-pattern.length();

}

return -1; }


(6)

} MainActivity.java package com.indah.kmp; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import android.support.v7.app.ActionBarActivity; import android.content.Intent; //indah tmbah import android.os.Bundle; import android.os.Environment; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView;

public class MainActivity extends ActionBarActivity {

Button cari, tambah;

@Override

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.dashboard);

cari = (Button) findViewById (R.id.button_cari);

tambah = (Button) findViewById (R.id.button_tambah);

cari.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent i = new Intent(MainActivity.this, CariKata.class);

startActivity(i);


(7)

});

tambah.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent i = new Intent(MainActivity.this, TambahKata.class);

startActivity(i);

} });

}

@Override

public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

int id = item.getItemId();

if (id == R.id.action_settings) { return true;

}

return super.onOptionsItemSelected(item); }

}

TambahKata.java

package com.indah.kmp;

import java.io.BufferedReader; import java.io.File;

import java.io.FileNotFoundException; import java.io.FileReader;


(8)

import java.io.IOException; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView;

public class TambahKata extends Activity { Button btn2;

Button b1;

Button btnsimpan;

TextView tvarti, tvnotfound; EditText edkata, edarti;

@Override

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.tambah_kata);

b1 = (Button) findViewById (R.id.btncari); btn2 = (Button)findViewById(R.id.btn2);

btn2.setOnClickListener( new View.OnClickListener(){

@Override

public void onClick(View v) {

Intent i = new Intent(TambahKata.this, MainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i); } }); b1.setOnClickListener(new View.OnClickListener() { @Override


(9)

edkata =

(EditText)findViewById(R.id.edkata); edarti =

(EditText)findViewById(R.id.edarti);

String kata = edkata.getText().toString(); String arti = edarti.getText().toString();

List<String> listkata = new

ArrayList<String>();

List<String> listarti = new ArrayList<String>();

File folder = new

File(Environment.getExternalStorageDirectory() + "/contoh");

String csvFile =

folder.toString()+"/"+"kerjaku.csv";

BufferedReader br = null; String line = "";

String cvsSplitBy = "#"; try {

br = new BufferedReader(new FileReader(csvFile));

while ((line = br.readLine()) != null) { String[] kamus = line.split(cvsSplitBy); String kata_b = kamus[0];

String arti_b = kamus[1];

listkata.add(kata_b); //terus di masukin ke kotak

listarti.add(arti_b);

}

} catch (FileNotFoundException e) { e.printStackTrace();

} catch (IOException e) { e.printStackTrace(); } finally {

if (br != null) { try {

br.close(); } catch (IOException e) {

e.printStackTrace(); }


(10)

}

System.out.println("Proses Baca Data Selesai");

try {

String NamaFile = folder.toString()+"/"+"kerjaku.csv";

FileWriter writer = new FileWriter(NamaFile);

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

String s_kata = listkata.get(i); String s_arti = listarti.get(i); writer.append(s_kata); writer.append('#'); writer.append(s_arti); writer.append('\n'); } writer.append(kata); writer.append('#'); writer.append(arti); writer.append('\n'); writer.flush(); writer.close(); } catch(IOException e) { e.printStackTrace(); } System.out.println("Proses Input Selesai"); } }); } } Tentang.Java


(11)

package com.indah.kmp;

import android.app.Activity; import android.content.Intent; import android.os.Bundle;

import android.view.View; import android.widget.Button;

public class Tentang extends Activity { Button btn1;

@Override

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.tentang);

btn1 = (Button)findViewById(R.id.button1); btn1.setOnClickListener( new View.OnClickListener(){

@Override

public void onClick(View v) {

Intent i = new Intent(Tentang.this, MainActivity.class);

i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i);

} });

} }

Bantuan.Java

package com.indah.kmp;

import android.app.Activity; import android.content.Intent; import android.os.Bundle;

import android.view.View; import android.widget.Button;

public class Bantuan extends Activity { Button btn1;


(12)

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.tentang);

btn1 = (Button)findViewById(R.id.button1); btn1.setOnClickListener( new View.OnClickListener(){

@Override

public void onClick(View v) {

Intent i = new Intent(Bantuan.this, MainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i); } }); } } activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android " xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:background="@drawable/kamus" tools:context="com.indah.kmp.MainActivity" > <Button android:id="@+id/button_tambah" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/btncari" android:layout_alignBottom="@+id/btncari" android:layout_alignParentRight="true" android:text="Tambah Kata"/>


(13)

android:id="@+id/btncari" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/textView3" android:layout_alignLeft="@+id/textView1" android:layout_marginBottom="18dp"

android:text="Cari" />

<TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/btncari" android:layout_centerVertical="true" android:textColor="#FF6600" android:text="Arti" android:textSize="27sp" android:textStyle="bold" /> <TextView android:id="@+id/tvArti" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@+id/btncari" android:layout_below="@+id/textView3" android:layout_marginTop="20dp" android:textColor="#000000" android:text="TextView" android:textSize="15sp" /> <AutoCompleteTextView android:id="@+id/autoCompleteTextView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView1" android:layout_below="@+id/textView1" android:layout_marginTop="16dp" android:ems="10" > <requestFocus /> </AutoCompleteTextView> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:textColor="#FF6600" android:text="Kata"


(14)

android:textSize="27sp" android:textStyle="bold" /> <Button android:id="@+id/btn2_cari" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button_tambah" android:layout_alignParentBottom="true" android:layout_alignRight="@+id/button_tambah" android:layout_marginBottom="24dp" android:layout_marginRight="17dp" android:text="Kembali" />

</RelativeLayout>

bantuan.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android " android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMediu m" />

android:text="Bantuan Menggunakan Aplikasi"

<EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:inputType="textMultiLine" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Kembali" />


(15)

dashboard.xml

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android " android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/huruf" android:src="@drawable/icon" > <Button android:id="@+id/button_cari" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_marginRight="35dp" android:layout_marginTop="86dp" android:layout_toLeftOf="@+id/button_tambah" android:height="80dp" android:text="Cari Kata" android:width="120dp" /> <Button android:id="@+id/button_tambah" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignTop="@+id/button_cari" android:layout_marginRight="26dp" android:height="80dp" android:text="Tambah Kata" android:width="120dp" /> <Button android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button_tambah" android:layout_centerVertical="true" android:height="80dp" android:text="Bantuan" android:width="120dp" /> <Button android:id="@+id/button3"


(16)

android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button_cari" android:layout_centerVertical="true" android:height="80dp" android:text="Tentang Aplikasi" android:width="120dp" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button_cari" android:layout_alignParentTop="true" android:layout_alignRight="@+id/button_tambah" android:gravity="center" android:layout_marginTop="28dp"

android:text="KAMUS ISTILAH KOMPUTER"

android:textAppearance="?android:attr/textAppearanceMediu m" />

</RelativeLayout>

tambah_kata.xml

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android " android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/addkamus" android:orientation="vertical" > <Button android:id="@+id/btn2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_marginBottom="24dp" android:layout_marginRight="27dp" android:text="Kembali" /> <EditText android:id="@+id/edarti" android:layout_width="match_parent" android:layout_height="wrap_content"


(17)

android:layout_alignBottom="@+id/btncari" android:layout_alignLeft="@+id/textView3" android:layout_alignRight="@+id/btn2" android:layout_marginBottom="57dp" android:ems="10" > <requestFocus /> </EditText> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Kata" android:textColor="#FF6600" android:textSize="27sp" android:textStyle="bold" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="18dp" android:layout_marginTop="26dp" android:textAppearance="?android:attr/textAppearanceMediu m" /> <EditText android:id="@+id/edkata" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView3" android:layout_alignRight="@+id/edarti" android:layout_below="@+id/textView2" android:layout_marginTop="27dp" android:ems="10" /> <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView2" android:layout_below="@+id/edkata" android:layout_marginTop="26dp" android:text="Arti" android:textSize="27sp" android:textStyle="bold" android:textColor="#FF6600" android:textAppearance="?android:attr/textAppearanceMediu m" />


(18)

<Button android:id="@+id/btncari" android:layout_width="146dp" android:layout_height="wrap_content" android:layout_above="@+id/btn2" android:layout_alignLeft="@+id/textView3" android:layout_marginBottom="76dp" android:text="Simpan" /> </RelativeLayout> Tentang.xml

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android " android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/tentang" android:orientation="vertical" android:singleLine="false" > <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMediu m" />

android:text="Tentang Aplikasi Komputer"

<TextView android:id="@+id/textView2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/textView1" android:layout_marginTop="35dp" android:layout_weight="0.11"

android:text="Kamus Istilah Komputer ini yaitu sebuah alat bantu bagi manusia untuk mendapatkan arti dari suatu kata atau istilah yang biasanya disusun berdasarkan abjad sehingga akan lebih mudah mengetahui makna dari istilah komputer. Dengan menggunakan

perangkat teknologi mobile device berbasis android

sebagai alat yang lebih praktis karena sifatnya portable sehingga memudahkan bagi yang ingin mendapatkan informasi mengenai Istilah komputer." />


(19)

<Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/textView2" android:layout_marginTop="47dp"

android:text="Kembali" /> </RelativeLayout>

Bantuan.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android " android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/bantuan" android:orientation="vertical" > <TextView android:id="@+id/textView2" android:layout_width="match_parent" android:layout_weight="0.00" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge " />

android:text="Bantuan Menggunakan Aplikasi"

<TextView

android:id="@+id/textView1" android:layout_width="228dp"

android:layout_height="wrap_content"

android:text="1. Instal KMP.apk pada handpone Android. 2. lalu buka aplikasi KMP3. Terdapat 4 menu tombol pada Halaman Utama 4. Tombol CARI KATA yaitu halaman untuk melakukan pencarian istilah komputer.5. Tombol TAMBAH KATA yaitu halaman untuk menambah kosa kata baru istilah komputer .6. Tombol TENTANG yaitu Halaman untuk mengetahui tentang Aplikasi Komputer 7. Tombol BANTUAN yaitu Halamat untuk mendapatkan cara menggunakan Aplikasi." />

<Button


(20)

android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Kembali" />

</LinearLayout>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android " package="com.indah.kmp" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <application android:allowBackup="true" android:icon="@drawable/iconbaru" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".TambahKata" android:label="@string/app_name" > </activity>


(21)

<activity

android:name=".CariKata"

android:label="@string/app_name" > </activity>

<activity

android:name=".Tentang"

android:label="@string/app_name" > </activity>

</application>

</manifest>


(22)

Daftar Pustaka

Alwi,dkk. 2003. Tata Bahasa Baku Bahasa Indonesia Edisi Ketiga. Jakarta: Balai Pusaka.

Atrinawati, Lovinta Happy. 2006. Mengembangkan Aplikasi Enterprise Berbasis

Android . Yogjakarta. Gava Media.

Bentley, Lonnie D dan Whitten, Jeffrey L. 2007. Sistems Analysis and Design for

the Global Enterprise, 7th Edition, International Edition. McGrawHill, New York.

Cormen, Thomas H, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. 2009. Introduction to Algorithms 3rd Ed, hal 1002-1012. London. The MIT Press.

Manning, C, Raghavan, P & Schütze, R. 2009. An Introduction to Information

Retrieval. (online). http://nlp.stanford.edu/IR-book/pdf/irbookonlinereading.pdf (diakses 9 mei 2014).

D.E. KNUTH, J.H. MORRIS, V.R. PRATT. 1977. Fast Pattern Matching in Strings. SIAM Journal of Computing 6, 2, 323-350. (online)

2015).

Febriyan, Rama .2013.Penggunaan Pattern Macthing dalam Penentuan Gen pada

BLAST. Institut Teknologi Bandung.

Huda, Arif Akbarul Huda. 2013. Live Coding! 9 Aplikasi Android Buatan Sendiri. Yogyakarta:Andi.

Hoetomo. 2005. Kamus Lengkap Bahasa Indonesia. Surabaya : Mitra Pelajar. Jogiyanto. 2005. Pengenalan Komputer. Yogyakarta: Andi.

Munir, Rinaldi. 2001. Algoritma & Pemrograman dalam Bahasa Pascal dan C

(Buku 1&2). Bandung: Informatika.

Nimisha Singla, Deepak Garg. 2012. String Matching Algorithms and their

Applicability in various Applications . International Journal of Soft

Computing and Engineering (IJSCE) I (6 ) : 218-222. (online) http://ijcsi.org/papers/IJCSI-9-1-1-219-226.pdf (diakses 30 mei 2014).

Poerwadarminta. 2007. Kamus Umum Bahasa Indonesia. Jakarta: Balai Pustaka. Purwanto, Eko Budi. 2008. Perancangan & Analisis Algoritma. Yogyakarta.:Graha


(23)

Safaat, Nazruddin. 2011. Pemrograman Aplikasi Mobile. Bandung:Informatika. Safaat, Nazruddin. 2014. Pemrograman Aplikasi Mobile smartphone dan Tablet PC

berbasis Android. Bandung:Informatika.

Satyaputra, Alfa, Eva Maulina. 2014. Beginning Android Pemrograming with ADT

Budle . Yogjakarta. Alex Media Komputindo.

Shafranovich, Y .2005. Common Format and MIME type For Comma-Separated

Values (CSV) Files.

Utomo, Eko Priyo. 2009. Panduan Mudah Mengenal Bahasa Java. Jakarta:Yraa Widya

Wicaksono, Kukuh Nasrul. 2007. Penerapan Algoritma Pencocokan String

Knuth-Morris-Pratt Sebagai Algoritma Pencocokan DNA. (online).


(24)

BAB 3

ANALISIS DAN PERANCANGAN SISTEM

3.1 Analisis Sistem

Masalah utama yang diangkat dari penelitian ini adalah Bagaimana merancang dan membangun aplikasi yang dapat mendukung pencarian istilah komputer dengan metode Algoritma Knuth Morris Pratt String Matching berbasis Android.

Gambar 3.1. merupakan diagram Ishikawa yang dapat digunakan untuk menganalisis masalah. Bagian kepala atau segiempat yang berada di sebelah kanan merupakan masalah. Sementara di pada bagian tulang merupakan penyebab.

Gambar 3.1 Diagram Ishikawa Untuk Analisis Masalah

Sistem pembuatan kamus istilah komputer ini menggunakan Unified Modeling

Language (UML). Sistem yang akan dibangun menggunakan Eclipse yang


(25)

operasi mobile yang dalam hal ini sistem akan dikembangkan untuk perangkat

Android.

Dalam Model UML ini akan digambarkan beberapa pemodelan dari sistem yang akan dibangun. Dari pemodelan requirement, pemodelan Analysis dan pemodelan Design. Tool yang digunakan untuk menggambarkan model UML adalah

Umlet.

3.2. Analisis Kebutuhan Sistem

Untuk membangun sebuah sistem, perlu dilakukan sebuah tahap analisis kebutuhan sistem. Analisis kebutuhan sistem dapat dikelompokkan menjadi 2 bagian yaitu: kebutuhan fungsional dan kebutuhan non-fungsional.

3.2.1. Kebutuhan Fungsional

Kebutuhan fungsional dibutuhkan untuk mengetahui hal-hal yang bisa dikerjakan oleh sistem. Kebutuhan fungsional sistem yang akan dirancang antara lain sebagai berikut:

1. Sistem harus menyediakan Versi Android yang sudah ditentukan untuk menginstal aplikasi Kamus Berbasis Android

2. Sistem dapat melakukan pencarian untuk mencari istilah atau kata pada komputer agar mendapatkan informasi kata tersebut dengan mengimplementasikan algoritma Knuth Morris Pratt String Matching.

3. Sistem dapat menyediakan tempat untuk menambahkan kosa kata yang baru sehingga pengguna aplikasi dapat menyimpan kata atau istilah yang berhubungan dengan komputer.

4. System dapat memberi informasi bantuan terhadap penggunakan aplikasi kamus tersebut.


(26)

3.2.2. Kebutuhan Non-Fungsional

Kebutuhan non-fungsional merupakan deskripsi dari beberapa fitur, karateristik, dan batasan suatu sistem. Kebutuhan Non-Fungsional dari sistem adalah:

1. Mudah digunakan (User friendly) yaitu Sistem yang akan dibangun harus user

friendly, artinya bahwa sistem mudah digunakan oleh user dengan tampilan

(interface) yang sederhana dan mudah dimengerti.

2. Menjadi Referensi yaitu Sistem yang akan dibangun diharapkan mampu menjadi referensi bagi user untuk mencari istilah komputer serta dapat menambahkan istilah komputer yang belum terdapat pada database istilah.

3. Pelayanan Sistem yang telah dirancang bisa dikembangkan ke tingkat yang lebih kompleks lagi bagi pihak-pihak yang ingin mengembangkan sistem tersebut sehingga solusi yang diberikan lebih efektif.

4. Tampilan antarmuka sistem dapat dengan mudah dimengerti oleh pengguna sistem.

5. Perangkat lunak yang dibangun akan menampilkan pesan not found untuk setiap kata istilah yang tidak tersimpan dalam databasenya.

3.3. Pemodelan Sistem

Pemodelan sistem yang dirancang penulis bertujuan menggambarkan kondisi dan bagian-bagian yang berperan dalam sistem yang dirancang. Pemodelan sistem dilakukan dengan membuat use-case diagram, activity diagram dan sequence

diagram.

3.3.1. Use-Case Diagram

Use case merupakan fungsionalitas dari suatu sistem, sehingga customer atau

pengguna sistem paham dan mengerti mengenai kegunaan sistem yang akan dibangun. Use case berperan menggambarkan interaksi antar komponen-komponen yang berperan dalam sistem yang akan dirancang. Use case pada gambar 3.2 menjelaskan aksi yang dapat dilakukan oleh user, user dapat melakukan pencarian istilah komputer dan akan mengecek istilah tersebut ada atau tidak ada pada aplikasi kamus komputer serta dapat menambahkan kosa kata istilah baru pada aplikasi kamus komputer.


(27)

,Gambar 3.2 Use Case Algoritma Knuth morris pratt

3.3.2. Activity Diagram

Activity diagram merupakan salah satu cara memodelkan event-event yang terjadi

dalam use case. Pada diagram ini secara ensensial mirip dengan diagram alir (Flowchart), memperlihatkan aliran kendali dari suatu aktifitas ke aktifitas lainnya.

Activity diagram berfungsi untuk menvisualisasikan, menspesifikasi, mengkonstruksi,

serta mendokumentasikan sifat dari sekumpulan objek, selain itu juga dapat digunakan memodelkan aliran kendali dari suatu operasi. Seperti tampak pada gambar gambar berikut ini:


(28)

(29)

(30)

(31)

(32)

(33)

Tabel 3.1. Keterangan Bagian-Bagian Rancangan Halaman Utama

3.3.3. Sequence Diagram

Sequence Diagram ialah interaksi antar objek dalam sebuah system yang biasa

digunakan untuk menggambarkan scenario atau rangkaian langkah-langkah yang dilakukan sebagai respon dari sebuah event uuntuk menghasilkan output tertentu. Diawali dari apa yang men-trigger aktivitas tersebut, proses dan perubahan apa saja yang terjadi secara internal dan output apa yang dihasilkan. Seperti pada gambar 3.8: Name Activity Diagram Activity diagram System

Actors User

Deskripsi Activity ini mendeskripsikan proses System pada Aplikasi Kamus Komputer

Prakondisi Sudah Masuk ke tampilan utama Bidang Khas Suatu

Kejadian

Kegiatan User Respon system 1. Memilih menu tombol

2. Menekan tombol cari kata

3. Menginputkan istilah yang ingin dicari

4. Menekan tombol tambah kata

5. Menambahkan arti dan kata yang baru

6. Menekan tombol tentang

7. Menekan tombol

bantuan.

1. System menampilkan halaman yang dipilih 2. System akan melakukan

searching pada dataset 3. Tampilkan arti istilah

pada kamus komputer 4. Menyimpan kosa kata

yang baru.

5. Kembali pada tampilan utama


(34)

Gambar 3.8 Sequence System Pada Kamus Komputer

Dari keterangan diatas dapat digambarkan dengan sequence diagram mengenai informasi sistem yang berjalan saat ini, sehingga dengan diagram ini dapat menggambarkan pergerakan sebuah objek dan pesan yang terjadi di dalam sistem penyampaian informasi

3.4. Perancangan Sistem

Berdasarkan gambaran dari hasil analisis proses maka dibangun suatu model rancangan flowchart sistem dan juga rancangan antar muka system.


(35)

3.4.1. Flowchart System


(36)

Keterangan :

Pada gambar 3.9 dijelaskan mengenai Menu Utama Aplikasi. User dapat masuk melalui halaman menu utama dan melakukan pilihan di aplikasi kamus tersebut. User dapat memilih melakukan pencarian istilah komputer, user dapat menambahkan kata baru untuk dimasukkan ke Kamus komputer, user juga dapat melihat informasi bantuan terkait aplikasi kamus tersebut dan user juga dapat mengetahui cara penggunakan kamus tesebut.

3.4.2. Flowchart Algoritma Knuth morris pratt

Pada gambar 3.10. merupakan penjelasan dari algoritma Knuth Morris Pratt, flowchart ini menjelaskan bagaimana metode Knuth Morris Pratt mendapatkan output yang berupa posisi karakter yang cocok. Terlihat pada gambar, metode knuth Morris

Pratt menyimpan nilai pergeseran dalam variable (i), pergeseran dilakukan sebanyak


(37)

Gambar 3.10. Flowchart Proses Knuth morris pratt

tidak

ya tidak

Input pattern yang akan dicari Array s

Selama (in)

Selesai Output i – q;

ya Mulai

Proses Perhitungan Panjang Karakter Pattern s(m) dan panjang karakter teks w(n)

Jika (s[q+1]==w[i+1])

qq+1 ii+1

Jika (q==m)

Jika (q==0)

II +1

Proses Geser Pola ke Kanan ya

tidak Array int s – output

Int, p 0 (awalan saat ini dalam s) Int, I 0 (posisi dari karakter di w)

tidak


(38)

3.5.Perancangan Antarmuka Sistem

Untuk rancangan antar muka dari sistem yang akan dibangun menggunakan bahasa pemograman Java. Sistem akan dibangun menggunakan compiler Eclipse Luna dengan Android SDK. Handphone digunakan untuk menampilkan antar muka yang

responsive (menyesuaikan dengan display perangkat, tempat aplikasi berjalan). Antar

muka menggunakan 1 Menu Utama dan 4 halaman setiap antar muka : Menu Utama

1.1Cari (System pencarian Istilah komputer) a. Pencarian

b. Tambah kata c. Kembali

1.2Tambah Kata ( sistem untuk menambahkan istilah baru) a. Simpan (melakukan penyimpanan kata dan artinya) b. Kembali (kembali ke menu utama)

1.3Tentang (Menjelaskan mengenai pembuat aplikasi) a. Kembali

1.4Bantuan (Menjelaskan mengenai penggunaan aplikasi) a. Kembali

3.5.1. Halaman Utama

Halaman utama merupakan tampilan awal yang menampati nama dari project program tersebut, ketika program dijalankan pada handphone ataupun pada emulator. Setelah tampil Dimana halaman utama ini terdiri dari beberapa tombol, yaitu tombol cari, tombol tambah kata, tombol tentang dan tombol About . Tampilan rancangan halaman utama dapat dilihat pada Gambar 3.11.

Untuk melakukan pencarian, masukkan pada tombol cari kata kemudian pilih menu kemudian akan muncul halaman dari pilihan menu. Tampilan rancangan halaman utama dapat dilihat pada Gambar 3.11.


(39)

Gambar 3.11 Rancangan Halaman Utama

Tabel 3.1. Keterangan Bagian-Bagian Rancangan Halaman Utama NO. Jenis Objek Keterangan

1 Nama aplikasi

(Edit Teks)

Judul Aplikasi yang akan dirancang.

2 Nama halaman utama Edit Teks

Sub judul aplikasi

3 Tombol cari Berisi halaman pencari 4 Tombol tambah kata Berisi halaman tambah kata

5 Tombol tentang Menu yang berisi sekilas tentang aplikasi 6 Tombol bantuan Berisi informasi bantuan pengguna aplikasi


(40)

Keterangan :

Untuk dapat menjalankan program pada emulator eclipse atau handphone, terlebih dahulu harus membuat Android SDK dan AVD Manager, setelah selesai kemudian

create AVD, kemudian buat project baru pada eclipse kemudian tentukan Project Name, Applicationa Name, Package Name, Create Activity dan Min SDK Version,

setelah selesai diisi semuanya kemudian finish. Selanjutnya setelah selesai pembentukan project pada eclipse kemudian dimulai dengan pengetikan program. Sebelum memulai pengetikan, terlebih dahulu atur path penyimpanan dan tentukan nama file dari proyek yang telah dibuat sebelumnya pada eclipse. Setelah selesai pengetikan kemudian simpan ke file dan buka kembali eclipse untuk menjalankan program

3.5.2. Rancangan Halaman Pencarian Kata


(41)

Halaman Pencarian Kata ini yang akan kita gunakan untuk mendapatkan istilah komputer dengan menggunakan metode algoritma Knuth-Morris-Pratt yang membantu untuk mencari kata lebih cepat. Karena algoritma ini melakukan pergeseran lebih cepat untuk membaca karakter yang dicari .

Disini menggunakan Auto Complete Text View yang berfungsi untuk memberi pilihan yang kita cari. Contohnya, jika kita mengetikkan satu kata pada google.com. saat masih mengetikkan beberapa huruf, google akan otomatis memberi beberapa pilihan untuk kita pilih, sehingga tidak perlu lagi mengetik secara lengkap.

Tabel 3.2. Keterangan Bagian-Bagian Rancangan Halaman Pencarian Kata NO. Jenis Objek Keterangan

1 Nama Aplikasi Teks view

Judul aplikasi yang dibuat

2 Kolom kata (Edit Teks)

Tempat melakukan pencarian kata

3 Tombol cari Tombol ini akan melakukan pencarian

menggunakan menggunakan Algoritma String

Matching yang akan mencari databasenya dengan

fotmat .csv

4 Tombol tambah kata Tombol ini akan ke halaman tambah kata yang akan masuk ke format .csv


(42)

3.5.2. Rancangan Halaman Tambah Kata

Halaman ini Pengguna Aplikasi akan dapat menambahkan sendiri Kosa Kata yang baru agar memperkaya Istilah yang terdapat dalam Aplikasi Kamus Komputer.

Gambar 3.13 Rancangan Halaman Tambah Kata

Tabel 3.3. Keterangan Bagian-Bagian Rancangan Tambah Kata NO. Jenis Objek Keterangan

1 Teks View Keterangan nama pada kolom kata

2 Kolom kata (Edit Teks)

Tempat melakukan pencarian kata

3 Tombol cari Tombol ini akan melakukan pencarian

4 Tombol simpan Tombol ini akan melakukan penyimpanan ke dalam format .csv


(43)

3.5.2. Rancangan Halaman Tentang

Rancangan halaman Tentang ini berfungsi menampilkan informasi tentang

Aplikasi Kamus Komputer. Rancangan About dapat dilihat pada Gambar 3.14.

Gambar 3.14. Rancangan Halaman Tentang Aplikasi

Tabel 3.4. Keterangan Bagian-Bagian Rancangan Tentang Aplikasi NO. Jenis Objek Keterangan

1 Teks view Judul halaman tentang

2 Edit Teks Keterangan pada halaman tentang


(44)

3.6.4. Rancangan Halaman Bantuan

Rancangan Halaman Bantuan ini akan menginformasikan bagaimana cara menggunakan Aplikasi Kamus komputer tersebut kepada setiap pengguna yang akan mencari kata atau istilah komputer.

Gambar 3.15. Rancangan Rancangan Tampilan Bantuan

Tabel 3.5. Keterangan Rancangan Tampilan Bantuan NO. Jenis Objek Keterangan

1 Teks view Judul halaman Bantuan

2 Edit Teks Keterangan pada halaman Bantuan


(45)

BAB 4

IMPLEMENTASI DAN PENGUJIAN

4.1. Pengujian Sistem

Pencarian istilah dalam kamus komputer dirancang akan menggunakan algoritma

string matching sebagai solusi dalam pencarian istilah berdasarkan isi Kamus,

berhubung isi kamus komputer yang sangat banyak, maka sangat sulit untuk merealisasikan penyajian arti dari istilah berdasarkan isi Kamus komputer secara keseluruhan karena terbatasnya ukuran layar handphone yang berbasis Android. Oleh karena itu pada implementasi algoritma string matching untuk pencarian istilah dalam kamus komputer diharapkan dapat menyelesaikan masalah tersebut, dimana dalam algoritma string matching penyajian arti dari istilah lebih sedikit karena adanya proses seleksi sampai ditemukan istilah berdasarkan isi kamus itu sendiri dengan menggunakan kata kunci. Dalam algoritma string matching, pencarian string dirumuskan sebagai berikut:

1. Sebuah teks (text), yaitu sebuah long string yang panjang n karakter

2. Pattern, yaitu sebuah string dengan panjang m karakter (m<n) yang akan dicari

dalam text.

Dalam algoritma pencocokan string, teks diasumsikan berada dalam memori, sehingga bila kita mencari string di dalam sebuah arsip, maka semua isi arsip perlu dibaca terlebih dahulu kemudian disimpan didalam memory. Jika pattern muncul lebih dari sekali didalam teks, maka pencarian hanya akan memberikan keluaran berupa lokasi pattern ditemukan pertama kali.

Algoritma Knuth , Morris dan Pratt memanfaatkan informasi yang diperoleh dengan perbandingan simbol sebelumnya. Ini tidak pernah kembali membandingkan simbol teks yang telah cocok simbol pattern. Ada beberapa definisi yang perlu dipahami pada algoritma ini: Misalkan A adalah alfabet dan x = x1x2…xk adalah


(46)

Awalan (prefix) dari x adalah upa-string (substring) u dengan u = x1x2…xj – 1 , j є{1, 2, …, k}

dengan kata lain, x diawali dengan u.

Akhiran (suffix) dari x adalah upa-string(substring) u dengan u = xj – b xj – b + 1 …xk , j є {1, 2, …, k}

dengan kata lain, x di akhiri dengan v.

Pinggiran (border) dari x adalah upa-string r sedemikian sehingga r = x1x2…xj – 1

dan

u = xj – b xj – b + 1 …xj ,

j є {1, 2, …, k}

dengan kata lain, pinggiran dari x adalah upastring yang keduanya awalan dan juga akhiran sebenarnya dari x.

Misalkan A adalah alfabet dan x = x0 ..., bilangan elemen k - 1 xk serangkaian panjang k atas A. Sebuah awalan x adalah substring u dengan u = x0 ... xb - 1 di mana b elemen {0 , ... , k} yaitu x dimulai dengan u. Sebuah akhiran x adalah substring u dengan u = xk - b ... xk - 1 di mana b elemen {0 , ... , k}

yaitu x berakhir dengan u.

Sebuah awalan u x atau akhiran u x disebut awalan yang tepat atau akhiran, masing-masing, jika equalx Unot, yaitu jika panjang b kurang dari k.

Sebuah perbatasan x adalah r substring dengan r = x0 ... xb - 1 dan r = xk - b ... xk - 1 di mana b elemen {0 , ... , k - 1}

Sebuah perbatasan x adalah substring yang baik awalan yang tepat dan akhiran yang tepat x. Kami menyebutnya panjangnya b lebar perbatasan.

Contoh: Misalkan x = Abacab. Awalan yang tepat x adalah

ε, a, ab, aba, Primero, abaca

Akhiran yang tepat x adalah

ε, b, ab, taksi, ACAB, bacab

Perbatasan x adalah


(47)

Perbatasan ε memiliki lebar 0, perbatasan ab memiliki lebar 2. The string kosong ε

selalu perbatasan x, untuk semua x elemen A +. String kosong ε sendiri tidak memiliki perbatasan.

Contoh berikut menggambarkan bagaimana jarak pergeseran algoritma Knuth -

Morris - Pratt ditentukan dengan menggunakan gagasan perbatasan string.

contoh :

0 1 2 3 4 5 6 7 8 9... a b c a b c a b d a b c a b d a b c a b d

Simbol pada posisi 0,...,4 telah dicocokkan. Perbandingan c - d pada posisi 5 menghasilkan ketidakcocokan. Pattern bisa digeser oleh 3 posisi, dan perbandingan yang kembali pada posisi 5.

Jarak pergeseran ditentukan oleh perbatasan terluas dari awalan pencocokan p. Dalam contoh ini , awalan pencocokan abcab , panjangnya j = 5. Perbatasan terluas adalah ab lebar b = 2. Jarak shift j - b = 5-2 = 3.

Pada tahap preprocessing, lebar perbatasan terluas setiap awalan dari pattern ditentukan. Kemudian pada tahap pencarian, jarak pergeseran dapat dihitung sesuai dengan awalan yang cocok .

Teorema : Biarkan r, s menjadi perbatasan string x, di mana | r | < | s |. Maka r adalah perbatasan s.

Bukti : Gambar 1 menunjukkan string x dengan batas r dan s. Karena r adalah awalan dari x, juga merupakan awalan yang tepat s, karena lebih pendek dari s. Tetapi r juga merupakan akhiran x dan, oleh karena itu, akhiran yang tepat s. Dengan demikian r adalah perbatasan s


(48)

Definisi: Misalkan x berupa string dan elemen A simbol . Sebuah r perbatasan x dapat diperpanjang oleh , jika ra adalah perbatasan xa .

Gambar 4.2. Perpanjangan Perbatasan

Gambar 4.2 menunjukkan bahwa r perbatasan j lebar x dapat diperpanjang oleh , jika xj = a .

Pada tahap preprocessing array b panjang m + 1 dihitung . Setiap entri b [ i ] berisi lebar perbatasan terluas awalan panjang i dari pattern ( i = 0 , ... , m ) . Karena ε awalan panjang i = 0 tidak memiliki perbatasan , dan menetapkan b [ 0 ] = -1 .

Gambar 4.3 : Awalan panjang i dari pattern dengan perbatasan lebar b [ i ]

Asalkan nilai b [ 0 ], ... , b [ i ] sudah diketahui, nilai b [ i + 1 ] dihitung dengan memeriksa jika perbatasan p0 awalan ... pi - 1 dapat diperpanjang oleh simbol pi. Hal ini terjadi jika pb [ i ] = pi ( Gambar 4.3 ). Perbatasan untuk diperiksa diperoleh dalam urutan menurun dari nilai b [ i ], b [ b [ i ] ] dll

Algoritma preprocessing terdiri dari lingkaran dengan j variabel mengambil nilai-nilai ini. Sebuah perbatasan lebar j dapat diperpanjang oleh pi, jika pj = pi. Jika tidak, perbatasan berikutnya terluas diperiksa dengan menetapkan j = b [ j ]. Loop berakhir paling lambat jika tidak ada batas dapat diperpanjang ( j = -1 ).


(49)

Setelah meningkatkan j oleh pernyataan j++ dalam setiap kasus j adalah lebar perbatasan terluas dari p0 ... pi. Nilai ini ditulis untuk b[ i + 1 ] (b [ i ] setelah meningkat i dengan pernyataan i ++).

Proses Algoritma

void kmpPreprocess() {

int i=0, j=-1; b[i]=j;

while (i<m)

{

while (j>=0 && p[i]!=p[j]) j=b[j]; // karakter berikutnya yang tidak cocok i++; j++; // karakter berikutnya yang tidak cocok b[i]=j;

} }

Contoh : Untuk pattern p = ababaa lebar dari perbatasan dalam array b memiliki nilai berikut . Misalnya kita telah b [ 5 ] = 3 , karena ababa awalan panjang 5 memiliki perbatasan lebar 3

.

j: 0 1 2 3 4 5 6

p[j]: a b a b a a b[j]: -1 0 0 1 2 3 1

Secara konseptual , algoritma preprocessing di atas dapat diterapkan pada string pt bukan p . Jika sampai batas lebar m dihitung saja, maka perbatasan m lebar beberapa awalan x pt sesuai dengan perbandingan dari pattern di t (asalkan perbatasan tidak self- overlapping ) ( Gambar 4.4 ) .


(50)

Hal ini menjelaskan kesamaan antara algoritma preprocessing dan algoritma pencarian berikut .

Pencarian Algoritma

void kmpSearch() {

int i=0, j=0;

while (i<n) // memindai teks dari kiri ke kanan

{

while (j>=0 && t[i]!=p[j]) j=b[j]; // karakter berikutnya yang tidak cocok

i++; j++; // karakter berikutnya yang tidak cocok if (j==m) // Apakah semua Pattern cocok? {

report(i-j); j=b[j]; }

} }

Keterangan :

Ketika di saat loop ketidakcocokan pada posisi j terjadi ,perbatasan terluas dari awalan pencocokan panjang j dari parttern dianggap (Gambar 4.5). Melanjutkan perbandingan pada posisi b [j], lebar perbatasan, menghasilkan pergeseran dari pattern sehingga perbatasan cocok. Jika lagi ketidakcocokan terjadi, perbatasan berikutnya terluas dianggap, dan seterusnya, sampai tidak ada batas kiri (j = -1) atau simbol berikutnya perbandingan. Kemudian kita memiliki awalan pencocokan baru dari pattern dan lanjutkan dengan while loop luar.


(51)

Gambar 4.5 : Pergeseran Pattern Ketika Ketidakcocokan Pada Posisi j Terjadi Jika semua simbol m dari pattern telah dicocokkan jendela teks yang sesuai (j = m), laporan fungsi disebut untuk melaporkan perbandingan di posisi ij. Setelah itu, pattern digeser sejauh perbatasan terluas memungkinkan.

Pada contoh berikut perbandingan yang dilakukan oleh algoritma pencarian yang ditampilkan, di mana perbandingan diambil dalam warna hijau dan ketidaksesuaian merah.

Contoh :

0 1 2 3 4 5 6 7 8 9 ... a b a b b a b a a

a b a b a c

a b a b a c

a b a b a c

a b a b a c

a b a b a c

Contoh pada aplikasi pada kamus Komputer : Teks : FAST ETHERNET

Pattern : THER

Teks :

F A S T E T H E R N E T


(52)

T H E R

Langkah 1:

F A S T E T H E R N E T

Pattern[1] tidak cocok dengan Teks[1], maka digeser satu langkah ke kanan.

Langkah 2:

F A S T E T H E R N E T

Pattern[1] tidak cocok dengan Teks[2], maka digeser 1 karakter ke kanan.

Langakah 3:

F A S T E T H E R N E T

Pattern[1] tidak cocok dengan Teks[3], maka Pettern digeser satu karakter ke kanan.

Langkah 4:

F A S T E T H E R N E T

T H E R

T H E R

T H E R


(53)

Pattern[1] cocok dengan Teks[4], maka dilanjutkan membandingkan Pattern[2]

dengan Teks[5].

Langkah 5:

F A S T E T H E R N E T

Pattern[2] ternyata tidak cocok dengan Teks[5]. Maka Pencocokan selanjutnya

dimulai lagi dari Pattern[1] dengan membandingkan Pattern[1] dengan Teks[6].

Langkah 6:

F A S T E T H E R N E T

Pattern[1] cocok dengan Teks[6], maka Pattern tidak melakukan pergeseran dan

selanjutnya membandingkan Pattern[2] dengan Teks[7].

Langkah 7:

F A S T E T H E R N E T

Pattern[2] cocok dengan Teks[7], maka dilanjutkan membandingkan Pattern[3]

dengan Teks[8].

Langkah 8:

F A S T E T H E R N E T

Pattern[3] cocok dengan Teks[8], maka dilanjutkan membandingkan Pattern[4]

dengan Teks[9].

T H E R

T H E R

T H E R


(54)

Langkah 9:

F A S T E T H E R N E T

Pattern[4] cocok dengan Teks[9], maka pencocokan berhenti karena Pattern yang

dicari telah cocok dengan Teks sehingga terbentuk pattern kata di Teks sesuai dengan

Pattern. Pencocokan berhenti meskipun karakter dalam Teks belum habis.

Berdasarkan contoh di atas maka dapat disimpulkan bahwa informasi yang digunakan untuk melakukan pergeseran adalah berdasarkan hitungan ketidak cocokan Pattern dari kiri pada Teks.

Adapun potongan script pada Eclipse yang digunakan untuk algoritma KMP

string matching sebagai berikut:

KMP.java

package com.indah.kmp;

public class KMP {

public int[] prekmp(String pattern) {

int[] next = new int[pattern.length()];

int i=0, j=-1; next[0]=-1;

while (i<pattern.length()-1) {

while (j>=0 && pattern.charAt(i)!=pattern.charAt(j))

j = next[j]; i++;

j++; next[i] = j; }

return next;


(55)

}

public int kmp(String text, String pattern) {

int[] next = prekmp(pattern);

int i=0, j=0;

while (i<text.length()) {

while (j>=0 &&

text.charAt(i)!=pattern.charAt(j))

j = next[j]; i++; j++;

if (j==pattern.length()) return i-pattern.length();

}

return -1;

} }


(56)

4.2. Implementasi Sistem

Aplikasi Kamus Komputer yang telah dirancang merupakan aplikasi kamus berbasis

mobile, dimana aplikasi mobile tersebut dapat dijalankan pada handphone yang

mendukung sistem operasi Android. Aplikasi kamus istilah komputer dibuat dengan menggunakan bahasa pemograman Java, dimana untuk mengetikan listing programnya digunakan Eclipse Luna yang merupakan perangkat lunak emulator dan berfungsi juga untuk menjalankan programnya.

Aplikasi Kamus Komputer juga menggunakan algoritma String Matching

Knuth-Morris-Pratt untuk proses pencarian istilah di dalam kamus komputer.

Algoritma ini dapat memelihara informasi yang digunakan untuk melakukan jumlah pergeseran. Algoritma menggunakan informasi tersebut untuk membuat pergeseran angka lebih jauh. Dengan algoritma Knuth-Morris-Pratt ini, waktu pencarian dapat dikurangi secara signifikan yang berguna untuk melakukan pencocokan istilah.

4.2.1 Tampilan Halaman Utama

Menu utama dapat dikatakan sebagai antar muka (user interface) antara user dengan program. Menu utama menampilkan pilihan menu yang tersedia pada program. Setelah tampil dimana halaman utama ini terdiri dari beberapa tombol, yaitu tombol cari, tombol tambah kata, tombol tentang dan tombol About. Tampilan rancangan halaman utama dapat dilihat pada Gambar 4.1.


(57)

Untuk melakukan pencarian, masukkan pada tombol Cari Kata kemudian pilih menu kemudian akan muncul halaman dari pilihan menu. Tampilan rancangan halaman utama dapat dilihat pada gambar dibawah ini. Gambar Halaman Utama setelah di install kamus komputer di layar handphone.

Gambar 4.7. Halaman Utama

4.2.2. Tampilan Halaman Cari Kata

Halaman Cari Kata ini adalah Halaman untuk melakukan pencarian terhadap istilah yang ingin diketahui maknanya pada kamus komputer. Pada saat melakukan pencarian yang digunakan yaitu dengan menggunakan Algoritma String Maching Knuth-Morris-Pratt. Algoritma ini akan melakukan pergeseran lebih jauh untuk mendapatkan teks yang cocok. Algoritma Pencarian dalam Knuth-Morris-Pratt (KMP). Pada algoritma Pencarian ini menjelaskan tahapan bagaimana algoritma Knuth-Morris-Pratt


(58)

melakukan proses pencocokan kata di dalam Pattern dengan karakter di dalam sebuah

Text, sampai dijumpai kecocokan kata yang dicari.

Dengan adanya fungsi Auto Complete Text View dapat memberi pilihan yang kita cari. Disini contohnya ingin mencari istilah “Access Server” pada saat mengetik 2 huruf. Maka akan muncul secara auto istilah yang sudah tersimpan di dataset

sebelumnya. Dengan begitu akan otomatis memberi beberapa pilihnya untuk kita pilih, sehingga tidak perlu lagi mengetik secara lengkap. Seperti gambar 4.3. adapun potongan Script pada fungsi autocomplete adalah sebagai berikut.

String[] kata = listkata.toArray(new String[listkata.size()]); ArrayAdapter adapter = new ArrayAdapter

(this,android.R.layout.simple_list_item_1,kata);

actv = (AutoCompleteTextView)

findViewById(R.id.autoCompleteTextView1);

actv.setAdapter(adapter);


(59)

Gambar 4.8. Contoh Fungsi Autocomplete

Maka setelah menggunakan fungsi Auto-Complete maka kita akan menggunakan tombol cari untuk mendapatkan informasi maknanya. Pada Halaman ini juga menyediakan Tombol Tambah Kata yaitu tombol ketika kita klik akan menuju ke tampilan Halaman Tambah Kata. Jika Ingin kembali pada Halaman Utama telah disediakan tombol Kembali.

4.2.3. Tampilan Halaman Tambah Kata

Halaman ini pengguna Aplikasi akan dapat menambahkan sendiri Kosa Kata yang baru agar memperkaya Kata atau Istilah yang terdapat dalam Aplikasi Kamus


(60)

Komputer. Disini kosa kata yang ditambah akan otomatis berada di file .csv yang akan menyimpan setiap kata atau istilah yang di inputkan.

Gambar 4.9. Halaman Tambah Kata

4.2.4. Tampilan Dataset .CSV

Pada rancangan Aplikasi ini penulis memasukkan 200 kata atau istilah di Notepad ++ dengan format .CSV. Pada dataset ini akan secara otomatis bisa menambahkan istilah baru saat berada di halaman Tambah Kata. Pada dataset ini mempunyai ketentuan bahwa file akan terbaca jika penulisannya satu baris tanpa space di dalam kerjaku.csv. Dapat dilihat pada gambar berikut :


(61)

Gambar 4.10. Penyimpanan Kata atau Istilah Komputer

Disamping itu file kerjaku.csv berada didalam folder “contoh” yang akan dipanggil dari tempat penyimpanan eksternal. Pada saat melakukan proses pencarian digunakan juga fungsi autocompete saat memanggil dataset .csv untuk menemukan kata atau islilah pada kamus komputer tersebut. Adapun potongan script yang digunakan sebagai berikut:

File fl = new File(Environment.getExternalStorageDirectory() + "/contoh");

String ck = fl.toString()+"/"+"kerjaku.csv";

BufferedReader br = null; String line = "";

String cvsSplitBy = "#";


(62)

4.2.5. Tampilan Halaman Tentang

Rancangan halaman Tentang ini berfungsi menampilkan informasi tentang aplikasi kamus Komputer . Rancangan About dapat dilihat pada Gambar berikut.


(63)

Adapun script layout .xml pada eclipse sebagai berikut:

Tentang.xml

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout

xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent"

android:layout_height="fill_parent" android:background="@drawable/tentang" android:orientation="vertical"

android:singleLine="false" >

<TextView

android:id="@+id/textView1"

android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Tentang Aplikasi Komputer"

android:textAppearance="?android:attr/textAppearanceMedium" />

<TextView

android:id="@+id/textView2"

android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/textView1" android:layout_marginTop="35dp"

android:layout_weight="0.11"

android:text="Kamus Istilah Komputer ini yaitu sebuah alat bantu bagi manusia untuk mendapatkan arti dari suatu kata atau istilah yang biasanya disusun berdasarkan abjad sehingga akan lebih mudah mengetahui makna dari istilah komputer. Dengan menggunakan perangkat teknologi mobile device berbasis android sebagai alat yang lebih praktis karena sifatnya portable sehingga memudahkan bagi yang ingin mendapatkan informasi mengenai Istilah komputer." />

<Button


(64)

android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/textView2" android:layout_marginTop="47dp"

android:text="Kembali" />

</RelativeLayout>

4.2.6. Tampilan Halaman Bantuan

Rancangan halaman Tentang ini berfungsi menampilkan informasi tentang Aplikasi Kamus Komputer. Rancangan About dapat dilihat pada Gambar


(65)

Adapun script layout .xml pada eclipse sebagai berikut:

Bantuan.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"

android:layout_height="match_parent" android:background="@drawable/bantuan" android:orientation="vertical" >

<TextView

android:id="@+id/textView2"

android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="0.00"

android:text="Bantuan Menggunakan Aplikasi"

android:textAppearance="?android:attr/textAppearanceLarge" />

<TextView

android:id="@+id/textView1" android:layout_width="228dp"

android:layout_height="wrap_content"

android:text="1. Instal KMP.apk pada handpone Android. 2. lalu buka aplikasi KMP3. Terdapat 4 menu tombol pada Halaman Utama 4. Tombol CARI KATA yaitu halaman untuk melakukan pencarian istilah komputer.5. Tombol TAMBAH KATA yaitu halaman untuk menambah kosa kata baru istilah komputer .6. Tombol TENTANG yaitu Halaman untuk

mengetahui tentang Aplikasi Komputer 7. Tombol BANTUAN yaitu Halamat untuk mendapatkan cara menggunakan Aplikasi." />

<Button

android:id="@+id/button1"

android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Kembali" />


(66)

BAB 5

KESIMPULAN DAN SARAN

5.1. Kesimpulan

Kesimpulan dari penelitian ini adalah:

1. Aplikasi yang dirancang telah mampu memberikan solusi dengan mengimplementasikan algoritma Knuth Morris Pratt String Matching untuk melakukan pencarian String berbasis Android dan dapat menambahkan kosa kata yang baru pada aplikasi kamus komputer.

2. Algoritma Knuth Morris Pratt menyimpan sebuah informasi yang digunakan untuk mendapatkan informasi pada aplikasi kamus komputer menggunakan perangkat mobile.

5.2. Saran

Saran yang dapat diberikan oleh penulis setelah penelitian dilakukan adalah:

1. Algoritma ini akan berkurang efektifitasnya dengan bertambahnya jumlah karakter dari teks sehingga masih perlu untuk tingkatkan dalam pencarian string.

2. Sistem Aplikasi yang dirancang seharusnya dapat memberikan interface yang lebih menarik lagi.


(67)

BAB 2

TINJAUAN PUSTAKA

2.1. Definisi Algoritma

2.1.1 Algoritma

Istilah algoritma (algorithm) berasal dari kata “algoris” dan “ritmis”, yang pertama kali diungkapkan oleh Abu Ja’far Mohammed Ibn Musa al Khowarizmi (825 M) dalam buku Al-Jabr Wa-al Muqabla. Dalam bidang pemrograman algoritma didefenisikan sebagai suatu metode khusus yang tepat dan terdiri dari serangkaian langkah yang terstruktur dan dituliskan secara matematis yang akan dikerjakan untuk menyelesaikan suatu masalah dengan bantuan komputer.(Jogiyanto, 2005)

Terdapat beberapa defenisi yang diberikan untuk kata algoritma antara lain: a) Algoritma adalah sekelompok aturan untuk menyelesaikan perhitungan yang

dilakukan oleh tangan atau mesin.

b) Algoritma adalah langkah demi langkah sebuah prosedur berhinggga yang dibutuhkan untuk menghasilkan sebuah penyelesaian.

c) Algoritma adalah urutan langkah-langkah perhitungan yang mentrasformasikan dari nilai masukan menjadi keluaran.

d) Algoritma adalah urutan operasi yang dilakukan terhadap data yang terorganisasi dalam struktur data.

e) Algoritma adalah sebuah program abstrak yang dapat dieksekusi secara fisik oleh mesin.

f) Algoritma adalah sebuah model perhitungan yang akan dilakukan oleh komputer. (eko, 2008).


(68)

2.2 String

String dalam ilmu komputer dapat diartikan dengan sekuens dari karakter. Walaupun sering juga dianggap sebagai data abstrak yang menyimpan sekuens nilai data, atau biasanya berupa bytes yang mana merupakan elemen yang digunakan sebagai pembentuk karakter sesuai dengan encoding karakter yang disepakati seperti ASCII, ataupun EBCDIC.

Hubungan string dengan tulisan ini adalah bahwa karakteristik dari musik yang akan disimpan dalam database dapat dianggap serupa dengan string. Hal ini akan memudahkan desainer dalam membangun sistem pencocokan audio dari sampel audio yang akan dikonversi terlebih dahulu menjadi serupa dengan string ataupun deretan bytes. Konversi inilah yang nantinya akan dibandingkan langsung dengan informasi karakteristik yang disimpan dalam database.

2.2.1. String Matching

String matching adalah pencarian sebuah pattern pada sebuah teks (Ronald L. Rivest

dkk. 1994). Prinsip kerja algoritma string matching adalah sebagai berikut:

1. Memindahkan teks dengan bantuan sebuah window yang ukurannya sama dengan panjang pattern.

2. Menempatkan window pada awal teks.

3. Membandingkan karakter pada window dengan karakter dari pattern. Setelah pencocokan (baik hasilnya cocok atau tidak cocok), dilakukan shift ke kanan pada window. Prosedur ini dilakukan berulang-ulang sampai window berada pada akhir teks. Mekanisme ini disebut mekanisme sliding-window. (Rama, 2013).

Algoritma string matching mempunyai tiga komponen utama, yaitu:

1. Pattern, yaitu deretan karakter yang akan dicocokkan dengan teks, dinyatakan

dengan x[0..m-1], panjang pattern dinyatakan dengan m.

2. Teks, yaitu tempat pencocokan pattern dilakukan, dinyatakan dengan y[0..n-1], panjang teks dinyatakan dengan n.

3. Alfabet, yang berisi semua simbol yang digunakan oleh bahasa pada teks dan


(69)

2.2.2 Algoritma Knuth Morris Pratt String Matching

Algoritma Knuth Morris Pratt merupakan salah satu algoritma yang sering digunakan untuk menyelesaikan masalah pencocokan string. Algoritma ini adalah

penyempurnaan dari algoritma pencocokan string dengan menggunakan algoritma

brute force. Pada algoritma brute force, setiap kali ditemukan ketidak cocokan pattern

dengan teks, maka pattern akan digeser satu ke kanan. Sedangkan pada algoritma Knuth-Morris-Pratt, kita memelihara informasi yang digunakan untuk melakukan jumlah pergeseran. Algoritma menggunakan informasi tersebut untuk membuat pergeseran angka lebih jauh, tidak hanya satu karakter seperti pada algoritma brute

force. Dengan algoritma Knuth Morris Pratt ini, waktu pencarian dapat dikurangi

secara signifikan. Algoritma Knuth Morris Pratt ini dikembangakan oleh D. E. Knuth, bersama-sama dengan J. H. Morris dan V. R. Pratt.

Algoritma Knuth-Morris-Prath memelihara informasi yang digunakan saat melakukan pergeseran. Informasi ini digunakan untuk melakukan pergeseran yang lebih jauh, tidak seperti brute force yang melakukan pergeseran perkarakter. Pergeseran dilakukan berdasarkan suffix kesamaan suffix dan prefix dalam pattern dan yang ditemukan di dalam teks. Dalam algoritma Knuth Morris Pratt ini kita akan menemui beberapa definisi yang nantinya akan digunakan dalam algoritma ini.

2.2.3 Fungsi Pinggiran

Algoritma Knuth Morris Pratt melakukan proses awal atau preproccesing terhadap

pattern P dengan menghitung fungsi pinggiran (dalam literatur lain menyebut fungsi overlap, fungsi failure, dsb) yang mengindikasikan pergeseran s terbesar yang

mungkin dengan menggunakan perbandingan yang dibentuk sebelum pencarian

string. Fungsi pinggiran hanya bergantung pada karakter-karakter di dalam pattern,

dan bukan pada karakter - karekter di dalam teks yang dicari. Oleh karena itu, kita dapat melakukan perhitungan fungsi awalah sebelum pencarian string dilakukan. Fungsi pinggiran b(j) didefinisikan sebagai ukuran awalan terpanjang dari P yang


(70)

merupakan akhiran dari P[1..j]. Sebagai contoh, tinjau pattern P = abcabd. Nilai F untuk setiap karakter di dalam P adalah sebagai berikut.

Tabel 2.1 Fungsi Pinggiran Untuk Pattern abcabd

j 1 2 3 4 5 6

P(j) A b c a b d

B(j) 0 0 1 1 2 0

Di bawah ini adalah algoritma untuk menghitung fungsi pinggiran. procedure HitungPinggiran

(input m : integer, P : array[1..m] of char,output b : array[1..m] of integer) { Menghitung nilai b[1..m] untuk

pattern P[1..m] } Deklarasi

k,q : integer Algoritma: b[1] 0 q 2 k 0

for q 2 to m do

while ((k > 0) and (P[q] P[k+1])) do

k b[k] endwhile

if P[q]=P[k+1] then k k+1

endif

b[q]=k endfor

Keterangan :

Fungsi tersebut akan menghasilkan output berupa array integer yang merupakan angka-angka pinggiran untuk setiap posisi iterasi pada pattern. Barulah kemudian dapat diproses pencocokkan antara pattern dan teks yang diberikan.


(71)

2.2.4 Fungsi Pembandingan String

Kemudian cara untuk melakukan pencocokan string dengan menggunakan algoritma

Knuth Morris Pratt adalah sebagai berikut. Misal kita akan mencocokan teks T =

abcabcabd dan kita mempunyai pattern P = abcabd. 123456789 Teks = abcabcabd

Pattern = abcabd

Mula-mula kita hitung fungsi pinggiran dari pattern P tersebut. Fungsi pinggiran P = abacabd tertera seperti table 1 di atas. Kemudian lakukan langkah-langkah berikut. Samakan ujung kiri pattern dengan ujung kiri teks. Karakter-karakter pada karakter 1-5 sama, tetapi pada posisi ke 6 tidak sama. Hal itu karena karakter ke 6 pada teks yaitu c tidak sama dengan karakter ke 6 pada pattern yaitu d. Untuk mencocokan kembali, kita harus menggeser pattern. Jika dalam brute force kita akan menggeser pattern 1 karakter ke kanan. Namun jika menggunakan algoritma Knuth

Morris Pratt jumlah pergeseran pattern ditentukan oleh pinggiran dari awalan P yang

bersesuaian. Pada contoh di atas, awalan yang bersesuaian adalah abcab, dengan panjang l = 5. Pinggiran terpanjang untuk string P[1..5] adalah ab yang panjangnya adalah b(5) = 2. Jarak pergeseran adalah l – b = 5 – 2 = 3. Jadi, pattern P digeser sejauh 3 karakter dan perbandingan dilakukan mulai pada posisi j = 3 dihitung dari awal pattern. ( Kukuh, 2013 ).

j 1 2 3 4 5 6

P[j] A b c a b d

b(j) 0 0 0 1 2 0

Teks: abcabcabd

Pattern: abcabd

j = 3

Telah itu kita kembali membandingkan karakter per karekter seperti di proses sebelumnya sampai kita menemukan teks yang sama dengan pattern hingga karakter terakhir. Algoritma Knuth Morris Pratt selengkapnya adalah sebagai berikut:


(72)

procedure KMPsearch(input m,n:integer, input P : array[1..m] of char,input T : array[1..n] of char, output idx :

integer) {

Mencari kecocokan pattern P di dalam teks T dengan algoritma Knuth-Morris- Pratt. Jika ditemukan P di dalam T, lokasi awal kecocokan disimpan di dalam peubah idx.

Masukan: pattern P yang panjangnya m dan teks T yang panjangnya n.

Teks T direpresentasika

sebagai string (array of character) Keluaran: posisi awal kecocokan

(idx). Jika P tidak ditemukan, idx = - 1.

}

Deklarasi

i, j : integer ketemu : boolean

b : array[1..m] of integer

procedure HitungPinggiran(input m : integer, P : array[1..m] of char, output b : array[1..m] of integer) { Menghitung nilai b[1..m] untuk pattern P[1..m] }

Algoritma:

HitungPinggiran(m, P, b) j 0

i 1


(73)

while (i n and not ketemu) do

while((j > 0) and (P[j+1] T[i])) do j b[j]

endwhile

if P[j+1]=T[i] then j j+1

endif

if j = m then ketemu true else

i i+1 endif

endwhile

if ketemu then

idx i-m+1 { catatan: jika indeks array dimulai dari 0, maka idx i-m } else

idx -1 endif

(Thomas, 2007)

2.2.4 Klasifikasi Pencocokan String

Pencocokan string (string matching) secara garis besar dapat dibedakan menjadi dua yaitu :

1. Exact string matching, merupakan pencocokan string secara tepat dengan susunan

karakter dalam string yang dicocokkan memiliki jumlah maupun urutan karakter dalam string yang sama. Contoh : kata step akan menunjukkan kecocokan hanya dengan kata step.

2. Inexact string matching atau Fuzzy string matching, merupakan pencocokan string secara samar, maksudnya pencocokan string dimana string yang

dicocokkan memiliki kemiripan dimana keduanya memiliki susunan karakter yang berbeda (mungkin jumlah atau urutannya) tetapi string-string tersebut memiliki kemiripan baik kemiripan tekstual/penulisan (approximate string


(74)

matching) atau kemiripan ucapan (phonetic string matching). Inexact string matching masih dapat dibagi lagi menjadi dua yaitu :

a. Pencocokan string berdasarkan kemiripan penulisan (approximate string

matching) merupakan pencocokan string dengan dasar kemiripan dari segi

penulisannya (jumlahah karakter, susunan karakter dalam dokumen).Tingkat kemiripan ditentukan dengan jauh tidaknya beda penulisan dua buah string yang dibandingkan tersebut dan nilai tingkat kemiripan ini ditentukan oleh pemrogram (programmer).

Contoh : compuler dengan compiler, memiliki jumlahah karakter yang sama tetapi ada dua karakter yang berbeda. Jika perbedaan dua karakter ini dapat ditoleransi sebagai sebuah kesalahan penulisan maka dua string tersebut dikatakan cocok.

b. Pencocokan string berdasarkan kemiripan ucapan (phonetic string

matching) merupakan pencocokan string dengan dasar kemiripan dari segi

pengucapannya meskipun ada perbedaan penulisan dua string yang dibandingkan tersebut.

Contoh step dengan step dari tulisan berbeda tetapi dalam pengucapannya mirip sehingga dua string tersebut dianggap cocok. Contoh yang lain adalah step, dengan

steppe, sttep, stepp, stepe. Exact string matching bermanfaat jika pengguna ingin

mencari string dalam dokumen yang sama persis dengan string masukan. Tetapi jika pengguna menginginkan pencarian string yang mendekati dengan string masukan atau terjadi kesalahan penulisan string masukan maupun dokumen objek pencarian, maka

inexact string matching yang bermanfaat.

Pada Implementasi Algoritma Knuth Morris Pratt untun mencari kata atau istilah pada komputer berbasis Android maka masuk dalam klasifikasi pencocokan

string Exact string matching yang merupakan pencocokan string secara tepat dengan

susunan karakter dalam string yang dicocokkan memiliki jumlah maupun urutan karakter dalam string yang sama


(1)

vi

ABSTRAK

Kamus adalah buku acuan yang digunakan manusia untuk menerjemahkan suatu bahasa/istilah asing. Pada umumnya disusun menurut abjad berikut keterangan tentang maknanya, pemakaiannya, atau terjemahannya. Demikian halnya dengan kamus istilah komputer sangat diperlukan dalam menerjemahkan istilah komputer. Begitu banyak metode algoritma yang dapat digunakan dalam pembuatan aplikasi kamus, salah satunya dengan menggunakan algoritma Knuth Morris Pratt (KMP). Dengan algoritma ini, setiap teks yang akan diterjemahkan akan ditinjau kata-kata untuk kemudian dicari kecocokannya dengan kata padanan dalam istilah yang diinginkan. Dalam kajian ini penulis akan melakukan analisa sekaligus uji coba terhadap penerapan algoritma Knuth Morris Pratt ini dalam aplikasi kamus istilah komputer pada smartphone Android. Didapatkan hasil dengan menggunakan Algoritma Knuth Morris Pratt bahwa aplikasi ini dapat membantu pengguna gadget untuk mencari kata atau istilah pada kamus komputer berbasis Android.

Kata-kata Kunci : Algoritma, String Matching, Knuth-Morris-Pratt (KMP), Kamus, Android.


(2)

vii

TO FIND THE WORD OR TERM ON ANDROID BASED COMPUTER DICTIONARY

ABSTRACT

Dictionary is a reference book that we used to translate a language / foreign terms. Generally, the following is alphabetical with description of its meaning, its use, or its translation. Similarly, the dictionary of computer terms is needed in translating the computer term. So many methods of algorithms that can be used in the making of an dictionary application, one of them by using the algorithm of Knuth Morris Pratt (KMP). With this algorithm, any text that we translated will be reviewed by words then searched for compatibility with the word equivalent in terms desired. In this study the authors will perform an analysis and a tests on the application of this Knuth Morris Pratt algorithm in computer terms dictionary app on Android smartphone. Is obtained by using the algorithm of Knuth Morris Pratt that this application can help users gadget to search for words or terms in the dictionary of computer -based Android .

Keywords: Algoritm, String Matching, Knuth - Morris - Pratt ( KMP ) , Dictionary, Android.


(3)

viii

DAFTAR ISI

halaman

Persetujuan ii

Pernyataaan iii

Penghargaan iv

Abstrak v

Abstract vi

Daftar isi vii

Daftar tabel ix

Daftar gambar x

BAB 1. PENDAHULUAN 1

1.1. Latar Belakang 1

1.2. Rumusan Masalah 2

1.3. Batasan Masalah 3

1.4. Tujuan Penelitian 3

1.5. Manfaat Penelitian 3

1.6. Metodologi Penelitian 4

1.7. Sistematika Penulisan 5

BAB 2. TINJAUAN PUSTAKA 6

2.1. Definisi Algoritma 6

2.1.1. Algoritma 6

2.2. String 7

2.2.1. String Matching 7

2.2.2. Algoritma Knuth Morris Pratt String Matching 8

2.2.3. Fungsi Pinggiran 8

2.2.4. Fungsi Pembanding String 10

2.2.5. Klasifikasi Pencocokan String 12

2.3. Mobile Device 14

2.4. Android 15

2.4.1. Sejarah Android 15

2.4.2. Pengertian Android 16

2.4.3. Versi Android 16

2.4.4. Arsitektur Android 18

2.5. Database 19

2.5.1. Menggunakan Format CSV 19

2.6. Kamus 21

BAB 3. ANALISIS DAN PERANCANGAN SISTEM 22

3.1. Analisis System 22

3.1.1. Analisis kebutuhan Sistem 23

3.2. Analisis Kebutuhan Sistem 23


(4)

ix

3.2.2. Kebutuhan Non-Fungsioanal 24

3.3. Pemodelan Sistem 24

3.3.1. Use-Case Diagram 24

3.3.2. Activity Diagram 25

3.3.3. Sequence Diagram 31

3.4. Perancangan Sistem 32

3.4.1. Flowchart System 33

3.4.2. Flowchart Algoritma Knuth Moriis Pratt 34 3.5. Perancangan Antarmuka Sistem (Interface) 36

3.5.1. Halaman Utama 36

3.5.2. Rancangan Halaman Cari Kata 38

3.5.3. Rancangan Halaman Tambah Kata 40

3.5.4. Rancangan Halaman Tentang 41

3.5.5. Rancangan Halaman Bantuan 42

BAB 4. IMPLEMENTASI DAN PENGUJIAN 43

4.1. Pengujian Sistem 43

4.2. Implementasi Sistem 54

4.2.1. Halaman Utama 55

4.2.2. Halaman Cari kata 55

4.2.3. Halaman Tambah Kata 57

4.2.4. Dataset .csv 58

4.2.5. Halaman Tentang 60

4.2.6. Halaman Bantuan 62

Kompleksitas Waktu Algoritma PROMETHEE 86

BAB 5. KESIMPULAN DAN SARAN

5.1. Kesimpulan 64

5.2. Saran 64


(5)

x

DAFTAR TABEL

halaman

Tabel 2.1. Fungsi Pinggiran Untuk Pattern abcabd 8 Tabel 2.2 Pengklasifikasian dalam Use Case Diagram 21 Tabel 2.3. Tabel Relasi-relasi dalam Use Case Diagram 21 Tabel 3.1. Keterangan Bagian-Bagian Rancangan Halaman Utama 39 Tabel 3.2. Keterangan Bagian-Bagian Rancangan Pencarian Kata 41 Tabel 3.3. Keterangan Bagian-Bagian Rancangan Tambah Kata 42 Tabel 3.4. Keterangan Bagian-Bagian Rancangan Tentang Aplikasi 43 Tabel 3.5. Keterangan Bagian-Bagian Rancangan Bantuan Aplikasi 44


(6)

xi

DAFTAR GAMBAR

halaman

Gambar 2.1. Android Architecture 25

Gambar 3.1. Diagram Ishikawa Untuk Analisis Masalah 28 Gambar 3.2. Use Case Algoritma Knuth Morris Pratt 28 Gambar 3.3. Activity Diagram Panjang Teks dan Pattern 29 Gambar 3.4. Activity Diagram Proses Awal Menemukan Karakter 30 Gambar 3.5 Activity Diagram Menghitung Nilai Pergeseran Karakter 31 Gambar 3.6. Activity Diagram Membandingkan Karakter Per Karakter 32

Gambar 3.7. Activity Diagram System 33

Gambar 3.8. Sequence System Pada Kamus komputer 35

Gambar 3.9. Flowchart System 36

Gambar 3.10. Flowchart Proses KMP 37

Gambar 3.11. Rancangan Halaman Utama 39

Gambar 3.12. Rancangan Halaman Cari Kata 40

Gambar 3.13. Rancangan Halaman Tambah Kata 42

Gambar 3.14. Rancangan Halaman Tentang Aplikasi 43 Gambar 3.15. Rancangan Halaman Bantuan Aplikasi 44

Gambar 4.1. Perbatasan r, s dari a string x 47

Gambar 4.2. Perpanjangan Perbatasan 47

Gambar 4.3. Awalan Panjang i Dari Pola Dengan Batas Lebar b[i] 48

Gambar 4.4. Batas Panjang m Dari Awalan x pt 49

Gambar 4.5. Pergeseran Pola Ketika Ketidakcocokan Pada Posisi j Terjadi 50 Gambar 4.6. Hasil Pencarian Menggunakan Algoritma KMP 55

Gambar 4.7. Halaman Utama 57

Gambar 4.8. Contoh Fungsi Autocomplete 58

Gambar 4.9. Tambah Kata 59

Gambar 4.10. Penyimpanan Kata Istilah Komputer 60

Gambar 4.11. Tentang Aplikasi Komputer 63