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

如何获取NLTK Semcor中Tree的Lemma及树类型?

搞定NLTK Semcor的两个实用需求

嘿,这两个需求我熟!先把基础的加载代码放出来,确保我们在同一个频道上:

import nltk
nltk.download('semcor')
from nltk.corpus import semcor

1. 获取包含Lemma的Tree节点

你要的Tree(Lemma('group.n.01.group'))这种结构,其实就是semcor.tagged_sents(tag="sem")返回的句子中的Tree元素。这里给你两种方法:

  • 通用遍历法:如果你不确定目标节点的位置,可以遍历句子找到带Lemma的Tree:

    first_sent = semcor.tagged_sents(tag="sem")[0]
    lemma_tree = None
    for item in first_sent:
        # 判断是否为含Lemma的Tree
        if hasattr(item, 'label') and isinstance(item.label(), nltk.corpus.reader.wordnet.Lemma):
            lemma_tree = item
            break
    print(lemma_tree)
    # >>> Tree(Lemma('group.n.01.group'), [Tree('NE', ['Fulton', 'County', 'Grand', 'Jury'])])
    
  • 直接索引法:要是你已经知道目标节点的位置(比如你示例里的第2个元素),直接索引更高效:

    lemma_tree = semcor.tagged_sents(tag="sem")[0][1]
    print(lemma_tree)
    # >>> Tree(Lemma('group.n.01.group'), [Tree('NE', ['Fulton', 'County', 'Grand', 'Jury'])])
    

2. 获取子树的类型(比如'NE')

拿到上面的Lemma Tree后,它的子节点就是带类型标签的Tree。要获取标签(比如'NE'),只需要调用子Tree的.label()方法:

# 从Lemma Tree中取出子树
ne_tree = lemma_tree[0]
# 获取树的类型
tree_type = ne_tree.label()
print(tree_type)
# >>> 'NE'

或者直接用索引链一步到位:

tree_type = semcor.tagged_sents(tag="sem")[0][1][0].label()
print(tree_type)
# >>> 'NE'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 07:27:33