拼写检查器为Python(Spell Checker for Python)

2019-07-05 15:19发布

我用Python和NLTK相当新。 我忙着可以执行拼写检查的应用程序(用正确拼写的单词替换拼写错误的单词),目前使用的是Python的2.7,PyEnchant附魔图书馆和图书馆NLTK林。 下面的代码是处理校正/更换类。

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

我写了一个函数,它在单词的列表,并进行高清替换每个单词和返回的单词的列表,但拼写正确。

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']

现在我真的不喜欢这个,因为它是不是很准确,我正在寻找一种方式来实现对单词的拼写检查和更换。 我还需要的东西,可以拿起拼写错误,如“caaaar”? 是否有更好的方法来进行拼写检查,在那里? 如果是这样,他们是什么? 谷歌是如何做到这一点的例子,因为他们的拼写建议者是很好吗? 有什么建议

Answer 1:

我建议通过仔细阅读开始这篇文章由彼得·诺维格 。 (我不得不类似的东西,我发现它是非常有用的。)

下面的函数,特别是有,你现在需要使你的拼写检查更复杂的想法:分割,删除,调换,并插入不规则的话来说就是“正确”他们。

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)

注:以上是一个片段来自弱势族群的拼写校正

而好消息是,你可以逐步增加,不断提高你的拼写检查。

希望帮助。



Answer 2:

您可以使用自动更正的lib拼写检查的蟒蛇。
实例应用:

from autocorrect import spell

print spell('caaaar')
print spell(u'mussage')
print spell(u'survice')
print spell(u'hte')

结果:

caesar
message
service
the


Answer 3:

拼写修正器>

你需要导入到你的桌面语料库如果您存储在其他使用Tkinter的改变我加了几个图形以及代码的路径,这是唯一的解决非字错误!

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()


Answer 4:

拼写在Python检查的最佳方式是通过:SymSpell,BK-树或彼得Novig的方法。

最快的一个是SymSpell。

这是方法一 :参考链接pyspellchecker

这个库是基于彼得·诺维格的实现。

PIP安装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))

方法2: SymSpell的Python

PIP安装-U symspellpy



Answer 5:

从自动更正进口咒语这个u需要安装,喜欢蟒蛇它只所以这是一个限制ü要面子工程的话,不是句子。

从自动更正拼写进口印刷(拼写(“intrerpreter”))输出:解释



Answer 6:

也许为时已晚,但我回答了未来搜索。 执行拼写错误校正,首先需要确保这个词不是荒谬或俚语一样,caaaar,amazzzing等反复字母。 所以,我们首先需要摆脱这些字母的。 正如我们所知道的英语语言的单词通常有一个最大的2个重复字母,例如,你好,所以我们首先从词中删除多余的重复,然后检查他们的拼写。 为了去除多余的字母,您可以在Python中使用正则表达式模块。

一旦做到这一点使用Pyspellchecker库在Python纠正拼写。

为了实现访问此链接: https://rustyonrampage.github.io/text-mining/2017/11/28/spelling-correction-with-python-and-nltk.html



文章来源: Spell Checker for Python