• Tidak ada hasil yang ditemukan

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

N/A
N/A
Protected

Academic year: 2017

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

Copied!
16
0
0

Teks penuh

(1)

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

(2)

LISTING PROGRAM

// Source Code MainActivity.java

package id.repa;

import android.app.Activity;

import android.content.res.Configuration; import android.os.Bundle;

import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.widget.DrawerLayout;

import android.view.MenuItem; import android.view.View;

import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ListView; import android.widget.Toast;

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

} });

(3)

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

(4)

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 android.app.AlertDialog; import android.app.Fragment; import android.database.Cursor; import android.os.Bundle;

import android.text.Editable;

import android.view.LayoutInflater; import android.view.View;

(5)

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<Result> 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<String>(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<MainFragment.Result>();

(6)

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<String>(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, text length private String matches; // string of match positions private char[] showmatches;// char array that shows matches private int[] b; // used by the KMP algorithm /** searches the text tt for the pattern pp

*/

(7)

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<n; i++)

showmatches[i]=' '; }

/** preprocessing of the pattern */

private void kmpPreprocess() {

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

while (i<m) {

while (j>=0 && p[i]!=p[j]) j=b[j];

/** searches the text for all occurences of the pattern */

private void kmpSearch() {

int i=0, j=0; while (i<n) {

while (j>=0 && t[i]!=p[j]) j=b[j];

(8)

if (j==m) // a match is found

/** reports a match */

private void report(int i) {

matches += i + " "; showmatches[i]='^'; }

/** returns the match positions after the search */

public int[] getMatches() {

int i = 0, j = 0, n = matches.length();

ArrayList<String> list = new ArrayList<String>(); for(; i < n; i++) {

if(matches.charAt(i) == ' ') {

list.add(matches.substring(j, i)); j = i + 1;

} }

int[] result = new int[list.size()]; i = 0;

for(String s : list)

result[i++] = Integer.valueOf(s); return result;

} }

// Source Code kosaKata.java

package id.repa;

import java.util.ArrayList; import android.app.AlertDialog;

import android.content.ContentValues; import android.content.DialogInterface; import android.database.Cursor;

import android.os.Bundle; import android.view.MenuItem; import android.view.View;

import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast;

public class kosaKata extends android.app.ListFragment implements View.OnClickListener {

private DbHelper db;

private EditText istilah, arti;

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

(9)

reset(); }

public void onCreateOptionsMenu(android.view.Menu menu, android.view.MenuInflater inflater) {

menu.add(0, 0, 0,

R.string.add).setIcon(R.drawable.ic_add).setShowAsActionFlags(MenuIte m.SHOW_AS_ACTION_ALWAYS);

super.onCreateOptionsMenu(menu, inflater); }

public boolean onOptionsItemSelected(MenuItem item) { if(item.getItemId() == 0) {

new

AlertDialog.Builder(getActivity()).setTitle("Tambah istilah baru").setView(createInputView()).setPositiveButton("Tambah", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

ContentValues values = new ContentValues();

values.put(MyDictionaryContract.Word.COLUMN_ARTI, istilah.getText().toString());

values.put(MyDictionaryContract.Word.COLUMN_ISTILAH, arti.getText().toString());

db.getWritableDatabase().insert(MyDictionaryContract.Word.TABLE _NAME, null, values);

android.widget.Toast.makeText(getActivity(), istilah.getText().toString() + " berhasil ditambah", android.widget.Toast.LENGTH_SHORT).show();

reset(); }

}).show(); }

return super.onOptionsItemSelected(item); }

public void onDestroy() { db.close();

super.onDestroy(); }

public void onClick(View v) {

final Result r = (Result) v.getTag(); switch(v.getId()) {

case R.id.delete: new

AlertDialog.Builder(getActivity()).setMessage("Hapus kata: " + r.word + "?").setPositiveButton("OK", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

(10)

_NAME, MyDictionaryContract.Word._ID + "=?", new String[] { String.valueOf(r.id) });

Toast.makeText(getActivity(), "Kata: " + r.word + " berhasil dihapus", Toast.LENGTH_SHORT).show();

reset(); }

}).show(); break; case R.id.edit:

View view = createInputView(); Cursor c =

db.getReadableDatabase().query(MyDictionaryContract.Word.TABLE_NAME, null, MyDictionaryContract.Word._ID + "=?", new String[] {

String.valueOf(r.id) }, null, null, null); if(c.moveToFirst()) {

arti.setText(c.getString(c.getColumnIndex(MyDictionaryContract. Word.COLUMN_ISTILAH)));

istilah.setText(c.getString(c.getColumnIndex(MyDictionaryContra ct.Word.COLUMN_ARTI)));

}

c.close(); new

