python - 一步一步让 NLTK 中的麦芽解析器正常工作?

标签 python parsing nltk

我已经尝试了一切方法来使 Malt Parser (1.7.1) 及其预训练模型(通过 .mco hack 添加)能够工作。我得到的最接近的是一个 DependencyGraph,其中每个单词的第一个字母作为标签。我只去过一次,就再也回不来了。 99% 的时候,我得到的只是:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Python/2.7/site-packages/nltk/parse/malt.py", line 98, in parse
    return self.tagged_parse(taggedwords, verbose)
  File "/Library/Python/2.7/site-packages/nltk/parse/malt.py", line 150, in tagged_parse
    "code %d" % (' '.join(cmd), ret))
Exception: MaltParser parsing (java -jar /Users/walrusthecat/maltparser/malt.jar -w /var/folders/2b/0fpc89fd0rqbj8bf4r7xbh640000gp/T -c /Users/walrusthecat/maltparser/model.mco -i /var/folders/2b/0fpc89fd0rqbj8bf4r7xbh640000gp/T/malt_input.conlltApSTj -o /var/folders/2b/0fpc89fd0rqbj8bf4r7xbh640000gp/T/malt_output.conllrkclZz -m parse) failed with exit code 1

如果我 chown 写入临时文件的目录,或者在 sudo 下执行 python,就会发生这种情况。我尝试过 Malt Parser 1.7.1 和 1.2 。有什么吗?

谢谢

最佳答案

NLTK 中的 MaltParser API 在 2015 年 8 月进行了全新更新。

以下是让 MaltParser 在 Linux 上运行的分步方法:

<强>1。下载提取的麦芽解析器和预训练模型

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

<强>2。设置环境变量

例如..

export MALT_PARSER=$HOME/maltparser-1.8.1/
export MALT_MODEL=$HOME/engmalt.linear-1.7.mco

(参见https://github.com/nltk/nltk/wiki/Installing-Third-Party-Software#malt-parser)

然后在python中:

>>> 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()
Tree('shot', ['I', Tree('elephant', ['an']), Tree('in', [Tree('pajamas', ['my'])]), '.'])

TL;DR

alvas@ubi:~$ cd 
alvas@ubi:~$ wget http://www.maltparser.org/mco/english_parser/engmalt.linear-1.7.mco
alvas@ubi:~$ wget http://maltparser.org/dist/maltparser-1.8.1.zip
alvas@ubi:~$ unzip maltparser-1.8.1.zip
alvas@ubi:~$ export MALT_PARSER=$HOME/maltparser-1.8.1/
alvas@ubi:~$ export MALT_MODEL=$HOME/engmalt.linear-1.7.mco
alvas@ubi:~$ python
Python 2.7.11 (default, Dec 15 2015, 16:46:19) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 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()
Tree('shot', ['I', Tree('elephant', ['an']), Tree('in', [Tree('pajamas', ['my'])]), '.'])

有关更多信息,请参阅以下演示:


在 Windows 上,请按照打印屏幕步骤小心进行操作:https://github.com/nltk/nltk/issues/1294#issuecomment-189831647

总结 Windows 步骤:

  • 安装Conda(不要先安装NLTK)
  • 安装Git
  • 安装Java
  • 使用pip install -U https://github.com/nltk/nltk.git安装NLTK(不要使用conda install nltk ,直到他们将软件包更新为 NLTK v3.2!!!)

关于python - 一步一步让 NLTK 中的麦芽解析器正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13207394/

相关文章:

python - 如何更改工具栏的默认位置?

parsing - 为什么 C++ strtod 将 "708530856168225829.3221614e9"解析为 7.08530856168225898e+26 而不是 7.08530856168225761e+26?

c++ - 错误: cannot convert ‘std::string {aka std::basic_string<char>}’ to ‘char*’ in initialization

python - 如何在Python中规范化numpy数组

python - 如何在JS代码中正确使用gettext?

c - 使用 fget 和解析

Python 上下文无关语法和 PCFG 生成基准?

python - 如何从文本文档中查找常用短语

python - 如何将 POS 列表更改为普通字符串

python - OpenCV + Python + 多处理行不通