Implementasi Algoritma Pencocokan String Knuth-Morrispratt Dalam Pembuatan Kamus Kedokteran Pada Platform Android

45
Syaroni,M. & Munir,R. 2005. Pencocokan String Berdasarkan Kemiripan Ucapan (Phonetic
String Matching) dalam Bahasa Inggris. Prosiding Seminar Nasional: SNATI UII
Yogyakarta, pp. 1-6.
Wibowo,T. 2012. Pembuatan Aplikasi Untuk Mendeteksi Kebenaran Perintah SQL Query
Menggunakan Metode Knuth-Morris-Pratt. Jurnal Teknik Informatika 1: 1-9
Wulan, S. 2011. Analisis Penerapan String Matching Dalam Komparasi Data Kepesertaan
Jaminan Kesehatan Masyarakat. Skripsi. Jakarta. Universitas Islam Negeri Syarif
Hidayatullah.

Universitas Sumatera Utara

A-1

LISTING PROGRAM
// Source Code MainActivity.java
package id.repa;
import
import
import
import

import
import
import
import
import
import
import
import
import

android.app.Activity;
android.content.res.Configuration;
android.os.Bundle;
android.support.v4.app.ActionBarDrawerToggle;
android.support.v4.widget.DrawerLayout;
android.view.MenuItem;
android.view.View;
android.widget.AdapterView;
android.widget.ArrayAdapter;
android.widget.EditText;

android.widget.ListView;
android.widget.Toast;
android.widget.AdapterView.OnItemClickListener;

public class MainActivity extends Activity {
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
private CharSequence mJudulDrawer;
private CharSequence mJudul;
private String[] mNamaPlanet;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_content);
// inisialisasi
mJudul = mJudulDrawer = getTitle();
mNamaPlanet =
getResources().getStringArray(R.array.array_drawer);
mDrawerLayout = (DrawerLayout)

findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.drawer_kiri);
mDrawerList.setAdapter(new
ArrayAdapter(this,R.layout.item_navdrawer, mNamaPlanet));
// memberi event klik item item daftar nama planet
mDrawerList.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView arg0, View arg1, int
posisi,
long id) {
// memanggil metode pilihItem()
pilihItem(posisi);
}
});
// mengaktifkan ikon ActionBar kiri-atas sebagai kendali
drawer untuk

Universitas Sumatera Utara


A-2

// membuka-menutup jika disentuh
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
// merupakan metode untuk mengaktifkan drawer saat ikon
ActionBar
// disentuh atau saat layar sebelah kiri digeser (sliding) ke
kanan
mDrawerToggle = new ActionBarDrawerToggle(this,
mDrawerLayout,
R.drawable.ic_drawer, 0, 0) {
// metode saat drawer dalam kondisi tertutup
// judul pada ActionBar menampilkan item buah terpilih
public void onDrawerClosed(View view) {
getActionBar().setTitle(mJudul);
invalidateOptionsMenu();
}
// metode saat drawer dalam kondisi terbuka
// judul pada ActionBar menampilkan nama aplikasi:

// "Daftar Buah-buahan"
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(mJudulDrawer);
invalidateOptionsMenu();
}
};
// mDrawerLayout diberi event mDrawerToggle
mDrawerLayout.setDrawerListener(mDrawerToggle);
// dalam keadaan awal, saat aplikasi mulai dijalankan, item
yang dipilih
// adalah indeks 0
if (savedInstanceState == null) {
pilihItem(0);
}
//new Data(new DbHelper(this)).insertAllWords1();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// event saat ikon ActionBar disentuh: drawer akan
membuka/menutup

if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
return super.onOptionsItemSelected(item);
}
private void pilihItem(int position) {
// metode saat item planet dipilih; judul pada ActionBar akan
// diperbarui kemudian drawer akan menutup
switch(position) {
case 0:
getFragmentManager().begintransaction().replace(R.id.frame_kont
en, new MainFragment(), "MainFragment").commit();
break;

Universitas Sumatera Utara

A-3

case 1:
getFragmentManager().begintransaction().replace(R.id.frame_kont

en, new kosaKata(), "kosaKata").commit();
break;
case 2:
getFragmentManager().begintransaction().replace(R.id.frame_kont
en, new About(), "About").commit();
break;
}
mDrawerList.setItemChecked(position, true);
setTitle(mNamaPlanet[position]);
mDrawerLayout.closeDrawer(mDrawerList);
}
@Override
public void setTitle(CharSequence title) {
// metode penggantian judul pada ActionBar
mJudul = title;
getActionBar().setTitle(mJudul);
}
// dua metode yang harus dipanggil saat menggunakan
ActionBarDrawerToggle
// untuk penyesuaian dan konfigurasi kondisi drawer (item