AlertDialog.Builder(getActivity()).setTitle("Ubah kata: " + r.word).setView(view).setPositiveButton("Ubah", new

DialogInterface.OnClickListener() { @Override

public void onClick(DialogInterface dialog, int which) {

ContentValues values = new ContentValues();

values.put(MyDictionaryContract.Word.COLUMN_ARTI, istilah.getText().toString());

values.put(MyDictionaryContract.Word.COLUMN_ISTILAH, arti.getText().toString());

db.getWritableDatabase().update(MyDictionaryContract.Word.TABLE _NAME, values, MyDictionaryContract.Word._ID + "=?", new String[] { String.valueOf(r.id) });

Toast.makeText(getActivity(), "Kata: " + r.word + " berhasil diubah", Toast.LENGTH_SHORT).show();

reset(); }

}).show(); break; }

}

private void reset() {

db = new DbHelper(getActivity()); android.database.Cursor c =

db.getWritableDatabase().query(MyDictionaryContract.Word.TABLE_NAME, null, null, null, null, null, MyDictionaryContract.Word.COLUMN_ARTI + " ASC");

ArrayList<Result> results = new ArrayList<kosaKata.Result>();

(11)

do {

results.add(new

Result(c.getLong(c.getColumnIndex(MyDictionaryContract.Word._ID)), c.getString(c.getColumnIndex(MyDictionaryContract.Word.COLUMN_ARTI)), c.getString(c.getColumnIndex(MyDictionaryContract.Word.COLUMN_ISTILAH ))));

} while(c.moveToNext()); }

c.close();

setListAdapter(new Adapter(results)); }

private View createInputView() {

LinearLayout view = new LinearLayout(getActivity()); view.setOrientation(LinearLayout.VERTICAL);

istilah = new EditText(getActivity()); istilah.setHint("Istilah");

arti = new EditText(getActivity()); arti.setHint("Arti");

view.addView(istilah, -1, -2); view.addView(arti, -1, -2); return view;

}

private class Adapter extends android.widget.ArrayAdapter<Result> {

private Adapter(ArrayList<Result> results) { super(getActivity(), 0, results); }

public View getView(int position, View convertView, android.view.ViewGroup root) {

if(convertView == null) { convertView =

android.view.LayoutInflater.from(getActivity()).inflate(R.layout.item _library, root, false);

((ImageView)

convertView.findViewById(R.id.delete)).setOnClickListener(kosaKata.th is);

((ImageView)

convertView.findViewById(R.id.edit)).setOnClickListener(kosaKata.this );

}

((TextView)

convertView.findViewById(R.id.word)).setText(getItem(position).word); ((ImageView)

convertView.findViewById(R.id.delete)).setTag(getItem(position)); ((ImageView)

convertView.findViewById(R.id.edit)).setTag(getItem(position)); return convertView;

} }

private class Result {

private Result(long id, String word, String mean) { this.id = id;

this.word = word; }

(12)

private String word; }

}

// Source Code DbHelper.java

package id.repa;

import android.content.ContentValues; import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase; import android.provider.BaseColumns;

public class DbHelper extends

android.database.sqlite.SQLiteOpenHelper {

public DbHelper(android.content.Context context) {

super(context, MyDictionaryContract.DATABASE_NAME, null, MyDictionaryContract.DATABASE_VERSION);

}

public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE " +

MyDictionaryContract.Word.TABLE_NAME + "(" +

MyDictionaryContract.Word._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +

MyDictionaryContract.Word.COLUMN_ISTILAH + " " + MyDictionaryContract.Word.COLUMN_TYPE_ISTILAH + "," +

MyDictionaryContract.Word.COLUMN_ARTI + " " + MyDictionaryContract.Word.COLUMN_TYPE_ARTI + ")");

}

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

db.execSQL("DELETE TABLE IF EXISTS " + MyDictionaryContract.Word.TABLE_NAME);

onCreate(db); }

public long insert(String tableName, Word word) { ContentValues values = new ContentValues();

values.put(MyDictionaryContract.Word.COLUMN_ISTILAH, word.getIST());

values.put(MyDictionaryContract.Word.COLUMN_ARTI, word.getAR());

return

this.getWritableDatabase().insert(MyDictionaryContract.Word.TABLE_NAM E, null, values);

}

public Cursor getAllWords(String orderBy, String selection, String[] selectionArgs) {

return

this.getReadableDatabase().query(MyDictionaryContract.Word.TABLE_NAME , null, selection, selectionArgs, "", "", orderBy + " ASC");

(13)

public Word getWord(long ist) { Cursor c =

this.getReadableDatabase().query(MyDictionaryContract.Word.TABLE_NAME , null, MyDictionaryContract.Word._ID + " = ?", new String[] {

String.valueOf(ist) }, "", "", ""); Word word = null;

if(c.moveToFirst()) {

word = new Word(c.getString(1), c.getString(2)); word.set_ID(c.getLong(0));

}

return word; }

}

final class MyDictionaryContract {

public final static int DATABASE_VERSION = 1;

public final static String DATABASE_NAME = "DictMed.db"; public abstract static class Word implements BaseColumns {

public final static String TABLE_NAME = "Word",

COLUMN_ISTILAH = "Istilah", COLUMN_TYPE_ISTILAH = "VARCHAR(50) NOT NULL",

COLUMN_ARTI = "Arti", COLUMN_TYPE_ARTI = "VARCHAR(50) NOT NULL";

}

}

