无法散列的类型:在csv文件中工作时的“列表”

时间:2019-06-05 08:32:11

标签: python-3.x list jupyter-notebook

使用NLTK中的stop_words函数时在处理csv文件时,为什么会出现错误以及如何解决该错误?

使用NLTK中的stop_words函数时在处理csv文件时,为什么会出现错误以及如何解决该错误?


from nltk.tokenize import word_tokenize
import os
import openpyxl
import pandas as pd
import numpy as np

narr=pd.read_csv('C:\\Users\\lenovo\\Desktop\\ narr.csv')
narr.head(5)
narr['Narration'].dropna(inplace=True)
tokens = narr['Narration'].apply(word_tokenize)

stop_words = set(stopwords.words('english'))
tokens = [w for w in tokens if not w in stop_words]
print(tokens)```



---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-32-078c03604087> in <module>
     13 
     14 stop_words = set(stopwords.words('english'))
---> 15 tokens = [w for w in tokens if not w in stop_words]
     16 print(tokens)

<ipython-input-32-078c03604087> in <listcomp>(.0)
     13 
     14 stop_words = set(stopwords.words('english'))
---> 15 tokens = [w for w in tokens if not w in stop_words]
     16 print(tokens)

TypeError: unhashable type: 'list'

1 个答案:

答案 0 :(得分:0)

令牌似乎是列表的列表,您不能检查列表是否在集合中,因为可变对象通常不可哈希。

您可以尝试一些解决方案

将其转换为元组,但是如果该元组不在stop_words中,则此操作将无效:

tokens = [w for w in tokens if not tuple(w) in stop_words]

或者,将令牌链接起来,但是如果令牌是包含字符串和其他列表的混合列表,则将无法正常工作

from itertools import chain
tokens = [w for w in chain.from_iterable(tokens) if not tuple(w) in stop_words]

或者只需确保令牌是字符串列表