2016-11-04 3 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).

Пиренант - это обертка на основе 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 кэширование правильно), то удалите содержимое закрыть терминал или все, что вам нужно сделать на вдовах и повторите попытку.

Если вы хотите использовать в PWL в памяти удаления или усечения (обязательно удалить все пустые строки, которые вы создали ранее) файл в PWL по умолчанию (~/.config/заточка/en_US.dic на Linux) и использование:

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

Я сильно подозреваю, что сообщения об ошибках, которые вы видите, бросаются базовой библиотекой C (enchant), а не пирамидой напрямую, поэтому я не знаю, как их поймать или предотвратить их показ. Но если вы используете DictWithPWL(), они никогда не будут выбрасываться в первую очередь.

+0

Спасибо - я не пробовал использовать тот же код с помощью DictWithPWL. Прямо сейчас, я просто не допускаю трехсимвольной комбинации чисел и букв, поэтому я не сталкиваюсь с этой проблемой. Я также подозревал, что сообщения об ошибках выбрасываются базовой библиотекой C, поэтому я рад слышать, что вы также это сказали. –