terpilih)
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
}

// Source Code MainFragment.java
package id.repa;
import java.text.DecimalFormat;
import java.util.ArrayList;
import
import
import

import
import
import
import
import
import
import

android.app.AlertDialog;
android.app.Fragment;
android.database.Cursor;
android.os.Bundle;
android.text.Editable;
android.view.LayoutInflater;
android.view.View;
android.view.ViewGroup;
android.widget.AdapterView;
android.widget.ArrayAdapter;

Universitas Sumatera Utara


A-4

import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
public class MainFragment extends Fragment implements
android.text.TextWatcher,
android.widget.AdapterView.OnItemClickListener {
private ArrayList results;
private ListView result;
private DbHelper db;
@Override
public View onCreateView (LayoutInflater inflater,ViewGroup
root, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_main,
root,false);
((EditText)
view.findViewById(R.id.editText1)).addTextChangedListener(this);
result = (ListView) view.findViewById(R.id.result);

result.setEmptyView(view.findViewById(R.id.empty));
result.setOnItemClickListener(this);
db = new DbHelper(getActivity());
return view;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int
count, int after) { }
@Override
public void onTextChanged(CharSequence s, int start, int
before, int count) {
long first = System.nanoTime();
if(s.toString().equals(""))
result.setAdapter(new
ArrayAdapter(getActivity(),
android.R.layout.simple_list_item_1, new String[] { }));
else {
String[] columns = {
MyDictionaryContract.Word.COLUMN_ARTI,
MyDictionaryContract.Word.COLUMN_ISTILAH };
Result[] R = {};
Cursor c =
db.getReadableDatabase().query(MyDictionaryContract.Word.TABLE_NAME,
columns, null, null, null, null, null);
int i = 0, j = 0;
if(c.moveToFirst()) {
R = new Result[c.getCount()];
do {
R[i++] = new
Result(c.getString(c.getColumnIndex(columns[0])),
c.getString(c.getColumnIndex(columns[1])));
} while(c.moveToNext());
}
c.close();
if(R.length > 0) {
results = new
ArrayList();
SearchMethod search = new SearchMethod();
for(i = 0, j = R.length; i < j; i++) {

Universitas Sumatera Utara

A-5

String pattern = R[i].word;
search.search(pattern.toUpperCase(),
s.toString().toUpperCase());
if(search.getMatches().length > 0)
results.add(new Result(pattern,
R[i].mean));
} i = 0;
String[] contents = new
String[results.size()];
for(Result r : results)
contents[i++] = r.word;
result.setAdapter(new
ArrayAdapter(getActivity(),
android.R.layout.simple_list_item_1, contents));
}
}
long elapsed = System.nanoTime() - first;
Toast.makeText(getActivity(), new
DecimalFormat("0.0000").format(elapsed / 1000000000.) + " s",
Toast.LENGTH_SHORT).show();
}
@Override
public void afterTextChanged(Editable s) { }
@Override
public void onItemClick(AdapterView parent, View view, int
position, long id) {
Result r = results.get(position);
AlertDialog.Builder dialog = new
AlertDialog.Builder(getActivity()).setTitle(r.word).setMessage(r.mean
);
dialog.show();
}
private class Result {
private Result(String word, String mean) {
this.word = word;
this.mean = mean;
}
private String word, mean;
}
}

// Source Code SearchMethod.java
package id.repa;
import java.util.ArrayList;
public class SearchMethod {
private char[] p, t;
// pattern, text
private int m, n;
// pattern length,
private String matches;
// string of match
private char[] showmatches;// char array that
private int[] b;
// used by the KMP

text length
positions
shows matches
algorithm

/** searches the text tt for the pattern pp
*/
public void search(String tt, String pp) {
setText(tt);

Universitas Sumatera Utara

A-6

setPattern(pp);
kmpSearch();
}
/** sets the text
*/
private void setText(String tt)
{
n=tt.length();
t=tt.toCharArray();
initmatches();
}
/** sets the pattern
*/
private void setPattern(String pp)
{
m=pp.length();
p=pp.toCharArray();
b=new int[m+1];
kmpPreprocess();
}
/** initializes match positions and the array showmatches
*/
private void initmatches()
{
matches="";
showmatches=new char[n];
for (int i=0; i