gpt4 book ai didi

python - 如何使用 nltk 去除 ptb 解析树中的 -NONE- 和 *T*-i?

转载 作者:行者123 更新时间:2023-11-28 16:19:55 26 4
gpt4 key购买 nike

我处理 penn tree bank v2 树并经常遇到像这样的“服务”子树(以及其他几种类型)

enter image description here

我可以手动添加很多规则来优化我实际使用的节点(使用标签和标记进行解析,没有“哦,看那里”链接或“这里一定有一个节点” - 就像返回的那些Stanford 解析器),但我最常留下其中一些服务节点或巨大的间隙和“裁剪分支”(例如,如果您删除上面的那些 -NONE- 节点,您将拥有 SBAR 没有 child ,这很奇怪。

我想知道是否可以从 from nltk.corpus import ptb; 的输出中删除除实际解析(单词、标签、标点符号)之外的所有内容; ptb.parsed_sents() 一个和所有?

最佳答案

删除任何只支配踪迹的子树。在下文中,我遍历了子树,但实际上检查了它们的子树;这使得通过修改包含它的节点来删除空子树变得容易。

for sub in some_tree.subtrees():
for n, child in enumerate(sub):
if isinstance(child, str):
continue
if all(leaf.startswith("*") for leaf in child.leaves()):
del sub[n] # Delete this child

我使用 leaf.startswith("*") 作为检测痕迹的简单标准。根据需要将其替换为您自己的。

编辑:由于您要删除仅包含标记为-NONE- 的子树的所有节点,并且每个这样的子树只控制一个叶子,请使用以下测试:

    if len(list(child.subtrees(filter=lambda x:x.label()=='-NONE-')))==len(child.leaves()):
del sub[n]

关于python - 如何使用 nltk 去除 ptb 解析树中的 -NONE- 和 *T*-i?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41171942/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com