2016-11-04 21 views
0

PyEnchant似乎对某些字母/数字组合怪异的行为:错误PyEnchant当某些字母/数字用来

>>> import enchant 
>>> d=enchant.Dict("en_US") 
>>> d.add("def") 
>>> d.add("abc") 
>>> d.suggest("P92") 

** (python.exe:15036): CRITICAL **: enchant_is_all_caps: assertion `word && *word' failed 
['ᾈ\t_us', 'Def', 'Abc'] 

并不是每一个字母/数字组合产生这个问题。更多示例如下:

>>> d.suggest("A92") 
['Abc'] 
>>> d.suggest("92P") 

** (python.exe:15036): CRITICAL **: enchant_is_all_caps: assertion `word && *word' failed 

** (python.exe:15036): CRITICAL **: enchant_is_title_case: assertion `word && *word' failed 

** (python.exe:15036): CRITICAL **: enchant_is_all_caps: assertion `word && *word' failed 
['', 'DEF', 'ABC'] 

A92产生了一些东西,92P给出了3个关键响应。

在PyEnchant中,关键错误(是他们的错误?)打印到屏幕上,但似乎没有一种机制可以捕获这些错误。我尝试try/except

有没有办法测试何时显示“关键”消息并通过不要求拼写建议来消除该消息?

回答

1

http://pythonhosted.org/pyenchant/api/enchant.html

加(字)

Add a word to the associated personal word list. 

所以我的理解是,你需要一个个人词汇表(PWL)。

Pyenchant是一款用于附魔C库的基于ctypes的包装。我的理解是ctypes缓存对象以供重用。于是开始一个新的终端,或者如果在Windows上任何需要清除的任何东西ctypes的缓存(也许如果有疑问,重新启动Windows?):

然后用个人词汇表是这样的:

import enchant 
d = enchant.DictWithPWL("en_US","mywords.txt") 
d.add("def") 
d.add("abc") 
print d.suggest("P92") 
print d.suggest("92P") 
print d.suggest("Helo") 

输出:

['Abc', 'Def'] 
['ABC', 'DEF'] 
['He lo', 'He-lo', 'Hole', 'Help', 'Helot', 'Hello', 'Halo', 'Hero', 'Hell', 'Held', 'Helm', 'Heel', 'Loathe', 'Def'] 

如果你发现mywords.txt空行(你还没有清理下来的ctypes正确缓存),然后删除内容关闭终端或任何你需要做寡妇,然后再试一次。

如果你想使用一个PWL在内存中删除或截断(绝对删除任何空行之前创建)的默认PWL文件(〜/的.config /附魔/ en_US.dic在Linux上)和使用:

d=enchant.DictWithPWL("en_US", None) 

我强烈怀疑你正在看到的错误信息是由底层的C库(附魔)直接引发的,因此我不知道如何捕获它们或阻止它们被显示。但是如果你使用DictWithPWL(),他们永远不会被抛在第一位。

+0

谢谢 - 我没有使用DictWithPWL尝试相同的代码。现在,我根本不允许任何三字符的数字和字母组合,所以我没有遇到这个问题。我也怀疑底层的C库会抛出错误信息,所以我很高兴听到你也说了这个。 –

相关问题