【发布时间】:2025-12-12 08:05:02
【问题描述】:
我想简化解析树的节点,即给定一个节点,我去掉第一个连字符以及该连字符之后的任何内容。例如,如果一个节点是 NP-TMP-FG,我想让它成为 NP,如果它是 SBAR-SBJ,我想让它成为 SBAR 等等。这是我拥有的一棵解析树的示例
( (S (S-TPC-2 (NP-SBJ (NP (DT The) (NN asbestos) (NN fiber) ) (, ,)
(NP (NN crocidolite) ) (, ,) ) (VP (VBZ is) (ADJP-PRD (RB unusually) (JJ resilient) )
(SBAR-TMP (IN once) (S (NP-SBJ (PRP it) ) (VP (VBZ enters) (NP (DT the) (NNS lungs) ))))
(, ,) (PP (IN with)(S-NOM (NP-SBJ (NP (RB even) (JJ brief) (NNS exposures) ) (PP (TO to)
(NP (PRP it) ))) (VP (VBG causing) (NP (NP (NNS symptoms) ) (SBAR (WHNP-1 (WDT that) )
(S (NP-SBJ (-NONE- *T*-1) ) (VP (VBP show) (PRT (RP up) ) (ADVP-TMP (NP (NNS decades) )
(JJ later) )))))))))) (, ,) (NP-SBJ (NNS researchers) ) (VP (VBD said)(SBAR (-NONE- 0)
(S (-NONE- *T*-2) ))) (. .) ))
这是我的代码,但它不起作用。
import re
import nltk
from nltk.tree import *
tree = Tree.fromstring(line) // Each parse tree is stored in one single line
for subtree in tree.subtrees():
re.sub('-.*', '', subtree.label())
print tree
编辑:
我猜问题是 subtree.label() 显示了节点,但它不能更改,因为它是一个函数。 print subtree.label() 的输出是:
S
S-TPC-2
NP-SBJ
NP
DT
NN
,
等等……
【问题讨论】:
标签: python regex tree nodes nltk