una parte manejo extraer diferente declarar comparar caracteres caracter cadenas cadena buscar java string comparison levenshtein-distance string-metric

manejo - extraer una parte de una cadena en java



¿Cómo comparar cadenas similares en Java?(Medida de distancia de cadena) (5)

Me gustaría comparar dos cadenas y obtener una puntuación de cuánto se parecen. Por ejemplo, "La oración es casi similar" y "La oración es similar" .

No estoy familiarizado con los métodos existentes en Java, pero para PHP conozco la función levenshtein .

¿Hay mejores métodos en Java?



La distancia Levensthein es una medida de cómo son cadenas similares. O, más precisamente, cuántas modificaciones se deben hacer para que sean iguales.

El algorithm está disponible en pseudo-código en Wikipedia. Convertir eso a Java no debería ser un gran problema, pero no está integrado en la biblioteca de la clase base.

Wikipedia tiene algunos algoritmos más que miden la similitud de las cadenas.


Las siguientes bibliotecas de Java ofrecen múltiples algoritmos de comparación (Levenshtein, Jaro Winkler, ...):

  1. Apache Commons Lang 3 : https://commons.apache.org/proper/commons-lang/
  2. Simmetrics : http://sourceforge.net/projects/simmetrics/

Ambas bibliotecas tienen una documentación de Java ( Apache Commons Lang Javadoc , Simmetrics Javadoc ).

//Usage of Apache Commons Lang 3 import org.apache.commons.lang3.StringUtils; public double compareStrings(String stringA, String stringB) { return StringUtils.getJaroWinklerDistance(stringA, stringB); } //Usage of Simmetrics import uk.ac.shef.wit.simmetrics.similaritymetrics.JaroWinkler public double compareStrings(String stringA, String stringB) { JaroWinkler algorithm = new JaroWinkler(); return algorithm.getSimilarity(stringA, stringB); }


Puede encontrar implementaciones de Levenshtein y otras medidas de similitud / distancia de cadenas en https://github.com/tdebatty/java-string-similarity

Si su proyecto utiliza maven, la instalación es tan simple como

<dependency> <groupId>info.debatty</groupId> <artifactId>java-string-similarity</artifactId> <version>RELEASE</version> </dependency>

Entonces, para usar Levenshtein por ejemplo

import info.debatty.java.stringsimilarity.*; public class MyApp { public static void main (String[] args) { Levenshtein l = new Levenshtein(); System.out.println(l.distance("My string", "My $tring")); System.out.println(l.distance("My string", "My $tring")); System.out.println(l.distance("My string", "My $tring")); } }