给出以下句子:
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也询问了解析语法,但没有令人信服的答案。
所以,我正在寻找一个完整的答案,可以给我一个句子的解析树。
答案 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))) (. .)))