Implementasi Algortima Manber Pada Persamaan Makna Bahasa Indonesia dan Melayu Berbasis Android

LAMPIRAN
LISTING PROGRAM

1.

Program Manber

package com.agus.sinonimindomelayu.algo;
import com.agus.sinonimindomelayu.adapter.DictionaryItem;
import com.agus.sinonimindomelayu.adapter.ResultItem;
import java.util.ArrayList;
import java.util.List;
public class Manber {
public static final int N = 2;
public static final int PRIME_BASE = 2;
public static final double MIN_MANBER = 65;
public static Word countHash(Word word){
for (int i = 0; i < word.getNgram().length; i++){
char text[] = word.getNgram()[i].toCharArray();
int hash = 0;
for (int j = 0; j < text.length; j++){

hash += ((int)text[j] * Math.pow(PRIME_BASE, N - j 1));

Universitas Sumatera Utara

}
word.getHash().add(hash);
}
return word;
}
public static ArrayList union(ArrayList
ArrayList set2){
ArrayList temp = (ArrayList)set1.clone();
for (Integer num : set2) {
if (temp.indexOf(num) == -1){
temp.add(num);
}
}
return

set1,


temp;

}
public static ArrayList intersection(ArrayList
set1, ArrayList set2)
{
ArrayList set = new ArrayList();
for (Integer num: set2) {
if (set1.contains(num)){
set.add(num);
}
}
return set;
}
public
static
List
process(Word
uji,

List data){
ArrayList result = new ArrayList();
for (DictionaryItem item: data) {
ResultItem resultItem = new ResultItem();
resultItem.setDataUji(uji);
resultItem.setTeks(item);
Word dataBanding = new Word(item.getMelayu());
dataBanding.setNGramValue(Manber.N);
countHash(dataBanding);
resultItem.setDataBanding(dataBanding);
resultItem.setMamberValue(((double)
intersection(uji.getHash(), dataBanding.getHash()).size()
/
union(uji.getHash(),
dataBanding.getHash()).size()) * 100);
if (resultItem.getMamberValue() >= Manber.MIN_MANBER){
result.add(resultItem);
}
}
return result;

}
}

Universitas Sumatera Utara

2.

Program N-Gram

package com.agus.sinonimindomelayu.algo;
import java.io.Serializable;
import java.util.ArrayList;
public class Word implements Serializable{
private String text;
private String[] ngram;
private ArrayList hash;
public Word(){
this.text = "";
this.hash = new ArrayList();
}

public Word(String text){
this.text = text;
this.hash = new ArrayList();
}
public void setText(String text) {
this.text = text;
}
public String getText() {
return text;
}
public void setHash(ArrayList hash) {
this.hash = hash;
}
public ArrayList getHash() {
return hash;
}
public void setNgram(String[] ngram) {
this.ngram = ngram;
}
public String[] getNgram() {

return ngram;
}
public void setNGramValue(int N){
if (this.text.length() > 0){
this.ngram = new String[this.text.length() - (N -1)];
for (int i = 0; i < this.ngram.length; i++){
this.ngram[i] = this.text.substring(i, i + N);
}
}
}
}

3.

Program Menu Utama

Universitas Sumatera Utara

package com.agus.sinonimindomelayu.activity;
import android.content.Intent;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import
import
import
import
import

import
import
import
import

com.agus.sinonimindomelayu.R;
com.agus.sinonimindomelayu.adapter.DictionaryItem;
com.agus.sinonimindomelayu.adapter.ResultAdapter;
com.agus.sinonimindomelayu.adapter.ResultItem;
com.agus.sinonimindomelayu.algo.Manber;
com.agus.sinonimindomelayu.algo.Word;
com.agus.sinonimindomelayu.helper.AssetsHelper;
com.google.gson.Gson;
com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends ParentActivity {
private ListView listView;

private ResultAdapter adapter;
private List dictionaryItemList;
private List dataSource;
private EditText txt_cari;
private Button btn_cari;
private TextView lbl_running_time;
private TextView lbl_not_found;
public MainActivity() {
super(R.layout.activity_main);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initComponent();
dictionaryItemList = new ArrayList();
dataSource = new ArrayList();
Type
listType
=
new

TypeToken(){}.getType();
dataSource
=
new
Gson().fromJson(AssetsHelper.with(getApplicationContext()).getString("
data.json"), listType);

Universitas Sumatera Utara

adapter
=
new
ResultAdapter(this,
R.layout.result_item,
dictionaryItemList);
listView = (ListView)findViewById(R.id.list_result);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new
AdapterView.OnItemClickListener() {
@Override

public void onItemClick(AdapterView adapterView, View
view, int position, long id) {
Intent
intent
=
new
Intent(MainActivity.this,
DetailProcessActivity.class);
intent.putExtra("result",
dictionaryItemList.get(position));
startActivity(intent);
}
});
setTitle("Sinonim Indonesia-Melayu");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.about:
Intent intent = new Intent(this, AboutActivity.class);
startActivity(intent);
default:
return super.onOptionsItemSelected(item);
}
}
private void initComponent(){
txt_cari = (EditText)findViewById(R.id.txt_cari);
btn_cari = (Button)findViewById(R.id.btn_cari);
lbl_running_time
(TextView)findViewById(R.id.txt_running_time);
lbl_not_found = (TextView)findViewById(R.id.lbl_not_found);

=

btn_cari.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
search();
}
});
txt_cari.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int keyCode, KeyEvent
keyEvent) {
if (keyEvent.getAction() == KeyEvent.ACTION_DOWN){
if (keyCode == KeyEvent.KEYCODE_ENTER){

Universitas Sumatera Utara

search();
return true;
}
}
return false;
}
});
}
private void search(){
if(!TextUtils.isEmpty(txt_cari.getText().toString())){
String text = txt_cari.getText().toString().toLowerCase();
long startTime = System.nanoTime();
// here your code
Word teksUji = new Word(text);
teksUji.setNGramValue(Manber.N);
Manber.countHash(teksUji);
dictionaryItemList = Manber.process(teksUji, dataSource);
long endTime = System.nanoTime();
adapter.setData(dictionaryItemList);
if (dictionaryItemList.size()