从源代码编译的软件首次运行后不起作用

从源代码编译的软件首次运行后不起作用

你好,我正在尝试使用一款名为 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 就可以正常工作。

相关内容