Je suis assez nouveau avec Python et NLTK. Je suis occupé par une application capable de vérifier l'orthographe (remplace le mot correctement orthographié par le mot correctement orthographié), J'utilise actuellement la bibliothèque d'enchantement sur Python-2.7, PyEnchant et la bibliothèque NLTK. Le code ci-dessous est la classe qui gère la correction/le remplacement.
from nltk.metrics import edit_distance
class SpellingReplacer(object):
def __init__(self, dict_name = 'en_GB', max_dist = 2):
self.spell_dict = enchant.Dict(dict_name)
self.max_dist = 2
def replace(self, Word):
if self.spell_dict.check(Word):
return Word
suggestions = self.spell_dict.suggest(Word)
if suggestions and edit_distance(Word, suggestions[0]) <= self.max_dist:
return suggestions[0]
else:
return Word
J'ai écrit une fonction qui prend une liste de mots et effectue le remplacement définitif de chaque mot et renvoie une liste des mots mais orthographiés correctement.
def spell_check(Word_list):
checked_list = []
for item in Word_list:
replacer = SpellingReplacer()
r = replacer.replace(item)
checked_list.append(r)
return checked_list
>>> Word_list = ['car', 'colour']
>>> spell_check(words)
['car', 'color']
Maintenant, je n'aime pas trop cela, car ce n'est pas très précis et je cherche un moyen de vérifier l'orthographe et de remplacer les mots. J'ai aussi besoin de quelque chose qui puisse ramasser des fautes d'orthographe comme "caaaar"? Existe-t-il de meilleures méthodes pour effectuer des vérifications orthographiques? Si c'est vrai, que sont-ils? Comment Google le fait-il, par exemple, parce que son orthographe est très bon? Toutes les suggestions
Je recommande de commencer par lire attentivement ce post de Peter Norvig . (J'ai dû faire quelque chose de similaire et je l'ai trouvé extrêmement utile.)
La fonction suivante contient notamment les idées dont vous avez besoin pour rendre votre correcteur orthographique plus sophistiqué: fractionner, supprimer, transposer et insérer les mots irréguliers pour les "corriger".
def edits1(Word):
splits = [(Word[:i], Word[i:]) for i in range(len(Word) + 1)]
deletes = [a + b[1:] for a, b in splits if b]
transposes = [a + b[1] + b[0] + b[2:] for a, b in splits if len(b)>1]
replaces = [a + c + b[1:] for a, b in splits for c in alphabet if b]
inserts = [a + c + b for a, b in splits for c in alphabet]
return set(deletes + transposes + replaces + inserts)
Remarque: Ce qui précède est un extrait du correcteur orthographique de Norvig.
Et la bonne nouvelle est que vous pouvez ajouter et améliorer sans cesse votre correcteur orthographique.
J'espère que cela pourra aider.
Vous pouvez utiliser le autocorrect lib pour vérifier l'orthographe en python.
Exemple d'utilisation:
from autocorrect import spell
print spell('caaaar')
print spell(u'mussage')
print spell(u'survice')
print spell(u'hte')
Résultat:
caesar
message
service
the
vous devez importer un corpus sur votre bureau si vous stockez ailleurs, modifiez le chemin dans le code. J'ai également ajouté quelques graphismes à l'aide de tkinter et ceci ne sert qu'à corriger les erreurs autres que Word!
def min_edit_dist(Word1,Word2):
len_1=len(Word1)
len_2=len(Word2)
x = [[0]*(len_2+1) for _ in range(len_1+1)]#the matrix whose last element ->edit distance
for i in range(0,len_1+1):
#initialization of base case values
x[i][0]=i
for j in range(0,len_2+1):
x[0][j]=j
for i in range (1,len_1+1):
for j in range(1,len_2+1):
if Word1[i-1]==Word2[j-1]:
x[i][j] = x[i-1][j-1]
else :
x[i][j]= min(x[i][j-1],x[i-1][j],x[i-1][j-1])+1
return x[i][j]
from Tkinter import *
def retrieve_text():
global Word1
Word1=(app_entry.get())
path="C:\Documents and Settings\Owner\Desktop\Dictionary.txt"
ffile=open(path,'r')
lines=ffile.readlines()
distance_list=[]
print "Suggestions coming right up count till 10"
for i in range(0,58109):
dist=min_edit_dist(Word1,lines[i])
distance_list.append(dist)
for j in range(0,58109):
if distance_list[j]<=2:
print lines[j]
print" "
ffile.close()
if __== "__main__":
app_win = Tk()
app_win.title("spell")
app_label = Label(app_win, text="Enter the incorrect Word")
app_label.pack()
app_entry = Entry(app_win)
app_entry.pack()
app_button = Button(app_win, text="Get Suggestions", command=retrieve_text)
app_button.pack()
# Initialize GUI loop
app_win.mainloop()
à partir de la correction automatique des importations Pour ce faire, vous devez installer, préférez anaconda et cela ne fonctionne que pour les mots, pas les phrases, c’est une limitation que vous allez devoir affronter.
de correction automatique orthographique print (orthographe ('intrerpreter')) output: interpreter
Le meilleur moyen de vérifier l'orthographe en python est d'utiliser la méthode SymSpell, Bk-Tree ou Peter Novig.
Le plus rapide est SymSpell.
Ceci est Method1: Lien de référence pyspellchecker
Cette bibliothèque est basée sur l'implémentation de Peter Norvig.
pip install pyspellchecker
from spellchecker import SpellChecker
spell = SpellChecker()
# find those words that may be misspelled
misspelled = spell.unknown(['something', 'is', 'hapenning', 'here'])
for Word in misspelled:
# Get the one `most likely` answer
print(spell.correction(Word))
# Get a list of `likely` options
print(spell.candidates(Word))
Méthode 2:SymSpell Python
pip install -U symspellpy