14

私の学術プロジェクトの一環として、一連の任意の文を依存関係グラフに解析する必要があります。多くの検索を行った後、Malt Parser を使用して事前に訓練された文法でテキストを解析できるという解決策を得ました。

http://www.maltparser.org/mco/mco.htmlから事前トレーニング済みモデル (engmalt.linear-1.7.mco) をダウンロードしました。しかし、この文法ファイルと Malt パーサー (malt の python インターフェイスによる) を使用して、自分の文章を解析する方法がわかりません。最新バージョンの Malt パーサー (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)

最後の行を実行した後、次のエラーメッセージが表示されます

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'

このモルトパーサーを使用してその文を解析するのを手伝ってください.

4

1 に答える 1

20

編集済み

2015 年 8 月以降、NLTK の MaltParser API のバージョンが更新されたため、回答が機能しなくなったことに注意してください。この回答はレガシーのために保持されています。

MaltParser を NLTK で動作させるには、この回答を参照してください。

免責事項: これは永遠の解決策ではありません。上記のリンク (2016 年 2 月に投稿) の回答は、今のところ機能します。ただし、MaltParser または NLTK API が変更されると、構文も NLTK で MaltParser を使用するように変更される可能性があります。


セットアップに関するいくつかの問題:

  • への入力train_from_fileは、事前トレーニング済みのモデルではなく、CoNLL 形式のファイルである必要があります。ファイルの場合は、パラメータとパラメータを使用してコンストラクタmcoに渡します。MaltParsermcoworking_directory
  • デフォルトの Java ヒープ割り当ては、その特定のファイルをロードするのに十分な大きさではないmcoため、パラメータでより多くのヒープ スペースを使用するように Java に指示する必要があり-Xmxます。残念ながら、これは既存のコードでは不可能だったので、変更をチェックインして、Java 引数の追加のコンストラクターパラメーターを許可しました。ここを参照してください。

したがって、次のことを行う必要があります。

まず、最新の NLTK リビジョンを取得します。

git clone https://github.com/nltk/nltk.git

(注: NLTK の git バージョンを使用できない場合は、ファイルmalt.pyを手動で更新するか、ここからコピーして独自のバージョンにする必要があります。)

次に、jar ファイルの名前を に変更しますmalt.jar。これは、NLTK が期待するものです。

cd /usr/lib/
ln -s maltparser-1.7.2.jar malt.jar

次に、malt パーサーを指す環境変数を追加します。

export MALTPARSERHOME="/Users/dhg/Downloads/maltparser-1.7.2"

最後に、python で malt パーサーをロードして使用します。

>>> import nltk
>>> parser = nltk.parse.malt.MaltParser(working_dir="/home/rohith/malt-1.7.2", 
...                                     mco="engmalt.linear-1.7", 
...                                     additional_java_args=['-Xmx512m'])
>>> txt = "This is a test sentence"
>>> graph = parser.raw_parse(txt)
>>> graph.tree().pprint()
'(This (sentence is a test))'
于 2012-12-28T05:46:52.230 に答える