使用某些字母/数字时PyEnchant出错

时间:2016-11-04 02:11:39

标签: python pyenchant

PyEnchant似乎对某些字母/数字组合有奇怪的行为:

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

并非每个字母/数字组合都会产生此问题。更多的例子是:

try/except

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

在PyEnchant中,关键错误(它们是错误吗?)打印到屏幕上,但似乎没有一种机制来捕获它。我没有成功尝试 function myFunction(e) { var genderSheet1 = e.values[19]; var genderSheet2 = SpreadsheetApp.openById("To Populate"); if (genderSheet1===genderSheet2) { var userName = e.values[1]; var userEmail = "email"; var subject = "WORKER FOUND?"; var message = "Dear " + userName + "," + "\n\n\nThis is the finder" + MailApp.sendEmail(userEmail, subject, message, {attachments:file.next().getBlob()}); } }

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

1 个答案:

答案 0 :(得分:1)

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

  

加(字)

Add a word to the associated personal word list.

因此,我的理解是你需要一个个人单词列表(PWL)。

Pyenchant是一个基于ctypes的附魔C库包装器。我的理解是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缓存),那么删除关闭终端的内容或你需要在Widows上做什么,然后重试。

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

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

我强烈怀疑您看到的错误消息是被底层C库(附魔)抛出而不是直接冒险,所以我不知道有什么方法可以捕获它们或阻止它们被显示。但是如果你使用DictWithPWL(),它们就永远不会被抛出。