在Python中使用Stanford Tregex
问题内容:
我是NLP和Python的新手。我正在尝试使用Tregex工具和Python子进程库从StanfordCoreNLP的已解析树中提取名词短语的子集。特别是,我试图查找和提取与以下模式匹配的名词短语:’(NP
[$ VP]> S)|(NP [$ VP]> S \ n)|(NP \ n [$ VP] > S)|(NP \ n [$ VP]> S \
n)’在Tregex语法中。
例如,下面是原始文本,保存在名为“ text”的字符串中:
text = ('Pusheen and Smitha walked along the beach. "I want to surf", said Smitha, the CEO of Tesla. However, she fell off the surfboard')
使用Python包装器运行StanfordCoreNLP解析器后,我为这3个句子得到了以下3棵树:
output1['sentences'][0]['parse']
Out[58]: '(ROOT\n (S\n (NP (NNP Pusheen)\n (CC and)\n (NNP Smitha))\n (VP (VBD walked)\n (PP (IN along)\n (NP (DT the) (NN beach))))\n (. .)))'
output1['sentences'][1]['parse']
Out[59]: "(ROOT\n (SINV (`` ``)\n (S\n (NP (PRP I))\n (VP (VBP want)\n (PP (TO to)\n (NP (NN surf) ('' '')))))\n (, ,)\n (VP (VBD said))\n (NP\n (NP (NNP Smitha))\n (, ,)\n (NP\n (NP (DT the) (NNP CEO))\n (PP (IN of)\n (NP (NNP Tesla)))))\n (. .)))"
output1['sentences'][2]['parse']
Out[60]: '(ROOT\n (S\n (ADVP (RB However))\n (, ,)\n (NP (PRP she))\n (VP (VBD fell)\n (PRT (RP off))\n (NP (DT the) (NN surfboard)))))'
我想提取以下3个名词短语(每个句子一个)并将其另存为Python中的变量(或标记列表):
- (NP(NNP Pusheen)\ n(CC和)\ n(NNP Smitha))
- (NP(PRP I))
- (NP(PRP她))
为了给您提供信息,我在命令行中使用了tregex,其代码如下:
cd stanford-tregex-2016-10-31
java -cp 'stanford-tregex.jar:' edu.stanford.nlp.trees.tregex.TregexPattern -f -s '(NP[$VP]>S)|(NP[$VP]>S\n)|(NP\n[$VP]>S)|(NP\n[$VP]>S\n)' /Users/AS/stanford-tregex-2016-10-31/exampletree.txt
输出为:
Pattern string:
(NP[$VP]>S)|(NP[$VP]>S\n)|(NP\n[$VP]>S)|(NP\n[$VP]>S\n)
Parsed representation:
or
Root NP
and
$ VP
> S
Root NP
and
$ VP
> S\n
Root NP\n
and
$ VP
> S
Root NP\n
and
$ VP
> S\n
Reading trees from file(s) file path
\# /Users/AS/stanford-tregex-2016-10-31/exampletree.txt
(NP (NNP Pusheen) \n (CC and) \n (NNP Smitha))
\# /Users/AS/stanford-tregex-2016-10-31/exampletree.txt
(NP\n (NP (NNP Smitha)) \n (, ,) \n (NP\n (NP (DT the) (NN spokesperson)) \n (PP (IN of) \n (NP (DT the) (NNP CIA)))) \n (, ,))
\# /Users/AS/stanford-tregex-2016-10-31/exampletree.txt
(NP (PRP They))
There were 3 matches in total.
如何在Python中复制此结果?
供您参考,我通过Google找到了以下帖子,该帖子与我的问题有关,但已过时(https://mailman.stanford.edu/pipermail/parser-
user/2010-July/000606.html):
[parser-user] Tregex的变量输入
Christopher Manning manning at stanford.edu WDT Jul 7 17:41:32 PDT 2010 Hi
Haiyang,
抱歉,回复缓慢,在学年结束时事情太忙了。
2010年6月1日,晚上8:56,海阳AI写道:
亲爱的大家,
我希望这是寻求帮助的正确地方。
是的,尽管我们只能在任何特定于Python的方面提供非常有限的帮助。
但这似乎很简单(我认为)。
如果您想要的是让模式在通过stdin输入的树上运行,则需要在参数列表中的“ NP”之前添加标志“ -filter”。
如果在模式之后未指定文件,并且未给出标志“ -filter”,则它将在固定的默认句子上运行模式。
克里斯。
我正在从事与Tregex相关的项目。我正在尝试从python调用Tregex,但是我不知道如何将数据提供给Tregex,而不是常规文件,而是变量。例如,我正在尝试使用以下代码计算给定变量(例如,文本,已经解析的树,使用Stanford
Parser)中“ NP”的数量,def tregex(text):
tregex_dir =“ / root / nlp / stanford-tregex-2009-08-30 /” op = Popen([“
java”,“ -mx900m”,“ -cp”,“ stanford-tregex.jar :“,”
edu.stanford.nlp.trees.tregex.TregexPattern“,” NP“],cwd = tregex_dir,stdout
= PIPE,stdin = PIPE,stderr = STDOUT)res = op.communicate(input = text)[0
]返回res结果如下。它没有从变量中搜索内容,而是以某种方式退回到了“使用默认树”。有人可以帮我吗?我在这里呆了很长时间。非常感谢您的时间和帮助。模式字符串:NP解析的表示形式:使用默认树的根NP(NP(NP(DT,此)(NN葡萄酒))(CC和)(NP(DT,这些)(NNS蜗牛))))
(NP(DT this)(NN酒))
(NP(DT这些)(NNS蜗牛))
总共有3场比赛。
-海阳AI博士 学生宾夕法尼亚州立大学应用语言学系
解析器用户邮件列表解析器用户位于list.stanford.edu
https://mailman.stanford.edu/mailman/listinfo/parser-
user
问题答案:
为什么不使用Stanford CoreNLP服务器!
1.)启动服务器!
java -Xmx4g edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9000 - timeout 15000
2.)发出python请求!
import requests
url = "http://localhost:9000/tregex"
request_params = {"pattern": "(NP[$VP]>S)|(NP[$VP]>S\\n)|(NP\\n[$VP]>S)|(NP\\n[$VP]>S\\n)"}
text = "Pusheen and Smitha walked along the beach."
r = requests.post(url, data=text, params=request_params)
print r.json()
3.)结果如下!
{u'sentences': [{u'0': {u'namedNodes': [], u'match': u'(NP (NNP Pusheen)\n (CC and)\n (NNP Smitha))\n'}}]}