【问题标题】:NLTK and MaltParser exit with error code 1NLTK 和 MaltParser 以错误代码 1 退出
【发布时间】:2016-05-24 20:03:54
【问题描述】:

我已经到处寻找这个问题的答案,但没有找到适合我需要的答案。

我正在尝试为 MaltParser 使用 nltk 包装器。过去似乎有很多人在使用 MaltParser 的 nltk 包装器时遇到问题,但我没有发现有相同的错误或相同的修复。这是代码,这是错误:

import nltk
maltParser = nltk.parse.malt.MaltParser(parser_dirname="/home/owen/maltparser-1.7.2", 
model_filename="engmalt.linear-1.7",
additional_java_args=['-Xmx512m'])
result = maltParser.parse_one('This is a test sentence'.split())
print result.tree()

这是错误:

异常:MaltParser 解析(java -Xmx512m -cp /home/owen/maltparser-1.7.2/lib/libsvm.jar:/home/owen/maltparser-1.7.2/malt.jar:/home/owen/ maltparser-1.7.2/lib/log4j.jar:/home/owen/maltparser-1.7.2/maltparser-1.7.2.jar:/home/owen/maltparser-1.7.2/lib/liblinear-1.8.jar org .maltparser.Malt -c engmalt.linear-1.7 -i /tmp/malt_input.conll.ej6hqf -o /tmp/malt_output.conll.TZXpc2 -m parse) 失败,退出代码为 1

以下是我已经尝试过的所有方法以及不同的组合:

  1. 正在更新 nltk 和 java。
  2. 尝试不同版本的 MaltParser 和 .mco 模型文件
  3. 将 MaltParser 中的 .jar 文件重命名为 Malt.jar(显然,对于某些版本的 nltk 包装器,这是必须在某个时候完成的修复)
  4. 编辑 MALT_PARSER='/home/owen/maltparser-1.7.2/' 和 MALT_MODEL='/home/owen/maltparser-1.7.2/engmalt.poly-1.7.mco' 的 os 变量
  5. 将 .mco 文件移入和移出 maltparser-1.7.2 目录

仅供参考:我已经按照以下帖子中的步骤进行操作:

Step by step to getting malt parser in NLTK to work?

我可能尝试过其他一些方法。我不记得了。我真正想知道的是错误的含义以及可能导致错误的原因。我无法确定它的头或尾。

这里是所要求的信息:

lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 12.04.5 LTS
Release:    12.04
Codename:   precise
owen@termedev:~/malttesting$ python -c "import nltk; print nltk.__version__"
3.2.1
owen@termedev:~/malttesting$ java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)

owen@termedev:~/malttesting$ python -c "import os; print os.environ['MALT_PARSER']; print os.environ['MALT_MODEL']"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python2.7/UserDict.py", line 23, in __getitem__
    raise KeyError(key)
KeyError: 'MALT_PARSER'

感谢您的帮助

【问题讨论】:

  • 我刚刚在新的 ubuntu 16.04 上尝试了 TL;DR,它似乎工作正常,即使使用 mp = MaltParser('maltparser-1.8.1', 'engmalt.linear-1.7.mco', additional_java_args=['-Xmx512m'])。
  • 所以我们需要更多信息,以便更好地帮助您。你在ubuntu上吗?如果是这样,请使用$ lsb_release -a 和$ python -c "import nltk; print nltk.__version__ 和$ java -version 和python -c "import os; print os.environ['MALT_PARSER']; print os.environ['MALT_MODEL']" 的终端输出更新您的问题
  • 顺便说一句,我认为您并没有真正安装/更新 java,因此退出代码 1 错误,请尝试以下说明:tecadmin.net/install-oracle-java-8-jdk-8-ubuntu-via-ppa/#
  • 我在您发布的 URL (tecadmin.net/install-oracle-java-8-jdk-8-ubuntu-via-ppa/#) 上运行了命令,它输出相同的错误
  • 您好!我运行了来自 stackoverflow.com/questions/13207394/... 的 TL;DR 指令,它奏效了! :) 所以,现在它在从终端运行 python 时可以正常工作,但在 .py 文件中执行相同的 python 代码时就不行了。

标签: java python ubuntu nltk


【解决方案1】:

有几件事可能出错了:

问题 1:Java 或 NLTK 版本未更新

首先检查您是否已安装并更新了您的 NLTK:

$ pip install -U nltk

要在 Ubuntu 上更新您的 Java,请参阅 http://tecadmin.net/install-oracle-java-8-jdk-8-ubuntu-via-ppa/#


问题 2:MaltParser 未更新

尝试使用 MaltParser 版本 > 1.8 和适当的 .mco 文件(例如 engmalt.linear-1.7)


问题 3:为 MaltParser 设置 NLTK API

然后按照Step by step to getting malt parser in NLTK to work?的TL;DR说明中的步骤进行操作

简而言之,当您在终端上运行此程序时,您应该会看到 NO 错误:

cd && wget http://www.maltparser.org/mco/english_parser/engmalt.linear-1.7.mco && wget http://maltparser.org/dist/maltparser-1.8.1.zip && unzip maltparser-1.8.1.zip && export MALT_PARSER=$HOME/maltparser-1.8.1/ && export MALT_MODEL=$HOME/engmalt.linear-1.7.mco
python -c "from nltk.parse.malt import MaltParser; mp = MaltParser('maltparser-1.8.1', 'engmalt.linear-1.7.mco'); mp.parse_one('I shot an elephant in my pajamas .'.split()).tree()"

问题 4:环境变量设置不正确

在运行脚本之前,您必须切换到运行脚本的目录,然后在终端上设置环境变量:

cd /home/username/directory_where_you_are_going_to_run_your_script
export MALT_PARSER=$HOME/maltparser-1.8.1/
export MALT_MODEL=$HOME/engmalt.linear-1.7.mco
python yourscript.py

主动回答

如果上面列出的问题的解决方案没有解决您在 NLTK 中使用 MaltParser API 的问题,那么您最好

  1. 确保您已正确安装Java,请参阅http://tecadmin.net/install-oracle-java-8-jdk-8-ubuntu-via-ppa/#
  2. 设置虚拟环境(参见http://docs.python-guide.org/en/latest/dev/virtualenvs/)
  3. 使用pip 安装 NLTK 和脚本所需的包
  4. 在终端上运行以下命令

[在终端上]:

cd && wget http://www.maltparser.org/mco/english_parser/engmalt.linear-1.7.mco && wget http://maltparser.org/dist/maltparser-1.8.1.zip && unzip maltparser-1.8.1.zip && export MALT_PARSER=$HOME/maltparser-1.8.1/ && export MALT_MODEL=$HOME/engmalt.linear-1.7.mco
python -c "from nltk.parse.malt import MaltParser; mp = MaltParser('maltparser-1.8.1', 'engmalt.linear-1.7.mco'); mp.parse_one('I shot an elephant in my pajamas .'.split()).tree()"

然后在设置环境变量后重新运行您的脚本,例如与:

cd /home/username/directory_where_you_are_going_to_run_your_script
export MALT_PARSER=$HOME/maltparser-1.8.1/
export MALT_MODEL=$HOME/engmalt.linear-1.7.mco
python yourscript.py

【讨论】:

    猜你喜欢
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多