使用 Stanford CoreNLP Python Parser 获取特定输出
Using Stanford CoreNLP Python Parser for specific output
我正在使用 SCP 获取英语句子的解析 CFG 树。
from corenlp import *
corenlp = StanfordCoreNLP()
corenlp.parse("Every cat loves a dog")
我的预期输出是这样的树:
(S (NP (DET Every) (NN cat)) (VP (VT loves) (NP (DET a) (NN dog))))
但我得到的是:
(ROOT (S (NP (DT Every) (NN cat)) (VP (VBZ loves) (NP (DT a) (NN dog)))))
如何按预期更改POS标签并删除ROOT节点?
谢谢
您可以使用 nltk.tree module from NLTK.
from nltk.tree import *
def traverse(t):
try:
# Replace Labels
if t.label() == "DT":
t.set_label("DET")
elif t.label() == "VBZ":
t.set_label("VT")
except AttributeError:
return
for child in t:
traverse(child)
output_tree= "(ROOT (S (NP (DT Every) (NN cat)) (VP (VBZ loves) (NP (DT a) (NN dog)))))"
tree = ParentedTree.fromstring(output_tree)
# Remove ROOT Element
if tree.label() == "ROOT":
tree = tree[0]
traverse(tree)
print tree
# (S (NP (DET Every) (NN cat)) (VP (VT loves) (NP (DET a) (NN dog))))
我正在使用 SCP 获取英语句子的解析 CFG 树。
from corenlp import *
corenlp = StanfordCoreNLP()
corenlp.parse("Every cat loves a dog")
我的预期输出是这样的树:
(S (NP (DET Every) (NN cat)) (VP (VT loves) (NP (DET a) (NN dog))))
但我得到的是:
(ROOT (S (NP (DT Every) (NN cat)) (VP (VBZ loves) (NP (DT a) (NN dog)))))
如何按预期更改POS标签并删除ROOT节点?
谢谢
您可以使用 nltk.tree module from NLTK.
from nltk.tree import *
def traverse(t):
try:
# Replace Labels
if t.label() == "DT":
t.set_label("DET")
elif t.label() == "VBZ":
t.set_label("VT")
except AttributeError:
return
for child in t:
traverse(child)
output_tree= "(ROOT (S (NP (DT Every) (NN cat)) (VP (VBZ loves) (NP (DT a) (NN dog)))))"
tree = ParentedTree.fromstring(output_tree)
# Remove ROOT Element
if tree.label() == "ROOT":
tree = tree[0]
traverse(tree)
print tree
# (S (NP (DET Every) (NN cat)) (VP (VT loves) (NP (DET a) (NN dog))))