作为我学术项目的一部分,我需要把一堆任意的句子解析成依赖关系图。经过大量的搜索,我得到了一个解决方案,我可以使用Malt解析器来解析文本和它预先训练的语法。
我已经从http://www.maltparser.org/mco/mco.html下载了预先训练的模型(engmalt.linear-1.7.mco)。但是我不知道如何使用这个grammer文件和malt解析器(通过malt的python接口)解析我的句子。我已经下载了最新版本的malt parser(1.7.2),并将其移到了“/usr/lib/”
import nltk;
parser =nltk.parse.malt.MaltParser()
txt="This is a test sentence"
parser.train_from_file('/home/rohith/malt-1.7.2/engmalt.linear-1.7.mco')
parser.raw_parse(txt)
执行最后一行后,将显示以下eror消息
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
parser.raw_parse(txt)
File "/usr/local/lib/python2.7/dist-packages/nltk-2.0b5-py2.7.egg/nltk/parse/malt.py", line 88, in raw_parse
return self.parse(words, verbose)
File "/usr/local/lib/python2.7/dist-packages/nltk-2.0b5-py2.7.egg/nltk/parse/malt.py", line 75, in parse
return self.tagged_parse(taggedwords, verbose)
File "/usr/local/lib/python2.7/dist-packages/nltk-2.0b5-py2.7.egg/nltk/parse/malt.py", line 122, in tagged_parse
return DependencyGraph.load(output_file)
File "/usr/local/lib/python2.7/dist-packages/nltk-2.0b5-py2.7.egg/nltk/parse/dependencygraph.py", line 121, in load
return DependencyGraph(open(file).read())
IOError: [Errno 2] No such file or directory: '/tmp/malt_output.conll'
请帮我用这个麦芽分析器来解析那个句子。
编辑
请注意,由于自2015年8月以来NLTK中的MaltParser API的更新版本,is answer不再工作。这个答案是为了遗产而保留的。
请看下面的答案,让MaltParser使用NLTK:
免责声明:这不是一个永恒的解决方案。以上链接(2016年2月发布)中的答案目前有效。但是,当MaltParser或NLTK API更改时,它也可能将语法更改为在NLTK中使用MaltParser。
你的设置有几个问题:
train_from_file
的输入必须是CoNLL格式的文件,而不是预先训练的模型。对于mco
文件,可以使用mco
和working_directory
参数将其传递给MaltParser
构造函数。mco
文件,因此您必须告诉java在-Xmx
参数中使用更多的堆空间。不幸的是,这在现有代码中是不可能的,所以我只是签入了一个更改,以允许为java参数添加一个构造函数参数。见here。所以你需要做的是:
首先,获取最新的NLTK版本:
(注意:如果不能使用git版本的NLTK,则必须手动更新文件
malt.py
,或者从here复制该文件以获得自己的版本。)其次,将jar文件重命名为
malt.jar
,这正是NLTK所期望的:然后添加一个指向malt parser的环境变量:
最后,在python中加载并使用malt解析器:
相关问题 更多 >
编程相关推荐