How to correct text and return the corrected text automatically with PyEnchant

6.1k views Asked by At
import enchant
import wx
from enchant.checker import SpellChecker
from enchant.checker.wxSpellCheckerDialog import wxSpellCheckerDialog
from enchant.checker.CmdLineChecker import CmdLineChecker

a = "Ceci est un text avec beuacuop d'ereurs et pas snychro"
chkr = enchant.checker.SpellChecker("fr_FR")
chkr.set_text(a)
cmdln = CmdLineChecker()
cmdln.set_checker(chkr)
b = cmdln.run()
c = chkr.get_text()  # returns corrected text
print c

How do I get c to return the corrected text without using 0 manually from cmdlinechecker?

The program should run through the string containing the uncorrected text, correct it, and save it in a variable to export into a MySQL DB.

3

There are 3 answers

1
Roy Holzem On BEST ANSWER
a = "Ceci est un text avec beuacuop d'ereurs et pas snychro"
chkr = enchant.checker.SpellChecker("fr_FR")
chkr.set_text(a)
for err in chkr:
    print err.word
    sug = err.suggest()[0]
    err.replace(sug)

c = chkr.get_text()#returns corrected text
print c

Works exactly as I was intending to have it work. Add Filters and corrects all small text automatically enabling you to perform keyword searches etc...

Took me 13hrs to figure out ;(

0
Flu On

Actually I am not familiar with python and the libraries you describe but the general approach to correct text is using a dictionary approach. This means in other words, that you check if a word is included in a French dictionary (or a list of French words) and if it is the case, the word is correct, otherwise use the word from the dictionary.

2
James DiPadua On

For my purposes, the level of automation you provided here was too risky -- the words were going to include proper nouns -- so I built a bit more of a check into the system.

I'm appending the corrections for a file-write later in the process.

Thought this would be helpful for others as the documentation wasn't quite sufficient for me...

for data_field in fields:
    checker.set_text(str(data_field))
    for err in checker:
        print err.word
        print err.suggest()
        correct = raw_input("provide 0-index int of correct word or i to ignore, e to edit ")
        if correct == 'i':
            pass
        elif correct == 'e':
            suggest = raw_input("")
            err.replace(suggest)
        else:
            correct = int(correct)
            suggest = err.suggest()[correct]
            err.replace(suggest)
    corrected_text.append(checker.get_text())