Vérificateur d'orthographe pour Python
Je suis assez nouveau avec Python et NLTK. Je suis occupé avec une application qui peut effectuer des vérifications orthographiques (remplace le mot mal orthographié par le mot correctement orthographié), J'utilise actuellement la bibliothèque Enchant sur Python-2.7, PyEnchant et la bibliothèque NLTK. Le code ci-dessous est la classe qui gère la correction/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 la def remplacer sur chaque mot et retourne la liste des mots mais correctement orthographié.
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 vraiment cela parce que ce n'est pas très précis et je cherche un moyen de réaliser des vérifications d'orthographe et des remplacements sur les mots. J'ai aussi besoin de quelque chose qui peut ramasser des fautes d'orthographe comme "caaaar"? Sont t-il de meilleures façons d'effectuer des vérifications orthographiques? Si oui, quels sont-ils? Comment Google fait-il par exemple parce que leur évocation orthographique est très bonne? Toutes les suggestions
3 réponses
je recommande de commencer par lire attentivement ce post par Peter Norvig. (J'ai dû faire quelque chose de semblable et je l'ai trouvé extrêmement utile.)
la fonction suivante, en particulier, a les idées dont vous avez maintenant 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 de Norvig du correcteur orthographique
et le la bonne nouvelle est que vous pouvez progressivement ajouter et continuer à améliorer votre correcteur orthographique.
J'espère que ça aidera.
Vous pouvez utiliser le correction automatique lib pour épeler check in 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
correcteur orthographique->
vous devez importer un corpus sur votre bureau si vous stockez ailleurs modifier le chemin d'accès dans le code que j'ai ajouté quelques graphiques en utilisant tkinter, et ce n'est que pour s'attaquer non mot d'erreurs!!
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 __name__ == "__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()