Comment comparer presque similaire Chaînes de caractères en Java? (Chaîne de mesure de distance)
Je voudrais comparer deux chaînes de caractères et obtenir une note de combien ces ressemblent.
Par exemple "La phrase est presque similaire" et "La phrase est semblable".
Je ne suis pas familier avec les méthodes existantes en Java, mais pour le PHP je sais que le levenshtein fonction.
Sont là les meilleures méthodes en Java?
- Qu'entendez-vous par "similaires"? Prononcé similaire? Est visuellement similaire?
- à en juger par l'exemple, je dirais que ni visuelle, ni la prononciation de similarité sont le voulait mesurer ici.
Vous devez vous connecter pour publier un commentaire.
La Levensthein distance est une mesure de la similarité des chaînes sont. Ou, plus précisément, de la façon dont beaucoup de modifications doivent être apportées qu'ils sont les mêmes.
La algorithme est disponible en pseudo-code sur Wikipédia. De conversion que pour Java ne devrait pas être un problème, mais il n'est pas intégré dans la bibliothèque de classes de base.
Wikipédia a quelques algorithmes qui mesurent la similarité de chaînes.
La suite de bibliothèques Java offrent de multiples comparer des algorithmes (Levenshtein,Jaro-Winkler,...):
Les deux bibliothèques ont une documentation de java (Apache Commons Lang Javadoc,Simmetrics Javadoc).
ouais c'est une bonne mesure, vous pouvez utiliser StringUtil.getLevenshteinDistance() de apache commons
Vous pouvez trouver des implémentations de Levenshtein et d'autres chaîne de similarité/distance de mesures sur
https://github.com/tdebatty/java-string-similarity
Si votre projet utilise maven, l'installation est aussi simple que
Ensuite, pour utiliser Levenshtein, par exemple
Plug sans vergogne, mais j'ai écrit une bibliothèque aussi:
https://github.com/vickumar1981/stringdistance
Il a toutes ces fonctions, plus un peu pour la similitude phonétique (si un seul mot "sonne comme" un autre mot - renvoie vrai ou faux contrairement aux autres floue similitudes qui sont des nombres compris entre 0 et 1).
Comprend également le séquençage de l'adn des algorithmes de Smith-Waterman et Needleman-Wunsch, qui sont généralisées versions de Levenshtein.
J'ai l'intention, dans un avenir proche, pour faire de ce travail avec n'importe quel ensemble et pas seulement des chaînes de caractères (un tableau de caractères).