你好,我正在尝试使用一款名为 MeCab 的日本 NLP 软件,它是用 Python 编写的,并且仅以源代码形式分发。(http://taku910.github.io/mecab/)
从第一天开始它就给我带来了麻烦。我在一台使用 exe 安装软件的 Windows 7 机器下使用它没有问题。然而,我从源代码编译的 ubuntu 版本有时不起作用。
我也在 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 位。谢谢!
答案1
你不应该自己编译这个包。使用以下命令删除它:
cd mecab-0.996
sudo make uninstall
然后继续 deb-packagemecab
来自存储库。它具有与您努力编译的 0.996 版本完全相同的版本...
xenial (16.04LTS) (杂项):日语形态分析系统 [universe]
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
答案2
我没有找到直接回答我自己的问题的解决方案,但我找到了解决方法。
我得出的结论是,问题与 mecab 处理 utf8 编码的方式有关,它默认为 euc-jp 编码。此外,还有一个导致 UnicodeDecodeError 的错误,互联网上有一个解决方案。
把它们加起来:
- 必须安装 mecab 和 IPA 词典,并采用 utf8 配置。如果搞砸了,那么“sudo make uninstall”。
有一个错误会导致 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 就可以正常工作。