final class Word { private long _ID;

private String ist, ar;

public final static int LANG_IST = 0, LANG_AR = 1; private int lang = 0;

public Word(String ist, String ar) { this.ist = ar;

this.ar = ist; }

public void set_ID(long _ID) { this._ID = _ID;

}

public long get_ID() { return _ID; } public String getIST() { return ist; } public String getAR() { return ar; }

public void setLang(int lang) { this.lang = lang; } public int getLang() { return lang; }

public String toString() {

java.util.Locale locale = java.util.Locale.US; String temp = "";

(14)

temp =

String.valueOf(ist.charAt(0)).toUpperCase(locale);

return temp + ist.substring(1, ist.length()); case LANG_AR:

temp =

String.valueOf(ar.charAt(0)).toUpperCase(locale);

return temp + ar.substring(1, ar.length()); default: return null;

} }

}

// Source Code Data.java

package id.repa;

public class Data {

private DbHelper dbHelper;

public Data(DbHelper dbHelper) { this.dbHelper = dbHelper; } public void insertAllWords1() {

dbHelper.insert(MyDictionaryContract.Word.TABLE_NAME, new Word("ablasio retina","terpisahnya atau terlepasnya retina mata dari jaringan penyokong di bawahnya"));

dbHelper.insert(MyDictionaryContract.Word.TABLE_NAME, new Word("abses","kantong nanah akibat terinfeksi bakteri"));

dbHelper.insert(MyDictionaryContract.Word.TABLE_NAME, new Word("abses abdomen","abses perut"));

} }

// Source Code About.java package id.repa;

import android.app.Fragment; import android.os.Bundle;

import android.view.LayoutInflater; import android.view.View;

import android.view.ViewGroup;

public class About extends Fragment { @Override

public View onCreateView (LayoutInflater inflater,ViewGroup root, Bundle savedInstanceState) {

return inflater.inflate(R.layout.activity_about, root,false); }

}

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"

(15)

<EditText

android:id="@+id/editText1"

android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_margintop="24dp"

android:ems="10"

android:hint="@string/masukkan_kata" android:inputType="text"

android:textColorLink="@color/black" android:textSize="20sp" />

<ListView

android:id="@+id/result"

android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/editText1" android:cacheColorHint="@color/redpa" /> <TextView

android:id="@+id/empty"

(16)

CURRICULUM VITAE

Nama

: Arief Try Hidayat

Alamat Sekarang

: Jl. Abdul Hakim Komplek Insan Cita Griya Blok AA-9

Kelurahan Tanjung Sari, Kecamatan Medan Selayang,

Kota Medan

Alamat Orang Tua

: Jl. Abdul Hakim Komplek Insan Cita Griya Blok AA-9

Kelurahan Tanjung Sari, Kecamatan Medan Selayang,

Kota Medan

Telp/Hp

: 061-8225623/ 081232052762

Email

: arieftry@rocketmail.com

Riwayat Pendidikan

1998 – 2004

: SD Muhammadiyah 03 Medan

2004 – 2007

: SMP Negeri 1 Medan

2007 – 2010

: SMA Negeri 3 Medan

2010 –

: S1 Ilmu Komputer Universitas Sumatera Utara, Medan

Keahlian

Bahasa

: Indonesia, Inggris

Referensi

Dokumen terkait

Dengan berlakunya Peraturan Menteri ini, Keputusan Direktur Jenderal Pendidikan Tinggi Nomor 11/DIKTI/Kep./2006 tentang Panduan Akreditasi Berkala ilmiah serta

[r]

Dalam Peraturan ini, yang dimaksud dengan pendidikan inklusif adalah sistem penyelenggaraan pendidikan yang memberikan kesempatan kepada semua peserta didik

Pengadaan barang/jasa dilaksanakan secara elektronik, dengan mengakses aplikasi Sistem Pengadaan Secara Elektronik (aplikasi SPSE) pada alamat: www.lpse.bkkbn.go.id.

Tujuan penelitian ini dilakukan adalah untuk menentukan kadar air dan besar bilangan penyabunan dalam minyak kelapa serta menentukan apakah kadar air dan bilangan penyabunan

Sistem penilaian dengan system KPI, selain dapat mengukur kinerja orang per orang, juga bisa dilakukan untuk melakukan pengukuran kinerja secara kelompok, baik itu

Dengan menggunakan Akibat 2.3 ini, dapat dikonstruksi sebuah aljabar graf pada graf- berhingga baris tanpa sources seperti halnya pada graf berarah, dinotasikan dengan

Pada tahap pelaksanaan, kegiatan pembelajaran dibagi menjadi tiga bagian yaitu kegiatan awal, kegiatan inti dan kegiatan penutup. Pada kegiatan awal dimulai dengan