Использование Hunspell с Python для правописания не может обрабатывать португальское слово со знаком - PullRequest
0 голосов
/ 04 июля 2018

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

Ответы [ 2 ]

0 голосов
/ 24 июля 2019

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

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

0 голосов
/ 05 июля 2018

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

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

...