• 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!
77
0
0

Teks penuh

(1)

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;

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

SearchMethod search = new SearchMethod();

(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]; i++; j++; b[i]=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 { report(i-m); j=b[j]; } } }

/** 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) {

(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

(17)

Bütcher, S., dkk. 2010. Information Retrieval; Implementing and Evaluating Search Engines.

MIT Press: London.

Charras, C. & Lecroq, T. 1997.

Handbook of Exact String Matching Algorithms. Oxford

University Press: United Kingdom.

Dewanto, R.A., Aradea. 2007. Aplikasi SMS Gateway Dengan Koreksi Kesalahan Menggunakan

Fuzzy String Matching. Seminar Nasional Aplikasi Teknologi Informasi 2007 (SNATI

2007) C:35-38.

Fadillah,A.R. 2008. Pengenalan Pola Sidik Jari Menggunakan Algoritma Knuth Morris-Pratt

(KMP). Skripsi. Bandung. Universitas Komputer Indonesia.

Gata,W.,dkk. 2012. Pengimplementasian Android Dalam Perancangan Aplikasi Nusa Mandiri

Mobile Application (NUMA) Dengan Pemrograman Java.

BIT 9: 63-70.

Guntur,M. 2008. Aplikasi Search Engine Dengan Menggunakan Algoritma

Knuth-Morris-Pratt.

Skripsi. Bandung. Universitas Komputer Indonesia.

Husamah. 2012. Kamus Penyakit pada Manusia. ANDI. Yogyakarta.

Knuth D.E., Morris (Jr) J.H. & Pratt V.R. 1977. Fast pattern matching in strings. SIAM Journal

on Computing 6(1):323-350.

Lindung,Y.D. 2012. Implementasi Android SDK Dalam Pembuatan Aplikasi Mobile "Kalkulator

MIPA" Untuk Sekolah Menengah Pertama. Skripsi. Yogyakarta. Sekolah Tinggi

Manajemen Informatika dan Komputer.

Manning, Cristopher D., dkk. 2008. Introduction to Information Retrieval.

Cambridge.

University Press: New York.

Mufti,Y. 2013. Rancang Bangun Emergency Security Caller Berbasis Android Untuk Situasi

Perampokan. Skripsi. Yogyakarta. Universitas Islam Negeri Sunan Kalijaga.

Mulyana,F. 2014. Penerapan Algoritma

Knuth-Morris-Pratt

Pada Game Puzzle Untuk Mencari

Kecocokan Pola Warna. Skripsi. Bandung. Universitas Komputer Indonesia.

Parlin,J., & Saputra,K. 2011. Penerapan String Matching Pada Aplikasi Kamus Bahasa

Kedokteran Berbasis Java ME. Skripsi. Palembang. Sekolah Tinggi Manajemen

Informatika dan Komputer Global Informatika Multi Data Palembang.

(18)

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

(19)

ANALISIS DAN PERANCANGAN SISTEM

3.1

Analisis Sistem

Analisis sistem dilakukan untuk dapat memahami kebutuhan sistem dan gambaran

tugas-tugas yang akan dikerjakan, sebelum membangun sistem terlebih dahulu

dilakukan beberapa tahap analisis untuk mengidentifikasi segala kebutuhan yang akan

diterapkan dalam sistem agar tidak terjadi kesalahan dan sistem yang dibangun akan

optimal.

3.1.1

Analisis Masalah

Dalam ilmu pengetahuan banyak sekali digunakan kata-kata yang mempunyai arti

yang khas dan kebanyakan istilah itu berasal dari bahasa asing. Ilmu kedokteran yang

terlebih banyak memakai istilah yang berasal dari bahasa asing. Bukan ahli

kedokteran saja yang harus bisa mempergunakannya, asistennya, dan orang awam pun

perlu mengetahui istilah bahasa kedokteran.

Istilah-istilah kedokteran ini telah dirangkum di dalam sebuah kamus kedokteran

yang banyak beredar. Tak banyak dari kamus tersebut mempunyai jumlah halaman

yang banyak dan membuat kamus tersebut menjadi tebal. Hal tersebut sering kali

membuat orang menjadi malas untuk membuka kamus untuk sekedar mencari istilah

yang ingin diketahuinya. Untuk meningkatkan mobilitas pengguna kamus kedokteran,

(20)

kepada peningkatan kerja dan rasa ingin tahu. Maka daripada itu penulis ingin

membuat sebuah aplikasi kamus yang berbasis android di smartphone.

Untuk mencari istilah-istilah kedokteran dalam kamus, pencarian dilakukan

dengan melibatkan data yang jumlahnya banyak dan mengakibatkan kesulitan jika

dilakukan dengan cara manual. Dengan adanya aplikasi kamus kedokteran berbasis

android ini, proses pencarian istilah-istilah kedokteran akan menjadi lebih mudah dan

dipastikan akan lebih cepat.

Untuk mengidentifikasi masalah yang dijelaskan di atas digunakan diagram

Ishikawa

(fishbone diagram)

. Diagram Ishikawa adalah sebuah alat visual untuk

mengidentifikasi, mengeksplorasi, dan secara grafik menggambarkan secara detail

semua penyebab yang berhubungan dengan suatu permasalahan.

Pencocokan String Terhadap Sebuah Teks dengan

Knuth-Morris Pratt Pengguna Sistem Mesin Metode Material Mempunyai Mobilitas Yang Tinggi Belum ada Aplikasinya Pencarian Kata Belum Dapat

Dilakukan Sulitnya Mendapatkan Informasi Data Dengan Cepat Masih Melakukan Pencarian Manual Proses Data Sangat Banyak Masih Berbentuk Buku Cetak Kesulitan Dalam Mendapatkan Perangkat Elektronik Tidak dapat diupdate

Setiap saat

Gambar 3.1 Diagram Ishikawa untuk Analisis Masalah Sistem

Permasalahan utama yang ditunjukkan pada gambar 3.1 adalah pada persegi

panjang di posisi paling kanan gambar (bagian kepala) diagram ishikawa. Kategori

ditunjukkan pada empat persegi panjang yang masing-masing terhubung ke garis

utama, sedangkan sebab-akibat ditunjukkan dalam bentuk tanda panah horizontal pada

(21)

3.1.2

Analisis Kebutuhan Sistem

Dalam analisis kebutuhan sistem terdapat dua bagian penting yang harus dipenuhi,

yaitu analisis kebutuhan fungsional sistem dan analisis kebutuhan non-fungsional

sistem.

3.1.2.1 Kebutuhan Fungsional Sistem

Kebutuhan fungsional yang harus dimiliki oleh sistem untuk mencapai tujuannya.

Berikut ini merupakan beberapa kebutuhan fungsional sistem yang akan dibangun,

antara lain:

1. Sistem dapat membaca

pattern

yang ingin dicari pada teks yang telah diinput.

2. Sistem dapat memanggil, menggunakan, dan menampilkan data ataupun informasi

yang berupa

string

yang berasal dari database

Android

(dalam sistem

menggunakan

SQLite

).

3. Sistem dapat menghasilkan arti kata dari

pattern

yang dicari dengan menggunakan

algoritma

Knuth-Morris-Pratt.

4. Sistem ini merupakan aplikasi pada

platform Android.

3.1.2.2 Kebutuhan Non-Fungsional Sistem

Untuk mendukung kinerja sistem, sistem sebaiknya dapat berfungsi sebagai berikut:

1. Interface sistem harus mudah digunakan sehingga dapat dioperasikan dengan baik

oleh pengguna.

2. Sistem dibangun dengan perangkat yang tidak mengeluarkan biaya yang besar dan

dapat berjalan dengan baik pada berbagai versi sistem operasi perangkat

Android

.

3.1.3

Pemodelan

Pemodelan sistem dilakukan untuk memperoleh gambaran yang lebih jelas tentang

(22)

dilakukan oleh sebuah sistem sehingga sistem dapat berfungsi dengan baik sesuai

dengan kegunaannya.

Pada penelitian ini digunakan

UML

(

Unified Modeling Language

) sebagai

bahasa pemodelan untuk mendesain merancang sistem yang akan dibangun.

UML

yang digunakan antara lain

use case diagram

,

activity diagram

dan

seqance diagram.

3.1.3.1

Use Case Diagram

Use case diagram adalah teknik yang digunakan untuk menampilkan

functional

requirements

dari sebuah sistem

. Use case diagram

menampilkan bagaimana

software

akan bekerja dari sudut pandang

user

(bukan Developer).

Use Case Diagram

akan

menjelaskan fungsi apa saja yang dikerjakan oleh sistem.

Use Case Diagram

dari

sistem yang akan dibangun dapat ditunjukkan pada Gambar 3.2 berikut.

Gambar 3.2 Use Case Diagram

Sistem

Pada proses Pencarian istilah kata dengan Algoritma

Knuth-Morris-Pratt

, dapat

(23)

Name

Pencarian istilah kata

Actors

Pengguna

Description

Use Case

ini mendeskripsikan proses menampilkan field untuk

melakukan pencarian

Basic Flow

Pengguna dapat memasukkan istilah kata yang akan dicari

Alternate Flow

Pengguna dapat melihat kosakata dan tentang yang sudah tersimpan

Pre Condition

-Post Condition

Sistem akan melakukan pencocokan terhadap kata yang dicari

Pada proses Hasil, dapat dinyatakan dalam tabel 3.2.

Tabel 3.2. Use Case

Proses Menginputkan Istilah Kata yang Dicari

Name

Proses

Actors

Pengguna

Description

Use Case

ini mendeskripsikan proses menginputkan istilah kata

Basic Flow

Pengguna menginputkan istilah kata yang akan dicari

Alternate Flow

Pengguna dapat kembali ke menu awal dan memilih untuk mencari

data baru, kosakata dan tentang

Pre Condition

Pengguna dapat melihat menu awal

Post Condition

Pengguna mengetahui hasil pencarian istilah kata tersebut

Pada proses Hasil, dapat dinyatakan dalam tabel 3.3.

Tabel 3.3.

Use Case

Proses Tampil Hasil Pencarian

Name

Proses Tampil Hasil Pencarian

Actors

Pengguna

(24)

Basic Flow

Pengguna memilih istilah kata yang telah ditemukan

Alternate Flow

Pengguna dapat kembali ke menu awal dan memilih untuk mecari

data baru, kosakata dan tentang

Pre Condition

Pengguna dapat melihat menu awal

Post Condition

Pengguna mengetahui hasil pencarian istilah kata tersebut

3.1.3.2 Activity Diagram

Activity Diagram

untuk Proses pencarian dengan Algoritma

Knuth-Morris-Pratt,

dapat dilihat pada gambar 3.3 berikut.

(25)

Pada proses ini untuk tahap awal, sistem menampilkan Kamus Kedokteran

kemudian pengguna dapat melakukan pencarian kata. Sistem merespon dengan

menampilkan kata-kata yang bersesuaian dengan yang diinput pengguna. Kemudian

pengguna dapat memilih istilah kata yang telah ditemukan untuk melihat arti dari kata

tersebut.

3.1.3.3

Sequence Diagram

Sequence diagram

menggambarkan bagaimana objek saling berinteraksi melalui

message

dalam eksekusi

operation

, untuk satu buah

use case

.

Sequence

membantu

untuk menggambarkan data yang masuk dan keluar sistem.

Sequence diagram

pada

gambar 3.4.

Gambar 3.4

Sequence Diagram

Pada

Sequence diagram

diatas yang dilakukan adalah meng-input istilah kata yang

akan dicari kemudian proses pencarian dan pencocokan dengan algoritma

Knuth-Morris-Pratt.

Kemudian menampilkan hasil pencarian istilah kata.

3.1.3.4 Flowchart

Sistem

(26)

urutan-urutan dari prosedur yang ada di dalam sistem. Gambar 3.5 berikut ini

merupakan

Flowchart

dari sistem yang akan dibangun.

(27)

Perancangan antarmuka (

interface)

merupakan salah satu bagian yang sangat penting

dalam sebuah perancangan sistem. Perancangan antarmuka dibuat agar mudah dalam

membangun sebuah sistem.

Sebuah antarmuka harus dirancang dengan

memperhatikan pengguna sehingga dapat memberikan kemudahan dan kenyamanan

untuk digunakan oleh pengguna.

3.2.1

Antarmuka Menu Utama

Perancangan Menu Utama dapat dilihat pada gambar 3.6

Gambar 3.6 Rancangan Antarmuka Menu Utama

Keterangan dari Gambar 3.6 sebagai berikut:

(28)

6.

Listview

data Istilah untuk menampilkan seluruh istilah yang bersesuaian dengan

pencarian

3.2.2

Antarmuka Menu Kosa Kata

Perancangan Menu Kosa Kata dapat dilihat pada gambar 3.7.

Gambar 3.7 Rancangan Antarmuka Menu Kosa Kata

Keterangan dari Gambar 3.7 sebagai berikut:

1.

Imagebutton

untuk menampilkan Menu Navigasi.

2.

Application Icon

untuk menampilkan ikon dari aplikasi.

3.

Textview

Judul untuk menampilkan judul menu kosa kata.

4. Button Actionbar Add

untuk menambah daftar istilah baru.

5.

Textview

data Istilah untuk menampilkan nama istilah kedokteran.

6.

Imageview Delete

untuk menghapus data istilah.

7.

Imageview Edit

untuk mengubah data istilah.

(29)

Perancangan Menu Tentang dapat dilihat pada gambar 3.8.

Gambar 3.8 Rancangan Antarmuka Menu Tentang

Keterangan dari Gambar 3.8 sebagai berikut:

1.

Imagebutton

untuk menampilkan Menu Navigasi.

2.

Application Icon

untuk menampilkan ikon dari aplikasi.

3.

Textview

Judul untuk menampilkan judul menu tentang.

4. Textview

untuk menampilkan judul skripsi.

5.

Textview

untuk menmpilkan nama dan nim.

6.

Imageview

untuk menampilkan logo USU.

7.

Textview

untuk menampilkan lokasi universitas, fakultas dan jurusan.

3.2.4

Antarmuka Menu Navigation

(30)
[image:30.596.179.457.74.379.2]

Gambar 3.9 Rancangan Antarmuka Menu

Navigation

Keterangan dari Gambar 3.9 sebagai berikut:

1.

Imagebutton

untuk menampilkan Menu Navigasi.

2.

Application Icon

untuk menampilkan ikon dari aplikasi.

3.

Textview

Judul untuk menampilkan judul menu

navigation

.

4.

Navigation

Pencarian untuk menampilkan Menu Utama yaitu Menu Pencarian.

5.

Navigation

Kosa Kata untuk menampilkan Menu Kosa Kata.

(31)

4.1

Implementasi

Implementasi sistem merupakan tahapan yang harus dilakukan dalam proses

pengembangan perangkat lunak. Setelah melakukan analisis masalah, setelah

melewati proses analisis dengan mempertimbangkan kemungkinan yang akan

diterapkan kedalam sistem maka langkah selanjutnya adalah mengimplementasikan

apa yang telah dianalisis sebelumnya. Sistem ini dibangun dengan menggunakan

Eclipse 4.2.0.

Pada sistem ini terdapat 3 menu, yaitu: Menu Utama, Menu Kosa Kata,

Menu Tentang.

4.1.1

Implementasi Algoritma Knuth-Morris-Pratt

Penerapan algoritma

Knuth-Morris-Pratt

dalam sistem yang dibangun adalah pada

proses pencarian dengan algoritma

Knuth-Morris-Pratt

dalam mencari data istilah

kedokteran yang ingin diketahui artinya. Adapun langkah yang dilakukan adalah

melakukan pencarian data yang telah tersimpan lebih dulu pada edittext

dalam menu

utama.

(32)

Contoh:

[image:32.596.131.522.99.424.2]

Kata yang dicari: abses

Data yang telah tersimpan

Gambar 4.1 Contoh pencarian

Seperti yang telah dijelaskan sebelumnya bahwa algoritma mencocokkan karakter dari

kiri ke kanan.

Contoh pencarian algoritma Knuth-Morris-Pratt

Kata yang dicari: purpura

Kata yang telah disimpan: purulen purpurin purpura

(33)
[image:33.596.111.525.69.518.2]

Gambar 4.2 Pencarian Kata

Dalam algoritma

Knuth-Morris-Pratt, dimulai dengan mencari pencocokan di semua

posisi. Jika ketidakcocokan ditemukan di karakter pertama, dilanjutkan ke posisi

berikutnya. Dalam algoritma

Knuth-Morris-Pratt, kita menggeser selama beberapa

karakter, menghindari pencocokan berlebihan.

(34)

4.2

Antarmuka Sistem

Pada Aplikasi Kamus Kedokteran dalam pencarian menggunakan algoritma

Knuth-Morris-Pratt

ini terdapat tiga menu, yaitu:

1. Menu Utama

2. Menu Kosa Kata

3. Menu Tentang

4. Menu Navigation

4.2.1

Tampilan Menu Utama

[image:34.596.223.410.350.617.2]

Pada menu utama, terdapat 1

button actionbar navigation

yang berfungsi untuk

mengarahkan pengguna menuju halaman lain, 1 edittext

yang berfungsi untuk mencari

data istilah yang ingin dicari artinya menggunakan algoritma

knuth-morris-pratt.

Menu utama dapat dilihat pada gambar 4.3.

Gambar 4.3 Tampilan Menu Utama

(35)
[image:35.596.222.411.266.570.2]

Pada menu ini akan ditampilkan 2 button actionbar

yaitu: button actionbar navigation

yang berfungsi untuk mengarahkan ke halaman lain, button actionbar add yang

berfungsi jika ingin menambahkan istilah baru dan ditampilkan 2

imageview

yaitu:

imageview delete

yang berfungsi jika kita ingin menghapus istilah yang telah

tersimpan, imageview edit

yang berfungsi jika kita ingin mengubah istilah ataupun arti

dari data yang telah tersimpan. Tampilan menu kosa kata akan ditampilkan dalam

gambar 4.4. sebagai berikut

Gambar 4.4 Tampilan Menu Kosa Kata

Pada menu kosa kata juga akan menampilkan keseluruhan data yang telah tersimpan

dalam listview.

4.2.3

Tampilan Menu Tentang

(36)
[image:36.596.221.411.70.373.2]

Gambar 4.5 Tampilan Menu Tentang

4.2.4

Tampilan Menu Navigation

(37)
[image:37.596.220.413.70.370.2]

Gambar 4.6 Tampilan Menu Navigation

4.3

Pengujian Sistem

Pengujian sistem dilakukan untuk mengetahui bagaimana kinerja sistem dalam

pencarian istilah kedokteran menggunakan algoritma

Knuth-Morris-Pratt. Dalam

pengujian yang akan dicari adalah istilah kedokteran sebagai

fieldnya. Semua hasil

pencarian ditampilkan sesuai dengan inputan yang match

pada pencarian.

4.3.1

Pengujian Pencarian Data Istilah Dengan Algoritma Knuth-Morris-Pratt

Pada Tabel 4.1 di bawah dapat dilihat hasil pencarian data istilah menggunakan

Knuth-Morris-Pratt.

.

Tabel 4.1 Hasil Pencarian Data Istilah dengan Algoritma Knuth-Morris-Pratt

Nama

Hasil

Pencarian

Waktu

Pencarian

(38)

A01

Match

0.33 sec

A02

Match

0.6 sec

(39)

A04

Match

0.05

A05

Mismatch

A06

Mismatch

(40)

4.3.2

Pengujian Waktu Pencarian Data Istilah Dengan Algoritma

Knuth-Morris-Pratt

Pada Tabel 4.2 di bawah dapat dilihat hasil waktu pencarian data istilah menggunakan

Knuth-Morris-Pratt.

Tabel 4.2 Hasil Waktu Pencarian Data Istilah dengan Algoritma

Knuth-Morris-Pratt

Nama

Waktu

[image:40.596.108.476.220.772.2]

Pencarian

Gambar Hasil

A01

0.0588 secs

(41)

A03

0.0541 secs

A04

0.0567 secs

A05

(42)

Dari tabel 4.2 didapatkan rata-rata dari waktu pencarian satu karakter adalah selama

0.06 secs.

4.3.3

Pengujiann Proses Tambah Data

[image:42.596.219.414.240.559.2]

Pada Gambar 4.7 terlihat hasil proses tambah data istilah. Data yang telah ditambah

akan disimpan di

database sqlite

dengan nama tabel

Word

dalam kolom

Column_Type_Istilah dan kolom Column_Type_Arti dan dapat dilihat pada

listview

menu kosa kata.

Gambar 4.7 Menambah Data

4.3.4

Pengujian Proses Edit Data

(43)
[image:43.596.220.412.70.378.2]

Gambar 4.8 Mengubah Data

4.3.5

Pengujian Proses Delete

Data

(44)
[image:44.596.217.416.68.389.2]
(45)

5.1 Kesimpulan

Berdasarkan hasil dari Implementasi Algoritma Pencocokan

String

Knuth-Morris-Pratt

Dalam Pembuatan Kamus Kedokteran Pada

Platform

Android, maka dapat

disimpulkan bahwa:

1. Sistem mengimplementasikan Algoritma Knuth-Morris-Pratt dalam pencarian

atau pencocokan data dengan field istilah sebagai inputan pencariannya.

2. Dalam Algoritma Knuth-Morris-Pratt dimungkinkan pergeseran sejauh mungkin

menurut tabel next

untuk menghindari pencarian berlebihan.

3. Hasil yang diperoleh dari pencarian menampilkan satu karakter yang cocok

dengan kecepatan 0.06 detik.

5.2 Saran

Adapun saran yang dapat diberikan untuk mengembangkan penelitian ini adalah

sebagai berikut:

1. Untuk pengembangan selanjutnya, diharapkan agar dapat menangani pergeseran

pattern

dari kanan ke kiri untuk proses pencarian yang lebih efisien.

2. Untuk pengembangan selanjutnya, diharapkan aplikasi ini menyediakan menu

pilihan algoritma pencarian string dalam proses pencarian seperti Boyer-Moore,

Rabin-Karp sehingga member pengetahuan tentang algoritma pencarian string.

3. Untuk pengembangan selanjutnya, diharapkan agar dapat menambahkan gambar

(46)
(47)

LANDASAN TEORI

2.1.

Information Retrieval System

2.1.1. Pengertian

Information Retrieval System

Information retrieval system

merupakan bagian dari bidang ilmu komputer yang

bertujuan untuk pengambilan informasi dari dokumen-dokumen yang didasarkan pada

isi dan konteks dari dokumen-dokumen itu sendiri. Definisi

Information Retrieval

System

menurut Gerald J. Kowalski adalah suatu sistem yang mampu melakukan

penyimpanan, pencarian, dan pemeliharaan informasi. Informasi dalam konteks yang

dibahas dalam buku ini dapat berupa informasi teks (termasuk data numerik dan

tanggal), gambar, audio, video, dan objek multimedia lainnya (J. Kowalski, G, 2000)

Definisi menurut Christoper Manning adalah proses menemukan suatu tema

utama (biasanya berupa dokumen) dari suatu data yang tidak terstruktur dalam koleksi

yang besar (tersimpan dalam komputer) untuk memenuhi kebutuhan informasi yang

relevan.

Data tidak terstruktur adalah data yang tidak memiliki susunan semantik, atau

dapat juga dikatakan data yang tidak memiliki struktur yang mudah dikenali oleh

komputer, data ini biasanya berupa teks. Walaupun dalam kenyataannya tidak ada

data yang benar-benar bersifat “tidak terstruktur”, termasuk teks, karena teks juga

memiliki struktur, seperti judul, paragraf, dan catatan kaki yang mana biasanya

struktur tersebut direpresentasikan dalam suatu dokumen dengan memberikan tanda

(markup)

yang jelas untuk masing-masing struktur tersebut. Selain memfasilitasi

penemuan kembali pada data yang tidak terstruktur, IR juga memfasilitasi pencarian

(48)

mengandung

kata

“Java”

dengan badan

teks

yang

mengandung

kata

“threading”(Manning, 2008).

Sebagai suatu bidang tersendiri dalam ilmu komputer, IR memiliki beberapa sub

bidang, yaitu sebagai berikut:

1.

Document routing

,

filtering

, dan

selective dissemination

. Tema ini berbalik

arah dengan proses IR pada umumnya. Jika proses IR yang umum adalah

membandingkan dokumen dengan

query

yang dimasukan

user

, sedangkan

pada

document routing

,

filtering

, dan

selective dissemination

sistem akan

membandingkan antar dokumen berdasarkan

query

untuk mendapatkan

dokumen yang dapat menarik minat pengguna.

Contoh pada tema ini adalah agregator berita, misalnya dengan menggunakan

proses

routing

untuk memisahkan berita berdasarkan tema tertentu (bisnis,

politik, olahraga, dan sebagainya).

2.

Text clustering and categorization system

, adalah sistem IR yang akan

mengelompokkan dokumen berdasarkan kunci tertentu.

3.

Summarization system

atau peringkas teks, sistem ini akan membuat ringkasan

dari teks yang diberikan.

Contohnya adalah

snippet

yang ditampilkan pada hasil pencarian

web

.

4.

Information extraction system

, topik IR ini berfungsi mengidentifikasi entitas

bernama, seperti nama tempat dan tanggal. Sistem ini juga dapat

menkombinasikan informasi-informasi ke dalam rekaman terstruktur yang

mendeskripsikan hubungan antara entitas-entitas tersebut.

Misalkan untuk membuat daftar buku dan pengarangnya dari

web

data,

ekstraksi informasi dari legal document (seperti undang-undang,

peraturan pemerintah, dan sebagainya).

5.

Topic detection and tracking system

(sistem pendeteksi dan pelacakan topik),

sistem ini berguna untuk mengidentifikasi topik peristiwa dalam berita dan

sumber-sumber informasi yang sama.

6.

Expert search system

(sistem pencari keahlian), sistem ini akan melakukan

pengidentifikasian keahlian dari seorang anggota organisasi.

7.

Question answering system

(sistem tanya jawab), adalah sistem yang

mengintegrasikan informasi dari berbagai sumber untuk memberikan jawaban

yang singkat dari pertanyaan tertentu. Sistem ini kadang juga digabungkan

(49)

kepada user berdasarkan query yang diinputkan, namun pada sistem tanya

jawab yang dikembalikan adalah berupa kalimat singkat untuk menjawab

pertanyaan user.

8.

Multimedia information retrieval system

, adalah tema IR yang

mengembangkan teknik-teknik IR pada data multimedia seperti gambar, video,

musik, dan pidato. Contoh dari sub-bidang ini adalah pencarian gambar,

pencarian musik, video, dan sebagainya (Butcher, S, 2010).

2.2. Pencocokan String (String Matching)

2.2.1. Pengertian Pencocokan String

Pencocokan

string

merupakan bagian terpenting dari sebuah proses pencarian

string

(

string searching

) dalam sebuah dokumen. Hasil dari pencarian sebuah

string

dalam

dokumen tergantung dari teknik atau cara pencocokan

string

yang digunakan.

Pencocokan

string

diartikan sebagai sebuah permasalahan untuk menemukan pola

susunan karakter

string

di dalam

string

lain atau bagian dari isi teks (Syaroni, 2005).

Pencarian string yang juga bisa disebut pencocokan

string

(

string matching

)

merupakan algoritma untuk melakukan pencarian semua kemunculan

string

pendek

pattern

[ 0…n-1] yang disebut

pattern

di

string

yang lebih panjang teks [0…m-1]

yang disebut teks (Charras, 1997).

2.2.2. Kerangka Kerja Pencocokan String

Persoalan pencarian string dirumuskan sebagai berikut:

1. Sebuah teks, yaitu sebuah (

long

)

string

yang panjangnya n karakter.

2.

Pattern

, yaitu sebuah

string

dengan panjang m.

Dengan sebuah nilai karakter (m<n) yang akan dicari dalam teks. Dalam algoritma

pencocokan

string,

teks diasumsikan berada di dalam memori, sehingga bila kita

mencari

string

di dalam sebuah arsip, maka semua isi arsip perlu dibaca terlebih

dahulu kemudian disimpan di dalam memori. Jika

pattern

muncul lebih dari sekali di

dalam teks, maka pencarian hanya akan memberikan keluaran berupa lokasi

pattern

(50)

2.2.3. Kerangka Pikir Pencocokan String

Algoritma

string matching

dapat diklasifikasikan menjadi 3 bagian menurut arah

pencariannya, yakni:

1.

From left to right

Dari arah yang paling alami, dari kiri ke kanan, yang merupakan arah untuk

membaca. Algoritma yang termasuk kategori ini adalah algoritma

brute force

,

algoritma

knuth-morris-pratt.

Untuk contoh pencarian kata menggunakan

[image:50.596.127.468.276.526.2]

algoritma

from left to right

dapat dilihat pada Tabel 2.1.

Tabel 2.1. Pencarian Kata Menggunakan Algoritma Knuth-Morris-Pratt

i

0

1

2

3

4

5

6

Pattern(i)

A

R

A

R

I

E

F

Prefix(i)

0

0

1

2

0

0

0

i

0

1

2

3

4

5

6

7

8

9 10 11 12

Pattern

A

R

A

R

I

E

F

Text

A

R

A

R

E

F

A

R

A

R

I

E

F

FASE 1

A

R

A

R

I

E

F

FASE 2

A

R

A

R

I

E

F

FASE 3

A

R

A

R

I

E

F

FASE 4

A

R

A

R

I

E

F

2.

From right to left

Dari arah kanan ke kiri, arah yang biasanya menghasilkan hasil terbaik secara

partikal. Algoritma yang termasuk kategori ini adalah algoritma

boyer-moore

.

[image:50.596.126.510.672.752.2]

Contoh pencarian menggunakan algoritma boyer-moore dapat dilihat pada

Tabel 2.2.

Tabel 2.2 Pencarian Kata Menggunakan Algoritma Boyer-Moore

I

0

1

2

3

4

5

6

7

8

9 10 11 12 13 14

Pattern

A

R

I

E

F

Text

A

R

A

R

I

F

A

R

I

F

A

R

I

E

F

(51)

FASE 3

A

R

I

E

F

FASE 4

A

R

I

E

F

3.

In a specific order

Dari arah yang ditentukan secara spesifik oleh algoritma tersebut, arah ini

menghasilkan hasil terbaik secara teoritis. Algoritma yang termasuk kategori ini

adalah algoritma

colossi

dan algoritma

crochemore-perrin

. Untuk contoh dari

[image:51.596.128.533.59.732.2]

algoritma

in a specific order

dapat dilihat pada Tabel 2.3.

Tabel 2.3. Pencarian Kata Menggunakan Algoritma Colossi

nd= 3

Fase 1

Bergeser 3 karakter (shift[2])

(52)

Bergeser 2 karakter (shift[1])

Beberapa konsep

string matching

antara lain:

1.

Approximate string matching

, yaitu sebuah pencarian terhadap pola-pola

string

(mengandung beberapa proses yaitu menghitung jumlah karakter yang

berbeda, penyisipan dan penghapusan karakter) sehingga mendekati pola atau

pattern

dari

string

yang dicari.

2. Algorima pencarian

string

adalah sebuah proses pencarian tempat dari suatu

atau beberapa

string

yang ditemukan dalam sebuah kumpulan

string

atau teks.

Jalan paling sederhana adalah dengan cara membaca karakter satu persatu dan

melakukan perhitungan kesalahan posisi yang ada dari

string

yang dicari

(Charras, 1997).

2.2.4. Macam Algoritma Pencocokan String

Secara garis besar

string matching

dibedakan menjadi 2 yaitu:

1.

Exact string matching.

Exact string matching

, merupakan pencocokan string secara tepat dengan

susunan karakter dalam

string

yang dicocokkan memiliki jumlah maupun

urutan karakter dalam string yang sama. Bagian algoritma ini bermanfaat jika

pengguna ingin mencari

string

dalam dokumen yang sama persis dengan

string

masukan.

Beberapa algoritma

exact string matching

yang mengemuka antara lain:

a.

Brute Force

Analisis dengan metode

Brute Force

adalah membandingkan karakter per

karakter sampai ditemukannya pola yang dicari dari awal

string

sampai

dengan akhir

string

.

b.

Knuth-Morris-Pratt

Metode yang akan digunakan dalam penelitian ini dan akan dijelaskan

(53)

Algoritma

boyer-moore

adalah algoritma yang mempertimbangkan

string

matching dengan efisiensi tinggi dari aplikasi. Algoritma ini melakukan

pencocokan karakter yang dimulai dari kanan ke kiri.

2.

Inexact string matching

atau

Fuzzy string matching.

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 matching

) atau kemiripan ucapan

(

phonetic string matching

). Metode

fuzzy string matching

diarahkan untuk

mencari nilai dari beberapa

string

yang mendekati dan tidak hanya

menghasilkan cocok atau tidak cocok (Syaroni, 2005).

Konsep

Fuzzy String Matching

:

1.

Fuzzy String Matching

adalah salah satu metode pencarian

string

yang

menggunakan proses pendekatan terhadap pola dari

string

yang dicari.

2. Melakukan pencarian terhadap

string

yang sama dan juga

string

yang

mendekati dengan

string

lain yang terkumpul dalam sebuah penampung

atau kamus.

Kunci dari konsep pencarian ini adalah bagaimana memutuskan bahwa sebuah

string

yang dicari memiliki kesamaan dengan

string

tertampung di kamus, meskipun

tidak sama persis dalam susunan karakternya. Untuk memutuskan

string

hasil

pencarian jika ditemukan

string

hasil pendekatan (aproksimasi) (Dewanto, 2007)

2.3. Algoritma Knuth-Morris-Pratt

Algoritma

Knuth-Morris-Pratt

(KMP) mencari kehadiran sebuah kata

w

dalam teks

s

dengan melakukan observasi awal (

preprocessing

) yaitu ketika muncul ketidaksamaan

kata ini mempunyai informasi mengenai kapan kesamaan selanjutnya bermula,

dengan cara mengecek ulang kata sebelumnya. Algoritma ini dibuat oleh Knuth dan

Pratt dan sendiri oleh J. H. Morris pada tahun 1977, namun ketiganya

(54)

Algoritma

Knuth-Morris-Pratt

(KMP) merupakan algoritma yang digunakan

untuk melakukan proses pencocokan

string.

Algoritma ini merupakan jenis

Exact

String matching Algorithm

yang merupakan pencocokan

string

secara tepat dengan

susunan karakter dalam

string

yang sama Contoh : kata algoritmik akan menunjukkan

kecocokan hanya dengan kata algoritmik. Pada algoritma

Knuth-Morris-Pratt

(KMP),

disimpan informasi yang digunakan untuk melakukan pergeseran lebih jauh, tidak

hanya satu karakter seperti algoritma

Brute Force.

Algoritma ini melakukan

pencocokan dari kiri ke kanan (Fadillah, 2008).

2.3.1. Fungsi Pinggiran Pada Algoritma Knuth-Morris-Pratt

Fungsi pinggiran Prefix(i) didefinisikan sebagai ukuran awalan terpanjang dari Pattern

yang merupakan akhiran dari

Pattern

[1…

i

]. Sebagai contoh, tinjau

Pattern(i) =

ararief. Nilai untuk setiap karakter di dalam

Pattern

dapat dilihat pada Tabel 2.4.

[image:54.596.125.431.398.456.2]

(Wibowo, 2012).

Tabel 2.4. Fungsi Pinggiran

I

0

1

2

3

4

5

6

Pattern(i)

A

R

A

R

I

E

F

Prefix(i)

0

0

1

2

0

0

0

2.3.2. Pencarian Dengan Algoritma Knuth-Morris-Pratt

Secara sistematis, langkah-langkah yang dilakukan algoritma

Knuth-Morris-Pratt

pada saat mencocokkan

string.

1. Algoritma

Knuth-Morris-Pratt

mulai mencocokkan

pattern

pada awal teks.

2. Dari kiri ke kanan, algoritma ini akan mencocokkan karakter per karakter

pattern

dengan karakter di teks yang bersesuaian, sampai salah satu kondisi berikut

dipenuhi:

a. Karakter di

pattern

dan di teks yang dibandingkan tidak cocok (

missmatch

).

b. Semua karakter di

pattern

cocok. Kemudian algoritma akan memberitahukan

penemuan di posisi ini.

c. Algoritma kemudian menggeser

pattern

berdasarkan tabel next, lalu

(55)

kata P = “ARARIEF” dan kalimat T = “ARAREFARARIEF”. Pada waktu tertentu,

algoritma dalam keadaan yang ditentukan oleh dua variabel bilangan bulat:

1. m yang menunjukkan posisi dalam T yang merupakan awal dari perbandingan

prospektif untuk P.

2. i indeks di P yang menunjukkan karakter saat ini sedang dipertimbangkan.

Dalam setiap langkah, kita membandingkan T [m + i] dengan P [i] dan jika

mereka sama. Hal ini digambarkan, pada awal menjalankan, seperti Gambar 2.1.

m

0

1

2

3

4

5

6

7

8

9 10 11 12

T

A

R

A

R

E

F

A

R

A

R

I

E

F

P

A

R

A

R

I

E

F

[image:55.596.147.449.275.340.2]

i

0

1

2

3

4

5

6

Gambar 2.1. Iterasi metode Knuth-Morris-Pratt

Pertama

Kita lanjutkan dengan membandingkan karakter berturut-turut P untuk karakter

dari T, bergerak dari satu ke yang berikutnya apakah mereka cocok. Namun, pada

langkah kelima, kita mendapatkan T[4] adalah ‘E’ dan P[4] = ‘I’, tidak cocok. Karena

itu kita beralih ke karakter berikutnya, menetapkan jumlah pergeseran dari nilai fungsi

pinggiran, dapat dilihat dari gambar 1 bahwa karakter terakhir yang cocok adalah P[4]

= ‘R’ yang memiliki nilai fungsi pinggiran = 2 sebagaimana dilihat pada Gambar 2.2.

m

0

1

2

3

4

5

6

7

8

9 10 11 12

T

A

R

A

R

E

F

A

R

A

R

I

E

F

P

A

R

A

R

I

E

F

I

0

1

2

3

4

5

6

Gambar 2.2 Iterasi metode Knuth-Morris-Pratt

Kedua

Sistem kembali memiliki ketidaksesuaian pada P[2] (T[4]). Daripada mulai mencari

lagi di T[3], sistem mencatat bahwa tidak ada ‘A’ terjadi antara posisi 2 dan 4 di T

kecuali pada 2; oleh karena itu, setelah memeriksa karakter yang sebelumnya, kita

tahu tidak ada peluang untuk menemukan awal yang cocok jika kita memeriksa

mereka lagi. Oleh karena itu kita beralih ke karakter berikutnya, menetapkan m = 5

[image:55.596.146.450.516.594.2]
(56)

m

0

1

2

3

4

5

6

7

8

9 10 11 12

T

A

R

A

R

E

F

A

R

A

R

I

E

F

P

A

R

A

R

I

E

F

[image:56.596.149.451.71.150.2]

i

0

1

2

3

4

5

6

Gambar 2.3 Iterasi metode Knuth-Morris-Pratt

Ketiga

Pencarian ini masi gagal karena terjadi ketidak sesuaian di P[1] (T[5]). Sehingga

kita kembali ke awal P dan mulai mencari di karakter berikutnya T: m = 6, reset i = 0.

Langkah selanjutnya dapat dilihat dari Gambar 2.4.

M

0

1

2

3

4

5

6

7

8

9 10 11 12

T

A

R

A

R

E

F

A

R

A

R

I

E

F

P

A

R

A

R

I

E

F

[image:56.596.143.449.238.315.2]

I

0

1

2

3

4

5

6

Gambar 2.4 Iterasi metode Knuth-Morris-Pratt

Keempat

Kali ini kita dapat menyelesaikan seluruh pencocokan, yang karakter pertama

adalah T[6] (Mulyana, 2014).

Berikut adalah

pseudocode

algoritma KMP pada fase pra-pencarian:

procedure preKMP (

input p : array[0..n-1] of char, input n : integer,

input/ output kmpNext : array[0..n] of integer )

Deklarasi: i,j: integer Algoritma:

i := 0;

j := kmpNext[0] := -1; while (i < n) {

while (j > -1 and not (P[i] = P[j])) j := kmpNext[j];

i := i+1; j := j+1;

if (P[i] = P[j])

kmpNext[i] := kmpNext[j]; else

kmpNext[i] := j; endif

endwhile }

Dan berikut adalah pseudocode algoritma KMP pada fase pencarian:

procedure KMPSearch(

input m, n : integer,

input P : array[0..n-1] of char, input T : array[0..m-1] of char,

(57)

Deklarasi:

i, j, next : integer

kmpNext : array[0..n] of integer Algoritma:

preKMP(n, P, kmpNext) i:=0

while (i<= m-n) do j:=0

while (j<n and T[i+j] = P[j]) do j:= j+1

endwhile

if(j >= n) then

ketemu[i]:= true; endif

next := j - kmpNext[j] i:= i+next

endwhile

2.3.3. Kompleksitas Waktu Algoritma

Knuth-Morris-Pratt

Untuk menghitung fungsi pinggiran dibutuhkan waktu

O

(

m

), sedangkan pencarian

string

membutuhkan waktu

O

(

n

), sehingga kompleksitas waktu algoritma KMP

adalah

O

(

m

+

n

) (Guntur, 2008).

2.3.4. Kelebihan Algoritma Knuth-Morris-Pratt

Pada algoritma

Knuth-Morris-Pratt

ini akan menyimpan informasi yang digunakan

untuk melakukan jumlah pergeseran. Algoritma menggunakan informasi tersebut

untuk membuat pergeseran yang lebih jauh, tidak hanya satu karakter. Algoritma

Knuth-Morris-Pratt

ini menjanjikan karena memiliki waktu pencarian yang linier,

baik dalam kasus terbaik atau terburuk (Rizki, 2008).

Implementasi algoritma

Knuth-Morris-Pratt

akan meningkatkan kemampuan

dalam pencarian

query

dalam dokumen. Algoritma

Knuth-Morris-Pratt

cocok untuk

pencarian

string

dengan alphabet sedikit seperti biner (Yusup, 2011).

Adapun kelebihan Algoritma

Knuth-Morris-Pratt

telah digunakan dalam

penelitian-penelitian. Penelitian oleh Mulyana (2014) yang menerapkan algoritma

Knuth-Morris-Pratt

pada

game puzzle

untuk mencari kecocokan pola warna telah

dihasilkan bahwa kemampuan pencarian

Knuth-Morris-Pratt

dalam mencari suatu

pola blok warna di dalam blok warna utama pada permainan

puzzle

dalam hal sumber

(58)

yang berperan pada saat pencarian yang dilakukan. Sedangkan dalam hal kecepatan,

sangat tergantung pada spesifikasi perangkat keras pengujian. Hal lain yang dapat

diukur adalah skalabilitas waktu pencarian atau kompleksitas waktu.

Penelitian oleh Wibowo (2012) yang menerapkan algoritma

Knuth-Morris-Pratt

pada pembuatan aplikasi untuk mendeteksi kebenaran perintah SQL

Query

menggunakan metode

Knuth-Morris-

Gambar

Gambar 3.1 Diagram Ishikawa untuk Analisis Masalah Sistem
Gambar 3.2 Use Case Diagram Sistem
Tabel 3.2. Use Case Proses Menginputkan Istilah Kata yang Dicari
Gambar 3.3 Activity Diagram
+7

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

[r]

Sekali-sekali pasien akan mengalami rasa napas yang pendek (seperti orang yang kelelahan) dan bukanya tekanan pada substernal.Sekali-sekali bisa pula

Sebuah skripsi yang diajukan untuk memenuhi salah satu syarat memperoleh gelar sarjana pada Fakultas Pendidikan Bahasa dan Sastra. ©Rima Puspasari 2016 Universitas

Tujuan dari Penelitian ini adalah, untuk menghasilkan soal-soal open-ended yang valid dan praktis pada pokok bahasan segitiga dan segiempat di SMP, serta untuk melihat

Kepada mahasiswa disampaikan pem- belajaran dengan urutan (1) fungsi atap dan elemen atap; (2) pendidikan karakter: pentingnya kerjasama di dalam tim sama