当前位置: 首页 > 知识库问答 >
问题:

Python拼写检查器

罗鸿福
2023-03-14

我对Python和NLTK相当陌生。我正忙于一个可以执行拼写检查的应用程序(用正确的单词替换拼写错误的单词)。我目前正在使用Python 2.7上的附魔库、PyEnchant和NLTK库。下面的代码是一个处理更正/替换的类。

from nltk.metrics import edit_distance

class SpellingReplacer:
    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

我编写了一个函数,它接收单词列表,对每个单词执行replace(),然后返回这些单词的列表,但拼写正确。

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”?有没有更好的方法来执行拼写检查?如果有,它们是什么?谷歌是如何做到的?因为他们的拼写建议器非常好。

有什么建议吗?

共有3个答案

锺离声
2023-03-14

python中检查拼写的最佳方法是:SymSpell、Bk Tree或Peter Novig的方法。

最快的是SymSpell。

这是方法1:引用链接pyspellchecker

该库基于Peter Norvig的实现。

pip安装pyspellCheck ker

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:符号拼写Python

pip安装-U符号

钦永贞
2023-03-14

我建议从仔细阅读彼得·诺维格的这篇文章开始。(我不得不做类似的事情,我发现它非常有用。)

下面的函数,特别是你现在需要使你的拼写检查更复杂的想法:拆分,删除,转置,插入不规则的单词来“纠正”它们。

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)

注:以上是诺维格拼写矫正器的一个片段

好消息是,您可以逐步添加并不断改进拼写检查器。

希望这有帮助。

喻子航
2023-03-14

可以使用自动更正库在python中进行拼写检查<示例用法:

from autocorrect import Speller

spell = Speller(lang='en')

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

结果:

caesar
message
service
the
 类似资料:
  • 自 Electron 8 以来已内置支持 Chromium 拼写检查器。 On Windows and Linux this is powered by Hunspell dictionaries, and on macOS it makes use of the native spellchecker APIs. How to enable the spellchecker? 对于 Electr

  • 概述 Sublime Text 使用Hunspell来进行拼写检查,可以从OpenOffice.org Extension List获取额外的字典。 Sublime Text 可用字典:https://github.com/SublimeText/Dictionaries 字典 Sublime Text 目前只支持 UTF-8 编码格式的字典,大多数字典并没有使用 UTF-8 字典,而是使用了和其

  • 问题内容: 我需要一个良好的Java拼写检查器库,该库可以实时对JTextArea(或任何JTextComponent)进行拼写检查。也就是说,在用户键入时,它应该在文本下方显示一个波浪形的红色下划线。 它需要能够通过左键单击(是,左键单击)列出所有可用的单词替换。如果不可能,请单击鼠标右键。 它需要具有“全部忽略”,但没有“添加”,“忽略”或其他任何一个。只是无视一切。 理想情况下,至少在某种程

  • 本文向大家介绍什么是拼写检查?相关面试题,主要包含被问及什么是拼写检查?时的应答技巧和注意事项,需要的朋友参考一下 浏览器中输入区欧盟,输入错误,会被拼写检查为去欧盟,实际上原理是采用了贝叶斯原理,由贝叶斯公式可知P(c|w),w表示拼写错误的情况,而c表示实际想要拼写的单词,等于P(w|c)P(c)/P(w),也就是在若干备选中选择最大的P(c|w),而P(w)都是相同的,即找到使得P(w|c)

  • 我需要帮助设置lucene拼写检查器的字符集(3.6版的核心lucene和拼写检查器)。我的字典(“D:\dictionary.txt”)既有英语单词,也有俄语单词。我的代码与英文文本配合得很好。例如,它返回单词“hello”的正确拼写。但它不适用于俄语。例如,当我拼错一些俄语单词时,编译器引发异常(线程“main”java.lang.ArrayIndexOutOfBoundsException中

  • 问题内容: 我正在寻找一种简单的方法来检查某个字符串是否是正确拼写的英语单词。例如,“ looked”将返回True,而“ hurrr”将返回False。我不需要拼写建议或任何拼写纠正功能。只是一个简单的函数,它需要一个字符串并返回一个布尔值。 问题答案: 两种可能的方法: 有自己的文件,其中包含所有有效的单词。将文件加载到集合中并比较每个单词以查看它是否存在(集合中的单词) (更好的方法)使用P