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++){
}
word.getHash().add(hash); }
return word; }
public static ArrayList<Integer> union(ArrayList<Integer> set1, ArrayList<Integer> set2){
ArrayList<Integer> temp = (ArrayList)set1.clone(); for (Integer num : set2) {
if (temp.indexOf(num) == -1){ temp.add(num);
} }
return temp; }
public static ArrayList<Integer> intersection(ArrayList<Integer> set1, ArrayList<Integer> set2)
{
ArrayList<Integer> set = new ArrayList<Integer>(); for (Integer num: set2) {
if (set1.contains(num)){ set.add(num);
} }
return set; }
public static List<ResultItem> process(Word uji, List<DictionaryItem> data){
ArrayList<ResultItem> result = new ArrayList<ResultItem>(); 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; }
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<Integer> hash; public Word(){
this.text = "";
this.hash = new ArrayList<Integer>(); }
public Word(String text){ this.text = text;
this.hash = new ArrayList<Integer>(); }
public void setText(String text) { this.text = text;
}
public String getText() { return text;
}
public void setHash(ArrayList<Integer> hash) { this.hash = hash;
}
public ArrayList<Integer> 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); }
} } }
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 com.agus.sinonimindomelayu.R;
import com.agus.sinonimindomelayu.adapter.DictionaryItem; import com.agus.sinonimindomelayu.adapter.ResultAdapter; import com.agus.sinonimindomelayu.adapter.ResultItem; import com.agus.sinonimindomelayu.algo.Manber;
import com.agus.sinonimindomelayu.algo.Word;
import com.agus.sinonimindomelayu.helper.AssetsHelper; import com.google.gson.Gson;
import 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<ResultItem> dictionaryItemList; private List<DictionaryItem> 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<ResultItem>(); dataSource = new ArrayList<DictionaryItem>();
Type listType = new
TypeToken<ArrayList<DictionaryItem>>(){}.getType();
dataSource = new
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) {
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() <= 0)
lbl_not_found.setVisibility(View.VISIBLE); else
lbl_not_found.setVisibility(View.GONE);
lbl_running_time.setText("Running Time : " + ((float)(endTime - startTime) / 1000000) + " ms");
} } }
4. Program Detail Proses
package com.agus.sinonimindomelayu.activity; import android.os.Bundle;
import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.TextView; import android.widget.Toast;
import com.agus.sinonimindomelayu.R;
import com.agus.sinonimindomelayu.adapter.ResultItem; import com.agus.sinonimindomelayu.algo.Manber;
import java.util.Arrays;
public class DetailProcessActivity extends ParentActivity { private TextView txt_uji_ngram;
private TextView txt_uji_hash; private TextView txt_banding_ngram; private TextView txt_banding_hash; private TextView txt_intersection; private TextView txt_union;
public DetailProcessActivity() {
super(R.layout.activity_detail_process, true); }
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
ResultItem result = (ResultItem)
getIntent().getSerializableExtra("result");
txt_uji_ngram = (TextView)findViewById(R.id.txt_uji_ngram); txt_uji_hash = (TextView)findViewById(R.id.txt_uji_hash);
txt_banding_ngram =
(TextView)findViewById(R.id.txt_banding_ngram);
txt_banding_hash =
(TextView)findViewById(R.id.txt_banding_hash);
txt_intersection =
(TextView)findViewById(R.id.txt_intersection);
txt_union = (TextView)findViewById(R.id.txt_union);
txt_manber_value =
(TextView)findViewById(R.id.txt_manber_value);
txt_uji_ngram.setText(Arrays.toString(result.getDataUji().getNgram())) ;
txt_uji_hash.setText(Arrays.toString(result.getDataUji().getHash().toA rray()));
txt_banding_ngram.setText(Arrays.toString(result.getDataBanding().getN gram()));
txt_banding_hash.setText(Arrays.toString(result.getDataBanding().getHa sh().toArray()));
txt_intersection.setText(Integer.toString(Manber.intersection(result.g etDataUji().getHash(), result.getDataBanding().getHash()).size()));
txt_union.setText(Integer.toString(Manber.union(result.getDataUji().ge tHash(), result.getDataBanding().getHash()).size()));
txt_manber_value.setText(Double.toString(result.getMamberValue())); }
}
5. Program Koneksi
package com.agus.sinonimindomelayu.activity; import android.os.Bundle;
import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar;
import com.agus.sinonimindomelayu.R;
public class ParentActivity extends AppCompatActivity { protected Toolbar toolbar;
protected Boolean enableBackButton; protected int resLayoutId;
protected int resToolbarColor;
public ParentActivity(int resLayoutId){ this.enableBackButton = false; this.resLayoutId = resLayoutId; }
public ParentActivity(int resLayoutId, Boolean enableBackButton){ this.enableBackButton = enableBackButton;
this.resLayoutId = resLayoutId; }
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(this.resLayoutId);
toolbar = (Toolbar) findViewById(R.id.tool_bar); if (toolbar != null){
toolbar.setFitsSystemWindows(true); setSupportActionBar(toolbar);
if (this.enableBackButton) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true); }
} }
@Override
public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub
int id = item.getItemId(); switch (id) {
case android.R.id.home: onBackPressed(); return true; default:
return super.onOptionsItemSelected(item); }
}
@Override
public void setTitle(CharSequence title) { getSupportActionBar().setTitle(title); }
}
6. Program Splash Screen
package com.agus.sinonimindomelayu.activity; import android.content.Intent;
import android.os.Handler;
import com.agus.sinonimindomelayu.R;
public class SplashScreenActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash_screen); new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// This method will be executed once the timer is over // Start your app main activity
Intent i = new Intent(SplashScreenActivity.this, MainActivity.class);
startActivity(i); finish();
} }, 1000); }
}
7. Program Menu About
package com.agus.sinonimindomelayu.activity; import android.support.v7.app.AppCompatActivity; import android.os.Bundle;
import com.agus.sinonimindomelayu.R;
public class AboutActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_about); }
}
8. Program Item Kamus
package com.agus.sinonimindomelayu.adapter; import java.io.Serializable;
public class DictionaryItem implements Serializable{ private String melayu;
private String makna; public DictionaryItem(){ this.melayu = ""; this.makna = ""; }
public DictionaryItem(String melayu, String makna) {
public void setMelayu(String melayu) { this.melayu = melayu;
}
public String getMelayu() { return melayu;
}
public void setMakna(String makna) { this.makna = makna;
}
public String getMakna() { return makna;
} }
9. Program Result Adapter
package com.agus.sinonimindomelayu.adapter; import android.app.Activity;
import android.content.Context; import android.view.LayoutInflater; import android.view.View;
import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; import com.agus.sinonimindomelayu.R; import java.util.List;
public class ResultAdapter extends ArrayAdapter<ResultItem> { private Context context;
private List<ResultItem> resultItems; private int resource;
private View view;
public ResultAdapter(Context context, int resource, List<ResultItem> objects) {
super(context, resource, objects); this.context = context;
this.resultItems = objects; this.resource = resource; }
public void setData(List<ResultItem> data){ resultItems.clear();
resultItems = data;
this.notifyDataSetChanged(); }
@Override
public int getCount() {
return resultItems.size(); }
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater =
ResultItem item = resultItems.get(position);
holder.melayu.setText(item.getTeks().getMelayu()); holder.makna.setText(item.getTeks().getMakna()); return view;
10. Program Result Item
package com.agus.sinonimindomelayu.adapter; import com.agus.sinonimindomelayu.algo.Word; import java.io.Serializable;
public class ResultItem implements Serializable{ private Word dataUji;
private Word dataBanding; private double mamberValue; private DictionaryItem teks; public ResultItem(){
dataUji = new Word(); dataBanding = new Word(); teks = new DictionaryItem(); }
public void setDataUji(Word dataUji) { this.dataUji = dataUji;
}
public Word getDataUji() { return dataUji;
}
public void setDataBanding(Word dataBanding) { this.dataBanding = dataBanding;
}
public Word getDataBanding() { return dataBanding;
}
public void setMamberValue(double mamberValue) { this.mamberValue = mamberValue;
}
public double getMamberValue() { return mamberValue;
}
}
public DictionaryItem getTeks() { return teks;
} }