使用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'
答案 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]
或者只需确保令牌是字符串列表