Mesin Kata


“Atas permintaan seseorang yang tidak bisa tolak permintaannya maka muncullah tulisan yang sederhana ini. Semoga bermanfaat.”

Pendahuluan

Mesin kata, apakah gerangan itu? Sebenarnya hanya program untuk mengenali kata pada suatu karakter dan mencatat frekuensi  kemunculannya. Namun apakah sesederhana itu? Tentu saja tidak karena perlu analisa yang cukup lama bagi seseorang yang jarang ngoding. Kadang-kadang meskipun kita tahu bagaimana alur logika program yang akan dibuat kita masih sering dibuat bingung pada saat implementasi pada program. Pada kesempatan kali ini saya menggunakan java sebagai contoh.

Analisa

Sebelum kita mulai membuat alur logika, sebaiknya kita membuat list variabel yang digunakan, apa yang akan kita cari dan bagaimana menyimpannya jika kita sudah menemukannya.

List Variabel:

  1. sentence – > untuk menyimpan input kalimat
  2. word –> untuk menyimpan current word dalam program
  3. maxArr –> untuk menyimpan panjang kalimat
  4. wordCollection –> untuk menyimpan himpunan kata yang digunakan
  5. sumWord –> untuk menyimpan banyaknya kata dalam suatu kalimat
  6. sumCollWord –> untuk menyimpan banyaknya kata / bersifat unik.
  7. cp –> current pointer (variabel yang ini nyontek pak marji )
  8. array of Word –> array yang berisi kelas untuk menyimpan himpunan kata dan frekuensi kemunculannya. Hal ini diperlukan karena tidak ada tipe data yang mampu menyimpan dua jenis variabel yang berbeda karena itu dibuat kelas baru yaitu kelas Word.

Isi dari kelas word secara garis besar sebagai berikut

public class Word{
private String word;
private int frek;/ *
* Fungsi-fungsi setter dan getter
* /

}

Sepertinya sudah cukup banyak variabel yang digunakan, sebelum melanjutkan ke alur logika mungkin ada pertanyaan seperti ini:

“mengapa jumlah himpunan kata disimpan dan untuk apa menyimpan himpunan kata ”.  Himpunan kata disimpan untuk mengetahui kata apa saja yang terdapat dalam kalimat sehingga mudah dalam perhitungan frekuensi kemunculan. sedangkan jumlah himpunan kata digunakan sebagai jumlah array dari kelas Word untuk menyimpan kata dan frekuensi.

alur logika

Pointer (cp) digunakan sebagai penunjuk dari karakter yang sedang diproses. jika terdapat spasi dalam awal kalimat maka perlu dieliminir terlebih dahulu. Setelah mencapai kondisi dimana cp menunjuk karakter bukan spasi maka nilai cp ditambah terus sampai karakter yang ditunjuk cp adalah spasi dan cp kurang dari maxArr. Dibawah ini adalah representasi dalam code:

public void nextWord(){
int ip = cp;    //inisial pointer
String wordTmp=””;
while(sentence.charAt(cp%maxArr)!=’ ‘ && cp < maxArr){
wordTmp+=sentence.charAt(cp);
cp++;
}
word = wordTmp;
ignoreBlank();
}

public void ignoreBlank(){
while(getSentence().charAt(getCp()%maxArr)==’ ‘ && getCp() < maxArr){
cp++;
}

Dari sekilas code diatas ada yang agak aneh yaitu cp%maxArr, untuk apa dilakukan operasi seperti itu? Mungkin itu adalah pertanyaan yang terbesit dalam sanubari anda.🙂. Karena cara itu dirasa kurang efisien maka solusinya dengan mengganti posisi syarat.

while(cp < maxArr && sentence.charAt(cp%maxArr)!=’ ‘ ){

//blablabla

}

Operasi tersebut dilakukan karena dalam String memiliki index antara 0 sampai (panjang string –1), untuk menghindari array out of bound maka diperlukan operasi tersebut. Misal panjang string adalah 6 maka pada saat cp bernilai 6 proses tidak menghentikan proses namun kembali ke syarat while pada saat inilah index berada diluar batas maksimum array sehingga terjadi error. Karena itulah digunakan operasi modulus sehingga meskipun index diluar batasan array tidak akan terjadi error.

Setelah fungsi nextWord selesai maka langkah yang terakhir adalah pengecekan jumlah kata pada suatu kalimat. Untuk lebih jelasnya sebagai berikut:

public void wordCount(){
for(int x=-1;x<sumCollWord;x++){
while(!eop()){
ignoreBlank();
nextWord();
if(arrWord[x].word().equals(word)){
arrWord[x].frek(arrWord[x].frek()+1);
}

}
setCp(0);
}
}

public boolean eop(){
return (cp>=maxArr);
}

Bagaimana? sudah memberi pencerahan apa belum?? Semoga bermanfaat.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s