Floue Comparaison De Chaînes De Caractères
Ce que je cherche à compléter est un programme qui lit dans un fichier et de comparer chaque phrase selon la phrase d'origine. La phrase qui est un match parfait à l'origine recevrez un score de 1 et une phrase qui est tout l'opposé recevrez un 0. Tous les autres floue phrases recevra une note entre 1 et 0.
Je ne suis pas certain de l'opération pour laquelle l'utiliser pour me permettre de terminer dans Python 3.
J'ai inclus dans l'échantillon de texte dans laquelle le Texte 1 est l'original et l'autre précédent chaînes sont les comparaisons.
Texte: Exemple De
Texte 1: Il était une nuit sombre et orageuse. J'étais tout seul, assis sur une chaise rouge. Je n'étais pas complètement seul que j'ai eu trois chats.
Texte 20: C'était un trouble et nuit d'orage. J'étais tout seul, assis sur un crimson président. Je n'étais pas complètement seul que j'ai eu trois félins
//Devrait score haut point, mais pas 1
Texte 21: C'était un trouble et agitée la nuit. J'étais tout seul, assis sur un crimson cathedra. Je n'étais pas complètement seul que j'ai eu trois félins
//Devrait score inférieur à celui du texte le 20
Texte 22: j'étais tout seul, assis sur un crimson cathedra. Je n'étais pas complètement seul que j'ai eu trois félins. C'était un trouble et agitée la nuit.
//Devrait score inférieur à celui du texte 21 mais PAS 0
Texte 24: C'était une nuit sombre et orageuse. Je n'étais pas seule. Je n'étais pas assis sur une chaise rouge. J'ai eu trois chats.
//Devrait score de 0!
- Semble que vous voulez calculer le Levenshtein (ou distance d'édition métrique). Maintenant, si vous le maximum de distance, vous avez juste à l'échelle des scores pour la gamme
[0,1]
. - Merci pour votre aide @Felix Kling la difflib peut-être la voie à suivre.
- Trop mauvais, il a été supprimé....
- Pourquoi devrait-chaîne 1 et 24 de zéro? Ils ont exactement la même première phrase. La 2e phrase 1 est presque la même que la phrase 2+3 dans les 24 (seule différence, c'est "non", et une "je n'étais pas").. Numériquement, ils sont TRÈS similaires. Sémantiquement ils sont différents, mais si vous demandez à un ordinateur à comprendre la signification d'une phrase, alors vous demandez peut-être trop.
Vous devez vous connecter pour publier un commentaire.
Il y a un paquet appelé
fuzzywuzzy
. Installer via pip:Simple d'utilisation:
Le paquet est construit sur le haut de
difflib
. Pourquoi ne pas l'utiliser, demandez-vous? En plus d'être un peu plus simple, il a un certain nombre de différentes méthodes d'appariement (comme jeton afin d'insensibilité partielle correspondance de chaîne) qui le rendent plus puissant dans la pratique. Leprocess.extract
fonctions sont particulièrement utiles: trouver la meilleure correspondance entre les chaînes et les ratios à partir d'un ensemble. De leur readme:Il y a un module dans la bibliothèque standard (appelé
difflib
) qui permet de comparer des chaînes et retourner un score en fonction de leur similarité. LeSequenceMatcher
classe devrait faire ce que vous êtes après.EDIT: Petit exemple de python invite:
HTH!
ab
à l'opposé dezy
? Ou estab
à l'opposé deba
? etc.fuzzyset
est beaucoup plus rapide quefuzzywuzzy
(difflib
) à des fins d'indexation et de recherche.Avertissement: attention de ne pas mélanger les
unicode
etbytes
dans votre fuzzyset.fs.get(query)[0][-1]
La tâche est appelée Paraphrase D'Identification qui est un domaine actif de la recherche en Traitement du Langage Naturel. J'ai associé à plusieurs de l'état de l'art des papiers dont beaucoup vous pouvez trouver le code source sur GitHub pour.
Noter que tous les participants ont répondu à la question supposer qu'il n'y est une chaîne de caractères/de la surface de la similitude entre les deux phrases, alors qu'en réalité deux phrases avec peu de similarité de chaînes peuvent être sémantiquement similaires.
Si vous êtes intéressé par ce genre de similitude, vous pouvez utiliser Skip-Pensées.
Installer le logiciel selon le GitHub de guides et d'aller à paraphraser la détection de la section dans le fichier readme:
Ce convertit vos phrases (X_sentences) de vecteurs. Plus tard, vous pouvez trouver la similitude de deux vecteurs par:
où nous sommes en supposant que le vecteur[0] et le vecteurUn sont le vecteur correspondant à X_sentences[0], X_sentencesUn qui vous vouliez trouver leurs scores.
Il existe d'autres modèles de convertir une peine d'un vecteur où vous pouvez trouver ici.
Une fois que vous convertissez vos phrases à vecteurs de la similitude est juste une question de trouver la similarité Cosinus entre les vecteurs.