Algorithme de similarité de texte
J'ai deux fichiers de sous-titres.
J'ai besoin d'une fonction qui indique si elles représentent le même texte, ou le texte similaire
Parfois il y a des commentaires comme "Le vent souffle... la musique est" dans un seul fichier.
Mais 80% du contenu sera le même. La fonction doit retourner TRUE (les fichiers représentent le même texte).
Et parfois il y a des fautes d'orthographe comme 1 au lieu de l (un - L ) comme ici:
Elle 1eft les bagages.
Bien sûr, cela signifie que la fonction doit retourner TRUE.
Mes commentaires:
La fonction doit retourner pourcentage de la similitude des textes - d'ACCORD
"tous les gens étaient heureux" et "tous les gens n'étaient pas heureux" - ici, ce serait considéré comme une faute d'orthographe, de sorte que d être considéré comme le même texte. Pour être exact, le pourcentage de la fonction renvoie sera plus faible, mais suffisamment élevée pour dire les phrases sont similaires
Ne prendre en compte si vous souhaitez appliquer Levenshtein sur un fichier entier ou juste une chaîne de recherche - pas sûr au sujet de Levenshtein, mais l'algorithme doit être appliqué à l'ensemble du fichier. Ça va être une très longue chaîne de caractères.
source d'informationauteur EugeneP
Vous devez vous connecter pour publier un commentaire.
Algorithme de Levenshtein: http://en.wikipedia.org/wiki/Levenshtein_distance
Rien d'autre qu'un résultat de zéro signifie que le texte ne sont pas "identiques". "Semblable" est une mesure de la façon dont loin/près de ils sont. Le résultat est un entier.
Pour le problème que vous avez décrit (c'est à dire compering grandes chaînes de caractères), vous pouvez utiliser Similarité Cosinusqui renvoie un nombre entre 0 (complètement différente) à 1 (identique), sur la base de la la fréquence des termes vecteurs.
Vous voudrez peut-être regarder à plusieurs implémentations qui sont décrits ici: Similarité Cosinus
Vous attendez trop ici, on dirait que vous devez écrire une fonction de vos besoins spécifiques. Je recommande de commencer avec une application de comparaison de fichiers (peut-être diff a déjà tout ce dont vous avez besoin) et de l'améliorer afin de donner de bons résultats pour votre entrée.
Ont un coup d'oeil à approximative grep. Il peut vous donner des pointeurs, mais il est presque certain de faire lamentablement sur de gros morceaux de texte que vous êtes en train de parler.
EDIT: La version originale de agrep n'est pas open source, donc vous pouvez obtenir des liens vers OSS versions de http://en.wikipedia.org/wiki/Agrep
Il y a beaucoup de solutions de rechange à la distance de Levenshtein. Par exemple, le Jaro-Winkler distance.
Le choix d'un tel algorithme est en fonction de la langue, le type de mots, ce sont les mots saisis par l'homme et beaucoup plus...
Ici vous trouverez une utile mise en œuvre de plusieurs algorithmes dans une bibliothèque