Python运行nltk代码报ValueError: too many values to unpack (expected 2)如何解决
错误触发原因
- 直接触发原因:过滤无停用词二元组的列表推导式中,遍历对象写错了。你要遍历的是已经生成的二元组列表
tokenizedwordsbigrams,但实际写的是单个分词组成的列表tokenizedwords,单个字符串没法拆成n1、n2两个变量,所以抛出解包失败错误。 - 隐性问题:
nltk.Text类没有collection_list()方法,当前错误修复后会触发新的属性错误,是方法名拼写错误导致。
修复方案
仅需要修改performBigramsAndCollocations函数内的2行代码即可:
- 将列表推导的遍历对象替换为二元组列表
- 将拼写错误的
collection_list修正为collocation_list(nltk 3.7+版本支持,作用是返回文本中的搭配列表)
修复后的函数代码:
def performBigramsAndCollocations(textcontent, word): tokenizedwords = regexp_tokenize(textcontent, "[\w]+") tokenizedwords = [x.lower() for x in tokenizedwords if x != ''] tokenizedwordsbigrams = list(nltk.bigrams(tokenizedwords)) stop_words = stopwords.words('english') lc_stop_words = [word.lower() for word in stop_words] # 修复点1:遍历对象改为二元组列表tokenizedwordsbigrams tokenizednonstopwordsbigrams = [(n1,n2) for n1, n2 in tokenizedwordsbigrams if n1 not in lc_stop_words and n2 not in lc_stop_words] cfd_bigrams = ConditionalFreqDist(tokenizednonstopwordsbigrams) mostfrequentwordafter = cfd_bigrams[word].most_common(3) words = Text(tokenizedwords) # 修复点2:修正方法名拼写错误 collocationwords = words.collocation_list() return mostfrequentwordafter, collocationwords
内容的提问来源于stack exchange,提问作者Pratik Patil
相关产品推荐
相关产品推荐

