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

如何从SemCor标注语句中提取特定单词的sense_id或sense_key?

提取SemCor中特定单词的义项信息

SemCor的语义标注是以WordNet Synset对象的形式存储的,你可以通过访问Synset的属性来获取sense_id(如bank.n.01)和sense_name(即义项释义)。以下是实现代码:

import nltk
from nltk.corpus import semcor, wordnet

# 下载依赖资源
nltk.download('semcor')
nltk.download('wordnet')

def extract_target_senses(target_word):
    target_senses = []
    # 遍历所有带语义标注的句子
    for sent in semcor.tagged_sents(tag='sem'):
        for item in sent:
            # 筛选带语义标注的Tree节点
            if isinstance(item, nltk.tree.Tree):
                # 获取原词文本(统一转小写避免大小写匹配问题)
                original_word = ' '.join(item.leaves()).lower()
                if original_word == target_word.lower():
                    synset = item.label()
                    # 提取义项ID和释义
                    sense_info = {
                        'sense_id': synset.name(),
                        'sense_name': synset.definition(),
                        # 可选:提取该义项对应的语境
                        'context': ' '.join([w if isinstance(w, str) else ' '.join(w.leaves()) for w in sent])
                    }
                    target_senses.append(sense_info)
    return target_senses

# 提取"bank"的所有义项实例
bank_senses = extract_target_senses('bank')

# 打印部分结果示例
for i, info in enumerate(bank_senses[:3]):
    print(f"实例 {i+1}:")
    print(f"义项ID: {info['sense_id']}")
    print(f"义项名称/释义: {info['sense_name']}")
    print(f"语境: {info['context']}\n")

关键说明:

  • SemCor中标注过的词汇以nltk.tree.Tree结构存在,item.label()直接返回对应的WordNet Synset对象。
  • synset.name()返回标准义项ID(格式为词元.词性.义项序号),synset.definition()返回该义项的自然语言释义,即你需要的sense_name。
  • 代码中统一转小写匹配,避免因原词大小写不同导致漏检;如果需要精确区分大小写,移除.lower()即可。
  • 可选的context字段可以帮你查看该义项出现的具体语境,方便后续分析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 18:59:54