如何将NLTK词性标签转换为WordNet标签并解决解包报错问题
报错原因
你的代码多嵌套了一层不必要的循环,这是触发报错的核心原因:
tokens中的每个tokenlist是由若干(单词, NLTK词性标签)二元组组成的列表- 遍历
tokenlist得到的单个token本身就是二元组,直接拆包赋值即可,不需要额外再遍历token - 多余的
for (word, tag) in token会尝试遍历二元组内的字符串元素,把单个字符串拆分为单个字符赋值给两个变量,自然会触发「值过多无法解包(预期2个)」的错误
思路正确性说明
你通过 if/elif/else 映射NLTK标签到WordNet标签的思路完全正确,这是工程中常用的转换规则,不需要调整逻辑。
修正后可运行代码
from nltk.stem import WordNetLemmatizer # 你的tokens生成逻辑保持不变 tokens = tokens['tokens'].apply(lambda v: nltk.pos_tag(v)) lemmatizer = WordNetLemmatizer() # 可根据需求调整结果存储结构 lemma_results = [] for tokenlist in tokens: current_lemma = [] # 直接对token二元组拆包,删除多余的一层循环即可 for word, tag in tokenlist: if tag.startswith('J'): wn_tag = 'a' elif tag.startswith('V'): wn_tag = 'v' elif tag.startswith('R'): wn_tag = 'r' elif tag.startswith('N'): wn_tag = 'n' else: wn_tag = 'n' current_lemma.append(lemmatizer.lemmatize(word, pos=wn_tag)) lemma_results.append(current_lemma)
内容的提问来源于stack exchange,提问作者ben
相关产品推荐
相关产品推荐

