Привет я пытаюсь использовать часть японского программного обеспечения обработки естественного языка под названием MeCab, записанный в Python и распределенный только с источником. (http://taku910.github.io/mecab/)
Это давало мне проблему с первого дня. У меня нет проблемы с помощью него под окна 7 машин, которые установили программное обеспечение с exe. Однако версия человечности, которую я скомпилировал из источника, время от времени не работает.
Я также спросил в Stackoverflow, но ни у кого нет подсказки.
У меня есть некоторое открытие сейчас, и я хочу спросить, знают ли какие-либо парни здесь, как определить проблему.
Это программное обеспечение работает просто великолепно прямо после того, как оно было установлено, для только один раз. Затем не работает и бросает ошибку в код:
Traceback (most recent call last):
File "japan_text_analysis.py", line 304, in <module>
result = Jp.main()
File "japan_text_analysis.py", line 49, in main
tagged_text_tp = self.parse_text(text)
File "japan_text_analysis.py", line 33, in parse_text
word = parsed.surface
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xad in position 1: invalid start byte
Я мог разрешить эту проблему путем выполнения следующего в его исходном каталоге (где я получил эту команду: https://qiita.com/junpooooow/items/0a7d13addc0acad10606):
nkf -w --overwrite *.csv
nkf -w --overwrite *.def
и установите его снова:
./configure --with-charset=utf8
make
sudo make install
Скажите мне, где я могу искать его скомпилированный код или везде, где он установил себя в машине? Поскольку я знаю немного вещей о компиляции программного обеспечения Linux.
Я использую Ubuntu 16.04 LTS 64 бита.Спасибо!
Вы не должны компилировать пакет собой. Удалите его с
cd mecab-0.996
sudo make uninstall
и затем возобновите deb-пакет mecab
из репозитория. Это имеет точно те же 0,996 версии как Ваше очень старание скомпилировать...
гостеприимный (16.04LTS) (misc): японская система морфологического анализа [вселенная]
0.996-1.2ubuntu1: amd64 arm64 armhf i386 powerpc ppc64el s390x
Приложение Nkf упаковывается как nkf
также. Таким образом, решение просто:
sudo apt-get install mecab nkf
Примечание: можно интересоваться другими mecab-связанными пакетами (вывод от apt-cache search mecab
):
darts - C++ Template Library for implementation of Double-Array
groonga-tokenizer-mecab - MeCab tokenizer for Groonga
libmecab-dev - Header files of Mecab
libmecab-java - mecab binding for Java - java classes
libmecab-jni - mecab binding for Java - native interface
libmecab-perl - mecab binding for Perl
libmecab2 - Libraries of Mecab
libtext-mecab-perl - alternate MeCab Interface for Perl
mecab - Japanese morphological analysis system
mecab-ipadic - IPA dictionary compiled for Mecab
mecab-ipadic-utf8 - IPA dictionary encoded in UTF-8 compiled for Mecab
mecab-jumandic - Juman dictionary compiled for Mecab
mecab-jumandic-utf8 - Juman dictionary encoded in UTF-8 compiled for Mecab
mecab-naist-jdic - free Japanese Dictionaries for mecab (replacement of mecab-ipadic)
mecab-naist-jdic-eucjp - free Japanese Dictionaries for mecab (replacement of mecab-ipadic) in EUC-JP
mecab-utils - Support programs of Mecab
open-jtalk - Japanese text-to-speech system
open-jtalk-mecab-naist-jdic - NAIST Japanese Dictionary for Open JTalk
python-mecab - mecab binding for Python
ruby-mecab - mecab binding for Ruby language
unidic-mecab - free Japanese Dictionaries for mecab
Я не нашел решение, непосредственно отвечающее на мой собственный вопрос, но я нахожу способ работать вокруг этого.
Я пришел к заключению, что проблема связана с путем mecab, обрабатывают кодирование utf8, это принимает значение по умолчанию euc-мировому-судье, кодирующему. Также существует ошибка, которые вызывают UnicodeDecodeError и в Интернете существует решение.
Подвести итог его:
Существует ошибка, которые вызывают UnicodeDecodeError, существует способ решить это (https://qiita.com/kasajei/items/0805b433f363f1dba785):
import MeCab
mecab = MeCab.Tagger()
mecab.parse("") # This line is solution
node = mecab.parseToNode("すもももももももものうち")
while node:
print(node.surface)
node = node.next
Просто добавьте первую строку, которые анализируют пустую строку прежде, чем проанализировать что-либо, и MeCab работал бы просто великолепно.