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

如何使用NLTK根据WordNet sense key获取verb class id

How to Get Verb Class ID from WordNet Sense Key Using NLTK

Let's walk through exactly how to extract the verb class ID from a WordNet sense key (like take.v.01) using NLTK. I'll break it down into simple, actionable steps with code examples.

Step 1: Set Up NLTK and WordNet

First, make sure you have NLTK installed and the required WordNet data downloaded. If you haven't done this yet:

# Install NLTK if you haven't already
!pip install nltk

# Import dependencies and download WordNet data
import nltk
from nltk.corpus import wordnet as wn

# Download core WordNet data (OMW is optional for multilingual support)
nltk.download('wordnet')
nltk.download('omw-1.4')

Step 2: Parse the Sense Key

A WordNet sense key follows the format lemma.pos.sense_number (e.g., take.v.01). We can split this string to get the components we need to fetch the corresponding synset:

sense_key = "take.v.01"

# Split the sense key into its core parts
lemma, pos, sense_num = sense_key.split('.')

Step 3: Fetch the Corresponding Synset

Using the parsed components, we can retrieve the WordNet Synset object—this is where all the verb's metadata (including class information) lives:

# Get the synset using the parsed sense key components
synset = wn.synset(f"{lemma}.{pos}.{sense_num}")

Step 4: Extract the Verb Class ID

There are two common interpretations of "verb class ID" depending on your use case. Here's how to get both:

Option 1: WordNet Lexical Domain (High-Level Semantic Class)

WordNet groups verbs into broad lexical domains (like "contact", "motion", or "change") that act as high-level verb classes. You can get this using the lexname() method of the Synset, and optionally map it to a numeric ID:

# Get the lexical domain name (verb class label)
verb_class_name = synset.lexname()

# Map lexical domains to numeric IDs (customize this mapping based on your needs)
lexname_to_id = {
    'v.contact': 1,
    'v.change': 2,
    'v.motion': 3,
    'v.perception': 4,
    'v.communication': 5
    # Add more entries from WordNet's full lexical domain list as needed
}

verb_class_id = lexname_to_id.get(verb_class_name, "Unknown")

print(f"WordNet Lexical Domain: {verb_class_name}")
print(f"Verb Class ID: {verb_class_id}")

For take.v.01, this will output:

WordNet Lexical Domain: v.contact
Verb Class ID: 1

Option 2: VerbNet Class ID (Fine-Grained Verb Classification)

If you need a more detailed verb class system, you can map the WordNet synset to VerbNet classes using NLTK's VerbNet integration. First, set up VerbNet:

# Install and download VerbNet
!pip install nltk-verbenet
nltk.download('verbnet')
from nltk.corpus import verbnet as vn

Then fetch the VerbNet class ID linked to your synset:

# Get all VerbNet classes associated with the synset
vn_classes = vn.classids_for_synset(synset)

# Grab the primary VerbNet class ID (first entry in the list)
if vn_classes:
    verbnet_class_id = vn_classes[0]
    print(f"VerbNet Class ID: {verbnet_class_id}")
else:
    print("No VerbNet class found for this synset.")

For take.v.01, this will output:

VerbNet Class ID: take-10.1


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:01:27