标签: pyenchant

Python的拼写检查器

我是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
Run Code Online (Sandbox Code Playgroud)

我编写了一个函数,它接受单词列表并对每个单词执行def替换并返回单词列表但拼写正确.

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']
Run Code Online (Sandbox Code Playgroud)

现在我不喜欢这个,因为它不是很准确,我正在寻找一种方法来实现单词的拼写检查和替换.我还需要一些可以解决像"caaaar"这样的拼写错误的东西吗?有没有更好的方法来执行拼写检查?如果是这样,他们是什么?谷歌如何做到这一点,因为他们的拼写建议非常好?有什么建议

spell-checking nltk python-2.7 pyenchant

28
推荐指数
4
解决办法
10万
查看次数

PyEnchant:使用个人单词列表拼写检查文本块

因此PyEnchant允许您定义除语言词典之外的正确拼写单词的个人单词列表:

d2 = enchant.DictWithPWL("en_US","mywords.txt")
Run Code Online (Sandbox Code Playgroud)

但是,生成的d2检查器是类Dict,它只能用于检查单个单词,例如:

>>> d.check("Hello")
True
Run Code Online (Sandbox Code Playgroud)

SpellChecker类允许的文本块的拼写检查.但是,我似乎无法找到如何指定个人单词列表Dict.这不是支持的功能吗?我想拼写一个针对en_US的文本块以及我的个人单词列表.有任何想法吗?

python spell-checking pyenchant

11
推荐指数
1
解决办法
4480
查看次数

高效搜索乱码中的单词

我想你可以把它归类为拼字游戏风格的问题,但它起初是因为一位朋友提到了英国电视智力竞赛节目Countdown.在节目中的各种轮次涉及参赛者被提出一组乱七八糟的字母,他们必须提出他们可以用的最长的单词.我朋友提到的那个是"RAEPKWAEN".

在相当短的时间内,我用Python来处理这个问题,使用PyEnchant处理字典查找,但是我注意到它实际上无法很好地扩展.

这是我目前的情况:

#!/usr/bin/python

from itertools import permutations
import enchant
from sys import argv

def find_longest(origin):
    s = enchant.Dict("en_US")
    for i in range(len(origin),0,-1):
        print "Checking against words of length %d" % i
        pool = permutations(origin,i)
        for comb in pool:
            word = ''.join(comb)
            if s.check(word):
                return word
    return ""

if (__name__)== '__main__':
    result = find_longest(argv[1])
    print result
Run Code Online (Sandbox Code Playgroud)

这对他们在节目中使用的9个字母的例子来说很好,9 factorial = 362,880和8 factorial = 40,320.在那个等级上,即使它必须检查所有可能的排列和字长,也不是那么多.

然而,一旦你达到14个字符,那就是87,178,291,200可能的组合,这意味着你很依赖运气,很快找到一个14个字符的单词.

通过上面的示例单词,我的机器大约需要12 1/2秒才能找到"重新唤醒".有了14个字符的乱码,我们可以用23天的规模来讨论所有可能的14个字符排列.

有没有更有效的方法来处理这个?

python pyenchant

9
推荐指数
1
解决办法
3077
查看次数

Python:PyEnchant和64位Python

我在做文字处理.我需要PyEnchant库来验证文本中的特定单词是否是有效的英语单词.但是,它仅适用于32位的Python安装.我需要64位Python来处理大文本文件的内存问题.

有没有办法可以为64位Python安装PyEnchant?如果没有,我可以用什么其他库来完成类似的任务?我查看了NLTK的wordnet但是读到它的功能不如PyEnchant.

python text-processing pyenchant

9
推荐指数
1
解决办法
2694
查看次数

在OSX上使用pip安装pyenchant时"找不到附带的C库"

我输入了pip install pyenchant我的shell,但它引发了两个Traceback错误:

1:

Traceback (most recent call last):
  File "<string>", line 16, in <module>
  File "/private/var/folders/q4/l70hdqjd5db2n2bdj69qrwz40000gq/T/pip_build_prernauppal/pyenchant/setup.py", line 195, in <module>
    import enchant
  File "enchant/__init__.py", line 90, in <module>
    from enchant import _enchant as _e
  File "enchant/_enchant.py", line 133, in <module>
    raise ImportError("enchant C library not found")
ImportError: enchant C library not found
Run Code Online (Sandbox Code Playgroud)

2:

Traceback (most recent call last):

    File "<string>", line 16, in <module>

    File "/private/var/folders/q4/l70hdqjd5db2n2bdj69qrwz40000gq/T/pip_build_prernauppal/pyenchant/setup.py", line 195, in <module>

        import enchant

    File "enchant/__init__.py", line 90, in …
