NLTK中出现TypeError: unhashable type: 'list'错误求助
解决词形还原时的“unhashable type: 'list'”错误
问题根源
你代码里的words列表存的是整个分词后的列表,不是单个单词:
- 循环中用了
words.append(word_list),把nltk.word_tokenize()返回的列表直接作为元素加入words,导致words的每个元素都是列表类型 lemmatizer.lemmatize()要求传入单个字符串单词,传列表必然触发错误;后续set(words)也会因为列表是不可哈希类型报错
修复步骤
1. 修正单词列表的填充方式
把append换成extend,逐个添加分词后的单词,而不是添加整个列表:
from nltk.corpus.reader import wordlist import nltk from nltk.stem import WordNetLemmatizer lemmatizer = WordNetLemmatizer() words = [] classes = [] documents = [] ignore = ['?', '!', ',', '.'] for intent in intents['intents']: for pattern in intent['patterns']: word_list = nltk.word_tokenize(pattern) words.extend(word_list) # 逐个添加单词到words documents.append((word_list, intent['tag'])) if intent['tag'] not in classes: classes.append(intent['tag'])
2. 修正词形还原逻辑
过滤标点后执行词形还原,建议统一转小写避免重复:
# 过滤标点、转小写、词形还原 words = [lemmatizer.lemmatize(word.lower()) for word in words if word not in ignore] # 去重并排序 words = sorted(set(words))
额外说明
word.lower()是为了消除大小写差异,比如"Hi"和"hi"会被处理成同一个词- 现在
words里的元素都是字符串类型,完全符合词形还原和集合去重的要求
内容的提问来源于stack exchange,提问作者Nnstein
相关产品推荐
相关产品推荐

