Una forma para obtener el grado de similitud entre dos palabras distintas es calculando la distancia de Levenshtein, que consiste en calcular el número mínimo de operaciones necesarias para transformar una cadena de caracteres en otra. Obtenida esta distancia podemos calcular fácilmente el grado de similitud porcentual (afinidad) entre las dos palabras:
Afinidad = 1 - (D / L)
D: Distancia de Levenshtein.
L: Longitud de la palabra más larga.
Código Java 1: (Levenshtein1.java)
// Calculo del grado de similitud entre dos palabras distintas.
package levenshtein1;
public class Levenshtein1 {
public static void main(String[] args) {
String str1 = "identificar";
String str2 = "identify";
LevenshteinDistance ld = new LevenshteinDistance();
ld.setWords(str1, str2);
// Mostrar resultados
System.out.println("Palabra1: " + str1);
System.out.println("Palabra2: " + str2);
System.out.println("\nDistancia de Levenshtein:\n" + ld.getDistancia());
System.out.println("Afinidad:\n" + ld.getAfinidad() * 100 + " %");
}
}
Código Java 2: (LevenshteinDistance.java)
package levenshtein1;
public class LevenshteinDistance {
private String str1;
private String str2;
private int distancia;
private int[][] matriz;
public void setWords(String str1, String str2) {
this.str1 = str1.toLowerCase();
this.str2 = str2.toLowerCase();
calculoLevenshtein();
}
public int getDistancia() {
return distancia;
}
public float getAfinidad() {
float longitud = str1.length() > str2.length() ? str1.length() : str2.length();
return 1 - (distancia / longitud);
}
private void calculoLevenshtein() {
matriz = new int[str1.length() + 1][str2.length() + 1];
for (int i = 0; i <= str1.length(); i++) {
matriz[i][0] = i;
}
for (int j = 0; j <= str2.length(); j++) {
matriz[0][j] = j;
}
for (int i = 1; i < matriz.length; i++) {
for (int j = 1; j < matriz[i].length; j++) {
if (str1.charAt(i - 1) == str2.charAt(j - 1)) {
matriz[i][j] = matriz[i - 1][j - 1];
} else {
int min = Integer.MAX_VALUE;
if ((matriz[i - 1][j]) + 1 < min) {
min = (matriz[i - 1][j]) + 1;
}
if ((matriz[i][j - 1]) + 1 < min) {
min = (matriz[i][j - 1]) + 1;
}
if ((matriz[i - 1][j - 1]) + 1 < min) {
min = (matriz[i - 1][j - 1]) + 1;
}
matriz[i][j] = min;
}
}
}
distancia = matriz[str1.length()][str2.length()];
}
}
Resultado:
run:
Palabra1: identificar
Palabra2: identify
Distancia de Levenshtein: 4
Afinidad: 63.636364 %
BUILD SUCCESSFUL (total time: 0 seconds)
Una forma sencilla y rápida de aprender JAVA, observando y deduciendo cómo se comporta el lenguaje a través de ejemplos prácticos.
Archivo del blog
-
►
2012
(38)
- ► septiembre (3)
-
►
2020
(12)
- ► septiembre (1)
-
▼
2024
(29)
-
▼
agosto
(17)
- Problema del Viajante de Comercio TSP (V.1). Métod...
- Problema del Viajante de Comercio TSP (V.2). Métod...
- Problema del Viajante de Comercio TSP (V.3). Métod...
- Problema del viajante de Comercio TSP (IV.2). Méto...
- Problema del Viajante de Comercio TSP (V.3.1). Aná...
- Matriz de conectividad circular.
- Problema del viajante de Comercio TSP (VI). Método...
- Problema del viajante de Comercio TSP (VII). Métod...
- Problema del viajante de Comercio TSP (VIII). Méto...
- Problema del viajante de Comercio TSP (IX). Método...
- Problema del viajante de Comercio TSP (X). Método ...
- Problema del viajante de Comercio TSP (XI). Método...
- Problema del viajante de Comercio TSP (XII). Métod...
- Problema del viajante de Comercio TSP (XIII). Méto...
- Problema del viajante de Comercio TSP (XIV). Métod...
- Problema del viajante de Comercio TSP (XV). Método...
- Juegos VII. La Mansión Misteriosa: Un juego de tex...
-
▼
agosto
(17)
martes, 1 de noviembre de 2016
Suscribirse a:
Entradas (Atom)
Con la tecnología de Blogger.