如何在Python中获取单词的所有词形变体(时态/相关形式)
解决Python中获取单词语法变体/派生相关词的问题
你的核心需求是获取单词的语法屈折变体(如复数、动词时态)和同词根派生词,但之前基于WordNet的代码返回的是语义相关的同义词/近义词,并非目标结果。以下是精准实现的方案:
问题根源
你之前的代码调用wordnet.synsets(word).lemmas()得到的是语义同义词集里的词汇,比如summary的同义词包括sum-up、drumhead等,而非语法层面的词形变化或派生关联词(如summarize、summaries)。
解决方案:结合WordNet派生关系+Inflect屈折生成
我们需要两步:
- 用WordNet的
derivationally_related_forms()获取同词根的派生词(如名词summary派生出动词summarize) - 用
inflect库生成单词的各种语法屈折形式(如动词的现在分词、过去式,名词的复数)
实现代码
import nltk from nltk.corpus import wordnet import inflect # 首次运行需下载NLTK资源 nltk.download('wordnet') nltk.download('omw-1.4') def find_variations_of_word(word): inflect_engine = inflect.engine() variations = set() # 用集合去重 # 1. 添加名词复数形式(如果适用) plural_form = inflect_engine.plural(word) if plural_form != word: variations.add(plural_form) # 2. 遍历WordNet同义词集,获取派生相关词 for synset in wordnet.synsets(word): for lemma in synset.lemmas(): # 获取当前lemma的派生关联词形 for related_lemma in lemma.derivationally_related_forms(): related_word = related_lemma.name().replace("_", " ") variations.add(related_word) # 若派生词是动词,生成其屈折形式(现在分词、过去式、过去分词) for related_synset in wordnet.synsets(related_word): if related_synset.pos() == 'v': # 生成各种动词形式 present_participle = inflect_engine.conjugate(related_word, 'part') past_tense = inflect_engine.conjugate(related_word, 'past') past_participle = inflect_engine.conjugate(related_word, 'ppart') # 非原词的形式才加入 if present_participle != related_word: variations.add(present_participle) if past_tense != related_word: variations.add(past_tense) if past_participle != related_word: variations.add(past_participle) # 过滤原词,转成有序列表 return sorted([var for var in variations if var != word]) # 测试 word = "summary" print(find_variations_of_word(word)) # 输出: ['summaries', 'summarize', 'summarized', 'summarizing']
代码说明
inflect库:专门处理英语词形变化,能精准生成复数、动词各种时态形式- WordNet派生关系:
derivationally_related_forms()能找到同词根的跨词性派生词(如名词转动词) - 集合去重:避免重复添加相同变体
- 词性过滤:仅对动词生成屈折形式,避免无效处理
扩展调整
如果需要覆盖更多变体(如形容词的比较级/最高级),可以在代码中添加对应逻辑:
- 对形容词词性(
pos() == 'a'),用inflect_engine.compare()生成比较级/最高级
内容的提问来源于stack exchange,提问作者Zeke John
相关产品推荐
相关产品推荐

