Использование Hunspell с Python для проверки правописания не может обрабатывать португальское слово со знаком

Я пытаюсь исправить опечатки, и для этого я использую 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)

У меня все библиотеки установлены правильно, и приведенный выше код отлично работает, например, для слова «feninine». Моя проблема - "ç".

Ошибка, которую я получаю:

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


person Esther    schedule 04.07.2018    source источник
comment
Ваш ввод не Unicode. Советы по устранению неполадок см. в информации о теге Stack Overflow character-encording.   -  person tripleee    schedule 04.07.2018


Ответы (2)


Попробуйте поместить этот код в первую строку файла

-- кодировка: utf-8 --

person user3341373    schedule 05.07.2018

Просто примечание, если кто-то застрял с этим. Существует пакет под названием spacy_hunspell, который представляет собой оболочку для Hunspell для Python и spaCy. Он использует версию Python Hunspell 0.5.0, которая имеет проблемы с кодировкой, как и в этой теме, упомянутой здесь.

Чтобы решить эту проблему, просто измените файл setup.py файла spacy_hunspell. на hunspell==0.5.5, и проблема решена.

person Paulo Mann    schedule 24.07.2019