Вы сказали, что хорошо знаете, что происходит, но не так ли? wordVec
это не список строк, это список списков строк.
Поэтому, когда вы говорите: for w in wordVec:
w
это не слово, это список слова. Это означает, что если вы скажете:
if w not in stopWords:
Вы спрашиваете, есть ли в списке текущий список слов. Вы не можете помещать списки в наборы, потому что они изменчивы и не могут быть хэшированы, поэтому возникает ошибка.
Я предполагаю, что вы действительно хотели сделать, это перебрать списки слов, а затем перебрать над словами в текущем списке.
import nltk
from nltk.corpus import stopwords
tweets = [
"Who here likes cheese? I myself like cheese.",
"Do you have cheese? Do they have cheese?"
]
tokenized_tweets = [nltk.word_tokenize(tweet) for tweet in tweets]
stop_words = set(stopwords.words("english"))
filtered_tweets = []
for tokenized_tweet in tokenized_tweets:
filtered_tweets.append(" ".join(word for word in tokenized_tweet if word.casefold() not in stop_words))
print(filtered_tweets)
Вывод:
['likes cheese ? like cheese .', 'cheese ? cheese ?']
Я просто произвольно решил присоединиться к списку отфильтрованных слов перед добавлением их в список filtered_tweets
- как Вы можете видеть, что это приводит к тому, что знаки препинания разделяются пробелами, что может быть нежелательно. В любом случае вам не нужно объединять слова обратно в строку, вы можете просто добавить сам список.