You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用nltk.tree打印给定结构的句子语法树

实现方案

实现思路

  • 首先将输入的语法树节点列表转换为统一的节点查找字典,可通过父节点名快速查询对应子节点列表
  • 采用深度优先递归遍历节点,每深入一层缩进量增加固定长度,子节点前使用树形符号标识层级关系
  • 遇到叶子节点(子节点为#)时停止向下递归

完整代码

# 输入的语法树原始数据
tree_data = [{'ROOT': ['S']}, {'S': ['VPS']}, {'VPS': ['N', 'VP']}, {'N': ['#']}, {'VP': ['PP', 'MV']}, {'PP': ['PREP_EZ', 'N']}, {'PREP_EZ': ['#']}, {'N': ['#']}, {'MV': ['N', 'V']}, {'N': ['#']}, {'V': ['#']}]

# 转换为节点查找字典
node_map = {}
for item in tree_data:
    for parent, children in item.items():
        node_map[parent] = children

# 递归打印树形结构的函数
def print_tree(node, indent=0, is_last=False):
    # 打印当前节点的前缀和节点名
    prefix = "└── " if is_last else "├── "
    print("    " * (indent-1) + prefix + node if indent > 0 else node)
    # 不是叶子节点则继续递归打印子节点
    children = node_map.get(node, [])
    if children == ['#']:
        return
    for i, child in enumerate(children):
        print_tree(child, indent + 1, i == len(children)-1)

# 从根节点开始打印
print_tree('ROOT')

运行输出效果

ROOT
└── S
    └── VPS
        ├── N
        └── VP
            ├── PP
            │   ├── PREP_EZ
            │   └── N
            └── MV
                ├── N
                └── V

内容的提问来源于stack exchange,提问作者user3633858

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:54:08