切分斯坦福帕斯

2024-09-28 17:22:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道如何使用Regex来分块由NLTK生成的树结构

from nltk.parse.corenlp import CoreNLPParser

一句话:“新泽西州进口含硫量大于1%的剩余燃料油”。从Stanford Parser生成的树如下所示:

^{pr2}$

我想提取以下短语,在元组中标记化:

[('New', 'Jersey'), ('Imports'), ('Residual', 'Fuel', 'Oil'), ('Greater', 'Than', '1', '%', 'Sulfur')]

当我尝试获取所有子树(不包括树本身)时,会得到如下结果:

(u'New', u'Jersey')
(u'Imports', u'of', u'Residual', u'Fuel', u'Oil', u',', u'Greater', u'Than', u'1', u'%', u'Sulfur')
(u'Imports',)
(u'of', u'Residual', u'Fuel', u'Oil', u',', u'Greater', u'Than', u'1', u'%', u'Sulfur')
(u'Residual', u'Fuel', u'Oil', u',', u'Greater', u'Than', u'1', u'%', u'Sulfur')
(u'Residual', u'Fuel', u'Oil')
(u'Greater', u'Than', u'1', u'%', u'Sulfur')
(u'Greater',)
(u'Than', u'1', u'%', u'Sulfur')
(u'1', u'%', u'Sulfur')
(u'1', u'%')

这不是很好,因为有一些很长的块可以进一步分解。在

有人能给我指出正确的方向吗?谢谢!在

[编辑],部分代码:

for sbt in out.subtrees(lambda t: t.height() < out.height() - 1):
        if sbt.label() in ['ADJP', 'ADVP', 'CONJP', 'NP', 'PP', 'QP', 'UCP', 'VP', 'WHADJP', 'WHAVP', 'WHNP', 'WHPP']:
            candidates.append(tuple(sbt.leaves()))

Tags: ofinnewoutimportsregexheightoil