Я пытаюсь исправить опечатки, и для этого я использую Spacy с Hunspell и Python. Я написал следующий код, чтобы найти предлагаемые слова для «cardaço», что является неправильным способом написания «cadarço» на португальском языке.
import hunspell
from spacy.tokens import Token
import spacy
class spaCyHunSpell(object):
name = 'spacy_hunspell'
def __init__(self, dic_path, aff_path):
self.hobj = hunspell.HunSpell(dic_path, aff_path)
Token.set_extension('hunspell_spell', default=None)
Token.set_extension('hunspell_suggest', getter=self.get_suggestion)
def __call__(self, doc):
for token in doc:
token._.hunspell_spell = self.hobj.spell(token.text)
return doc
def get_suggestion(self, token):
return self.hobj.suggest(token.text)
nlp = spacy.load('pt')
hunspell = spaCyHunSpell('/usr/share/hunspell/pt_BR.dic', '/usr/share/hunspell/pt_BR.aff')
nlp.add_pipe(hunspell)
doc = nlp(u'cardaço')
print(doc[0]._.hunspell_suggest)
У меня все библиотеки установлены правильно, и приведенный выше код отлично работает, например, для слова "фенинин". Моя проблема - "ç".
Я получаю ошибку:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe7 in position 5: invalid continuation byte
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/netshoes/PycharmProjects/migracao-sas/modelo_NICHO2/main.py", line 29, in <module>
print(doc[0]._.hunspell_suggest)
File "/usr/local/lib/python3.6/dist-packages/spacy/tokens/underscore.py", line 31, in __getattr__
return getter(self._obj)
File "/home/netshoes/PycharmProjects/migracao-sas/modelo_NICHO2/main.py", line 23, in get_suggestion
return self.hobj.suggest(token.text)
SystemError: <built-in method suggest of HunSpell object at 0x7f6b3560fe50> returned a result with an error set
Я попытался использовать unidecode без успеха.
Моя версия Python - 3,6