J'ai une liste de textes qui contient des noms de marque (Coca-Cola, Pepsi, 7Up ect.). J'ai écrit un script python qui trie et compte toutes les cellules qui ont le même contenu (le même texte, après minuscules tout le texte) et réordonne la liste par le nombre de chaque texte, de sorte que les textes qui apparaissent le plus seront les premiers, parce que je suppose que la plupart des gens vont écrire le nom de marque correctement. Par exemple, si je la liste suivante:Comparer la chaîne pour correspondre à la marque et supprimer les fautes d'orthographe
texts = ['Coca-Cola', 'Pepsi', 'Coca-Cola', 'Coca-Cola', 'Pepsi', 'Pespi', 'Pepsi', '7Up', '7up', 'Cola', 'Pepsi']
Après la première étape, la liste sera:
ordered_text = [
{'text': 'Pepsi', count: 4},
{'text': 'Coca-Cola', count: 3},
{'text': '7Up', count: 2},
{'text': 'Cola', count: 1},
{'text': 'Pespi', count: 1},
]
Dans la deuxième étape, j'utilise le paquet ngram pour essayer de correspondre plus textes pour corriger les fautes d'orthographe. Note importante: l'une de mes demandes clés est d'avoir une solution agnostique à la langue.
Mon problème est que le NGRAM fonctionne très bien sur les textes longs mais fonctionne mal sur les textes courts. Par exemple lors de l'exécution:
ngram.NGram.compare('Pepsi', 'Pespi')
le résultat sera:
0.2727272727272727
C'est une très faible « score », mais comme vous pouvez voir la chaîne est très proche et il y a seulement 1 lettre est égaré.
Que puis-je faire pour améliorer ma dépose? Ai-je besoin d'utiliser un algorithme différent? Ou peut-être spécifier différents paramètres pour ce test? J'ai pensé à ajouter un dictionnaire qui contient tous les «nouveaux» mots que j'ai trouvés, les ajouter, puis je peux comparer chaque mot par rapport à cela, mais ensuite je perds la granularité du script.
Pour les fautes de frappe, [levenshtein distance] (https://fr.wikipedia.org/wiki/Levenshtein_distance) fonctionnerait-il? – Aufziehvogel
Peut-être "faible = bon"? Quoi qu'il en soit, personnellement, je préfère utiliser la distance de Levenshtein pour vérifier l'orthographe. Par exemple, le LD de "missplaed" vs "mal placé" est '2'. Divisant par la longueur des mots, c'est 2/9, ce qui est "assez proche". – usr2564301
Dans 'NGRAM', vous voulez que le score soit aussi proche de 1, c'est-à-dire que les chaînes sont identiques. En général, pensez-vous qu'il vaudrait mieux lancer l'algorithme NGRAM et s'il n'a pas trouvé de correspondance pour essayer d'exécuter la distance levenshtein ou simplement utiliser la distance levenshtein dans ce cas? –