Run Code Online (Sandbox Code Playgroud)

macos pip pyenchant

9
推荐指数
2
解决办法
9977
查看次数

在Windows 64位计算机上安装pyenchant

我想安装PyEnchant进行拼写检查,它需要在我的机器上安装附魔.但我能找到的所有.exe文件都是针对win32系统的.有没有其他方法在Windows 64位机器上安装它?

python windows pyenchant

8
推荐指数
1
解决办法
1万
查看次数

Python中的"大型"拼写检查

令人惊讶的是,我一直无法找到真正做到这一点的人,但肯定有人有.我正在研究一个python项目,目前涉及拼写检查大约16000个单词.不幸的是,这个词数只会增长.现在我从Mongo中拉出单词,遍历它们,然后用pyenchant拼写检查它们.我已经删除了mongo作为潜在的瓶颈,首先抓住我的所有物品.这让我有大约20分钟的时间处理16k字,这显然比我想花的时间长.这给我留下了一些想法/问题:

  1. 显然,我可以利用线程或某种形式的并行性.即使我将其切成4块,我仍然会在大约5分钟内看到最佳性能.

  2. 有没有办法告诉刻录库Enchant在pyenchant下面使用了什么?Enchant的网站似乎暗示它会在拼写检查时使用所有可用的拼写库/词典.如果是这样,那么我可能通过三到四个拼写单词运行每个单词.这可能是我的问题,但我很难证明情况就是这样.即使它是,我的选择真的是卸载其他库?听起来很不幸.

那么,关于如何从中挤出至少更多性能的任何想法?我把它切成并行任务很好,但我仍然希望在我做之前让它的核心部分更快一些.

编辑:对不起,在早晨咖啡之前发帖...如果单词拼写错误,附魔会为我生成一个建议列表.这似乎是我花费大部分时间在这个处理部分的地方.

python spell-checking pyenchant

6
推荐指数
1
解决办法
3621
查看次数

使用Python 2.7在Mac上安装PyEnchant模块很困难

我无法在我的Mac上安装一个名为PyEnchant的Python模块.我使用的是Python 2.7.当我打开并运行pyenchant setup.py文件时,我收到以下错误消息:

Traceback (most recent call last):
File "/Applications/Python 2.7/pyenchant-1.6.5/setup.py", line 195, in <module>
    import enchant

File "/Applications/Python 2.7/pyenchant-1.6.5/enchant/__init__.py", line 90, in <module>
    from enchant import _enchant as _e

File "/Applications/Python 2.7/pyenchant-1.6.5/enchant/_enchant.py", line 133, in <module>
    raise ImportError("enchant C library not found")

ImportError: enchant C library not found
Run Code Online (Sandbox Code Playgroud)

我已经尝试运行pyenchant网站上提供的.dmg文件.安装过程没有任何错误消息,但是一旦完成,我仍然无法将pyenchant导入Python,也无法在Finder中的任何位置找到已安装的软件.

我还尝试使用.egg安装程序,它打开了一个Python窗口,其中黑色大写字母顶部写着字母"PK".我不知道这意味着什么.

您可能会告诉我,我不是一位经验丰富的Python用户,所以对此有任何帮助都非常感谢.

python import installation python-module pyenchant

6
推荐指数
1
解决办法
2910
查看次数

是否可以附魔地传递多个字典?

有什么办法可以在附魔中使用多个字典。我就是这样

import enchant
d = enchant.Dict("en_US")
d.check("materialise")
>> False
Run Code Online (Sandbox Code Playgroud)

但是如果我使用enchant.Dict("en_UK"),我会得到True。组合多个字典的最佳方法是什么,以便True无论返回materialise还是materialize作为输入参数返回?

python python-3.x pyenchant enchant

6
推荐指数
1
解决办法
63
查看次数

Python:打印 pyenchant 字典的所有内容

hunspell我已经使用类型 .dic和文件加载了一本非英语词典.aff。我可以使用以下方法检查字典中的单词

d=enchant.Dict('my_lang')  
d.check('my_word')
Run Code Online (Sandbox Code Playgroud)

.dic文件包含所有基本形式,并且. aff文件包含所有词缀。我需要的是找到输入单词的基本形式。enchant.dict如果我可以打印出所有对象内容或在.dic 文件中取出一个单词并使用所有词缀来制作新单词列表,那么会有帮助。这是可能的还是我必须自己编写词缀规则?如果该check()函数已经做到了这一点,为什么它如此隐藏?

dictionary windows-7 python-2.7 pyenchant

5
推荐指数
0
解决办法
618
查看次数