Me gustaría comparar dos cadenas de caracteres y obtener algunos puntuación de lo mucho que estas parezcan.
Por ejemplo «La frase es casi similar» y «La sentencia es similar».

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

Hay mejores métodos en Java?

  • ¿Qué significa «similar»? Pronuncia similar? Es visualmente similar?
  • a juzgar por el ejemplo, yo diría que ni visual ni la pronunciación de similitud son la quería medir aquí.
InformationsquelleAutor hsmit | 2010-01-18

5 Comentarios

  1. 20

    La Levensthein distancia es una medida de cuán similares son las cadenas de caracteres. O, más precisamente, cómo muchas de las alteraciones hecho de que son el mismo.

    La algoritmo está disponible en pseudo-código en la Wikipedia. La conversión de que Java no debería ser un gran problema, pero no integrado en la biblioteca de clases base.

    Wikipedia tiene algo más de algoritmos que miden la similitud de cadenas de caracteres.

  2. 53

    Las siguientes bibliotecas de Java ofrecen múltiples comparar algoritmos (Levenshtein,Jaro Winkler,…):

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

    Tanto de las bibliotecas de java en la documentación (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);
    }
  3. 15

    sí eso es una buena medida, podría utilizar StringUtil.getLevenshteinDistance() de apache commons

    • No está disponible en Java Mobile Edition, que es? Pero gracias por tu respuesta!
    • se puede utilizar con MÍ, sólo tiene que añadir el jar.
    • hmmm, no, realmente no estoy tan seguro de que es completamente utilizable con J2ME, que ha sido compilado con una versión de J2SE
    • no uso nada de MÍ, no apoyo. usted puede hacer y copiar en el frasco
  4. 3

    Usted puede encontrar implementaciones de Levenshtein y otros de similitud de cadenas/medidas de distancia 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, el uso de 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"));
      }
    }
  5. 2

    Enchufe descarado, pero me escribió una biblioteca también:

    https://github.com/vickumar1981/stringdistance

    Tiene todas estas funciones, además de un par de similitud fonética (si la palabra «suena como» otra palabra – devuelve verdadero o falso a diferencia de los otros aproximada similitudes que son números entre 0-1).

    También incluye la secuenciación del adn de los algoritmos como el de Smith-Waterman y Needleman-Wunsch, que son generalizadas las versiones de Levenshtein.

    I plan, en el futuro cercano, en la fabricación de este trabajo con una matriz y no sólo cadenas (una matriz de caracteres).

Dejar respuesta

Please enter your comment!
Please enter your name here