python 2.7 - ortografico - Corrector ortográfico para Python
corrector ortografico python (2)
Recomiendo comenzar leyendo cuidadosamente esta publicación de Peter Norvig . (Tuve que hacer algo similar y lo encontré extremadamente útil).
La siguiente función, en particular tiene las ideas que ahora necesita para hacer que su corrector ortográfico sea más sofisticado: dividir, eliminar, transponer e insertar palabras irregulares para ''corregirlas''.
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)
Nota: Lo anterior es un fragmento del corrector ortográfico de Norvig
Y la buena noticia es que puedes agregar incrementos y seguir mejorando tu corrector ortográfico.
Espero que ayude.
Soy bastante nuevo con Python y NLTK. Estoy ocupado con una aplicación que puede realizar verificaciones de ortografía (reemplaza la palabra deletreada incorrectamente con la palabra deletreada correctamente), actualmente estoy usando la Biblioteca de encantamiento en Python-2.7, PyEnchant y la biblioteca de NLTK. El siguiente código es la clase que maneja la corrección / reemplazo.
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
He escrito una función que toma una lista de palabras y realiza el reemplazo def en cada palabra y devuelve una lista de las palabras, pero se escribe correctamente.
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'']
Ahora, realmente no me gusta esto porque no es muy preciso y estoy buscando una manera de lograr verificaciones ortográficas y reemplazos en las palabras. También necesito algo que pueda detectar errores ortográficos como "caaaar". ¿Hay mejores formas de realizar verificaciones ortográficas por ahí? ¿Si es así, Que son? ¿Cómo lo hace Google, por ejemplo, porque su sugerencia de ortografía es muy buena? Alguna sugerencia
corrector ortográfico->
necesita importar un corpus en su escritorio si lo almacena en otro lugar, cambie la ruta en el código, también he agregado algunos gráficos usando tkinter y esto es solo para abordar los errores que no son de palabras.
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()