is2.lemmatizer.StringEdit Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of anna Show documentation
Show all versions of anna Show documentation
Tools for Natural Language Analysis, Generation and Machine Learning
The newest version!
package is2.lemmatizer;
import is2.util.DB;
import java.util.ArrayList;
public class StringEdit {
public static void main(String args[]) {
String s = new StringBuffer(args[0]).reverse().toString();
String t = new StringBuffer(args[1]).reverse().toString();
int d[][] = LD(s, t);
StringBuffer opersations = new StringBuffer();
searchPath(s,t,d, opersations, false);
System.out.println("resuylt "+" "+opersations);
}
//****************************
// Get minimum of three values
//****************************
static private int Minimum (int a, int b, int c) {
int mi;
mi = a;
if (b < mi) mi = b;
if (c < mi) mi = c;
return mi;
}
//*****************************
// Compute Levenshtein distance
//*****************************
static public int[][] LD (String s, String t) {
int n = s.length ();
int m = t.length ();; // length of t
// char s_i; // ith character of s
// char t_j; // jth character of t
int cost; // cost
// Step 1
int[][] d = new int[n+1][m+1];
if (n == 0) return d;
if (m == 0) return d;
// Step 2
for (int i = 0; i <= n; i++) d[i][0] = i;
for (int j = 0; j <= m; j++) d[0][j] = j;
// Step 3
for (int i = 1; i <= n; i++) {
int s_i = s.charAt (i - 1);
// Step 4
for (int j = 1; j <= m; j++) {
// t_j = t.charAt (j - 1);
// Step 5
if (s_i == t.charAt (j - 1)) cost = 0;
else cost = 1;
// Step 6
d[i][j] = Minimum (d[i-1][j]+1, d[i][j-1]+1, d[i-1][j-1] + cost);
}
}
// Step 7
return d;
}
static String searchPath(String s, String t, int[][] d, StringBuffer operations, boolean debug) {
StringBuffer result = new StringBuffer(s);
int n = d.length;
int m = d[0].length;
int x=n-1;
int y=m-1;
boolean changed =false;
while(true) {
if (debug && changed )System.out.println("result "+new StringBuffer(result) .reverse());
if (d[x][y]==0)break;
if (y>0&&x>0&& d[x-1][y-1]0&& d[x][y-1]0&& d[x-1][y]0&& y>0 && d[x-1][y-1]==d[x][y]) {
x--; y--;
continue ;
}
if (x>0&& d[x-1][y]==d[x][y]) {
x--;
continue;
}
if (y>0 && d[x][y-1]==d[x][y]) {
y--;
continue;
}
}
if (debug) return result.reverse().toString();
else return null;
}
public static String change(String s, String operations) {
StringBuffer result = new StringBuffer(s).reverse();
int pc =0;
while(true) {
if (operations.length()<=pc) break;
char nextOperation = operations.charAt(pc);
pc++;
if (nextOperation == 'R') {
//pc++;
int xm1 = (char)operations.charAt(pc);
pc++;
char replace = operations.charAt(pc);
pc++;
char with = operations.charAt(pc);
//operations.append('R').append((char)x-1).append(s.charAt(x-1)).append(t.charAt(y-1));
// System.out.println(""+result+" xm1 "+xm1+" op "+operations);
if (result.length()<=xm1) return s;
if (result.charAt(xm1)==replace) result.setCharAt(xm1, with);
//if (debug) result.setCharAt(x-1, t.charAt(y-1));
pc++;
}else if (nextOperation == 'I') {
// if (debug) System.out.println("min d[x][y-1] "+d[x][y-1]+" d[x][y] "+d[x][y]+" ins "+t.charAt(y-1)+" at "+(x));
//operations.append('I').append((char)x).append(t.charAt(y-1));
//if (debug)result.insert(x, t.charAt(y-1));
//y--;
//changed =true;
//pc++;
int x = operations.charAt(pc);
pc++;
char in = operations.charAt(pc);
if (result.length() opers, int position) {
for(String s : opers) {
int p = (int)s.charAt(1);
if (p==position) {
return s;
}
}
return "0";
}
/**
* @param form
* @param string
* @param c
* @return
*/
public static String changeSimple(String form, String operation, int c) {
if (operation.equals("0")) return form;
if (operation.charAt(0)=='I') {
StringBuffer f = new StringBuffer(form);
if (f.length()<=c) {
// DB.println("fail insert ");
return form;
}
f.insert(c+1, operation.charAt(1));
return f.toString();
}
if (operation.charAt(0)=='R') {
StringBuffer f = new StringBuffer(form);
// if (f.length()<=c) f.append(' ');
if (f.length()<=c) {
// DB.println("fail replace ");
return form;
}
f.setCharAt(c, operation.charAt(2));
return f.toString();
}
if (operation.charAt(0)=='D') {
StringBuffer f = new StringBuffer(form);
f.delete(c, c+1);//.append(' ');
return f.toString();
}
return form;
}
/**
* @param string
* @return
*/
public static String simple(String o) {
StringBuffer s = new StringBuffer(o);
s.delete(1, 2);
return s.toString();
}
}