如何使用python nltk获取解析树?

时间:2017-02-19 02:09:00

标签: python nltk

给出以下句子:

The old oak tree from India fell down.

如何使用python NLTK获得句子的以下解析树表示?

(ROOT (S (NP (NP (DT The) (JJ old) (NN oak) (NN tree)) (PP (IN from) (NP (NNP India)))) (VP (VBD fell) (PRT (RP down)))))

我需要一个在网络上找不到的完整示例!

修改

我已经通过this book chapter来学习使用NLTK解析但问题是,我需要一个语法来解析我没有的句子或短语。我发现this stackoverflow post也询问了解析语法,但没有令人信服的答案。

所以,我正在寻找一个完整的答案,可以给我一个句子的解析树。

2 个答案:

答案 0 :(得分:6)

以下是使用StanfordCoreNLP代替nltk的替代解决方案。在StanfordCoreNLP之上构建的库很少,我个人使用pycorenlp来解析句子。

首先,您必须下载stanford-corenlp-full文件夹,其中包含*.jar个文件。并在文件夹内运行服务器(默认端口为9000)。

export CLASSPATH="`find . -name '*.jar'`"
java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer [port?] # run server

然后在Python中,您可以运行以下命令来标记句子。

from pycorenlp import StanfordCoreNLP
nlp = StanfordCoreNLP('http://localhost:9000')

text = "The old oak tree from India fell down."

output = nlp.annotate(text, properties={
  'annotators': 'parse',
  'outputFormat': 'json'
})

print(output['sentences'][0]['parse']) # tagged output sentence

答案 1 :(得分:0)

较旧的问题,但是您可以将nltk与bllipparser一起使用。这是longer example from nltk。经过一番摆弄之后,我自己使用了以下内容:

要安装(已安装nltk):

sudo python3 -m nltk.downloader bllip_wsj_no_aux
pip3 install bllipparser

要使用:

from nltk.data import find
from bllipparser import RerankingParser

model_dir = find('models/bllip_wsj_no_aux').path
parser = RerankingParser.from_unified_model_dir(model_dir)

best = parser.parse("The old oak tree from India fell down.")

print(best.get_reranker_best())
print(best.get_parser_best())

输出:

-80.435259246021 -23.831876011253 (S1 (S (NP (NP (DT The) (JJ old) (NN oak) (NN tree)) (PP (IN from) (NP (NNP India)))) (VP (VBD fell) (PRT (RP down))) (. .)))
-79.703612178593 -24.505514522222 (S1 (S (NP (NP (DT The) (JJ old) (NN oak) (NN tree)) (PP (IN from) (NP (NNP India)))) (VP (VBD fell) (ADVP (RB down))) (. .)))