Jumat, 23 Desember 2016

Implementasi Leveninstein JAVA


package lp2maray.com;

public class Leveninstein {

    public static int distance(String a, String b){
        a = a.toLowerCase();
        b = b.toLowerCase();
        int[] costs = new int[b.length() + 1];
        for (int j = 0; j < costs.length; j++)
            costs[j] = j;

        for (int i = 1; i <= a.length(); i++) {
            costs[0] = i;
            int nw = i - 1;
            for (int j = 1; j <= b.length(); j++){
                int cj = Math.min(1 + Math.min(costs[j], costs[j - 1]),a.charAt(i - 1) == b.charAt(j - 1) ? nw : nw + 1);
                nw = costs[j];
                costs[j] = cj;
            }
        }
        return costs[b.length()];
    }

}


==========

btnCari.setOnClickListener(new OnClickListener(){
public void onClick(View v){textlength = edCari.getText().length();

  for (int i = 0; i < jd; i++) {
        Element e = (Element) nl.item(i);
        String l_nama=parser.getValue(e, KEY_nama);
        String l_deskripsi=parser.getValue(e, KEY_deskripsi);
        gabs=gabs+l_nama.toLowerCase()+" ";
    }


text_sort.clear();
image_sort.clear();
String scari=edCari.getText().toString().toLowerCase();
//++++++++++++++++++++++++++++++++++

    Leveninstein x=new Leveninstein();
    String[]ar=new String[1000];
    int r=0;
    String text=gabs;//.toLowerCase();//gab=kalimat halo apa kabar all
    String keyword=scari;
    String[] data = text.split(" ");
    List<Integer> dist = new ArrayList<Integer>();
    for (int i = 0; i < data.length; i++){
        dist.add(x.distance(data[i], keyword));
        Log.v("COMP",i+":"+keyword+"="+x.distance(data[i],keyword));
    }
    Collections.sort(dist);

    for (int i = 0; i < data.length; i++){
        if (x.distance(data[i], keyword) == dist.get(0)){
            if(text.indexOf(data[i])>=0){
                ar[r]=data[i].toLowerCase();
                Log.v("MAYBE", data[i] + " >> " + x.distance(data[i], keyword));

                r++;
            }
        }
    }//for


    arrNama2=new String[1000];
    arrDes2=new String[1000];
    arrGbr2=new int[1000];

    text_sort.clear();
    image_sort.clear();
    int ada=0;
    for (int i = 0; i < arrNama.length; i++) {
        String me = arrNama[i].toLowerCase();
        for (int j = 0; j < r; j++) {
            if (me.indexOf(ar[j]) >= 0 || me.indexOf(scari)>=0) {
                arrNama2[ada]=arrNama[i];
                arrDes2[ada]=arrDes[i];
                arrGbr2[ada]=arrGbr[i];
                Log.v("BC",arrNama2[ada]);
                ada++;
                break;
            }
        }
    }
    Log.v("III","=="+ada);
    arrNama3=new String[ada];
    arrDes3=new String[ada];
    arrGbr3=new int[ada];

    for (int i = 0; i < ada; i++){
arrNama3[i]=arrNama2[i];
        Log.v("CC",arrNama3[i]);
arrDes3[i]=arrDes2[i];
arrGbr3[i]=arrGbr2[i];
}

listview.setAdapter(new MyCustomAdapter(arrNama3, arrGbr3));
listview.setOnItemClickListener(new OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> a, View v, int p, long id) {
               Intent i = new Intent(pencarian.this, detail.class);
               i.putExtra("istilah", arrNama3[p]);
               i.putExtra("deskripsi", arrDes3[p]);
               startActivity(i);
               Toast.makeText(pencarian.this,arrNama3[p]+ " ....", Toast.LENGTH_LONG).show();
        }
       });
}});


Tidak ada komentar:

Posting Komentar