
本文介绍如何利用 get_word_forms 工具批量还原词干(stem)为全部语法变体(如名词、动词、形容词等形态),并合并去重后生成扁平化的唯一词汇列表,适用于词汇扩展、文本增强或语义分析场景。
本文介绍如何利用 `get_word_forms` 工具批量还原词干(stem)为全部语法变体(如名词、动词、形容词等形态),并合并去重后生成扁平化的唯一词汇列表,适用于词汇扩展、文本增强或语义分析场景。
在自然语言处理中,“反向词干化”(reverse stemming)指从一个词干(如 'command')出发,系统性地枚举其所有常见屈折与派生形式(如 'commands', 'commanded', 'commander', 'commandment' 等)。这不同于传统词干化(将单词归一为词干),而是进行词汇生成式扩展,对构建同义词表、增强训练数据、提升检索召回率等任务极具价值。
实现该目标的核心依赖是社区开源包 get_word_forms(由 Divyanshu Srivastava 开发),它基于 NLTK 和 WordNet 构建,可按词性('n' 名词、'v' 动词、'a' 形容词、'r' 副词)返回各形态集合。但需注意:该函数对输入敏感——若原始词带空格(如 ' jail'),会因无法匹配词典条目而返回全空集合(即 {'n': set(), 'v': set(), ...}),这是用户实际遇到“无输出”的根本原因。
以下为完整、健壮的实现方案:
from get_word_forms import get_word_forms
my_list = [' jail', ' belief', ' board', ' target', ' challenge', ' command']
# 步骤1:逐词 strip() 去空格,调用 get_word_forms,并仅保留非空词性集合
all_word_sets = [
word_set
for word in my_list
for word_set in get_word_forms(word.strip()).values()
if word_set # 过滤空集合
]
# 步骤2:展平嵌套结构(list of sets → list of words)
all_words = [word for word_set in all_word_sets for word in word_set]
# 步骤3:去重 + 排序(可选,便于阅读和调试)
unique_words = sorted(set(all_words))
print(f"共生成 {len(unique_words)} 个唯一词汇:")
print(unique_words)✅ 关键要点说明:
SkillSub Pro - Python 题解与代码注释双功能技能功能概述SkillSub Pro - Python 题解与代码注释双功能技能是一项面向实际任务的技能,主要用于SkillSub Pro 是一个 Python 题解生成与代码注释的 双功能合体技能 ,专为学生、算法学习者和开发者设计;✅ 一个技能,两种用途 :;核心要点📝 题解模式 :输入题目/题号,自动生成完整 Python 题解(含详细注释、解题思路、复杂度分析);💬 注释模式 :输入 Python 代码,自动添加详细中。它将相关步骤、
立即学习“Python免费学习笔记(深入)”;
-
务必预处理空格:
word.strip()是成功调用的前提,否则get_word_forms将静默失败; -
避免直接展开字典:不要用
get_word_forms(word).items()或手动索引['n'],应统一遍历.values()并过滤空集,确保覆盖所有有效词形; -
去重不可省略:同一词可能在多个词性中重复出现(如
'commands'同时属于名词和动词),set()保证唯一性; - 性能提示:对 200 个词的列表,该方法可在秒级完成(底层调用已缓存 WordNet 查询),无需额外优化。
⚠️ 注意事项:
-
get_word_forms依赖nltk和wordnet数据。首次运行需执行:import nltk nltk.download('wordnet') - 该工具覆盖主流英语构词规则,但不保证 100% 完整(例如罕见派生词或新造词可能缺失);
- 若需控制词性范围(如只取动词变体),可改用
get_word_forms(word)['v']显式提取,但本例目标是全词性聚合,故采用通用解法。
最终输出为一个排序后的去重列表,例如包含 'jail', 'jailed', 'jailer', 'jailing', 'jails' 等全部合理变体,真正实现“一词触发,全族召回”的反向词干化效果。

















