web-dev-qa-db-fra.com

Correcteur orthographique pour Python

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 

26
Mike Barnes

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.

26
Ram Narasimhan

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
21
Rakesh

correcteur orthographique->

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()
1
ishaan arora

à 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

0
Saurabh Tripathi

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

0
shaurya uppal