【发布时间】:2020-09-03 17:14:02
【问题描述】:
所以我正在阅读一个 csv 文件并获取其中的单词。我正在尝试删除停用词。这是我的代码。
import pandas as pd
from nltk.corpus import stopwords as sw
def loadCsv(fileName):
df = pd.read_csv(fileName, error_bad_lines=False)
df.dropna(inplace = True)
return df
def getWords(dataframe):
words = []
for tweet in dataframe['SentimentText'].tolist():
for word in tweet.split():
word = word.lower()
words.append(word)
return set(words) #Create a set from the words list
def removeStopWords(words):
for word in words: # iterate over word_list
if word in sw.words('english'):
words.remove(word) # remove word from filtered_word_list if it is a stopword
return set(words)
df = loadCsv("train.csv")
words = getWords(df)
words = removeStopWords(words)
在这一行
if word in sw.words('english'):
我收到以下错误。
例外:没有描述
接下来,我将尝试删除标点符号,任何关于此的指针也会很棒。 任何帮助深表感谢。
编辑
def removeStopWords(words):
filtered_word_list = words #make a copy of the words
for word in words: # iterate over words
if word in sw.words('english'):
filtered_word_list.remove(word) # remove word from filtered_word_list if it is a stopword
return set(filtered_word_list)
【问题讨论】:
-
removeStopWords中存在问题,因为您正在修改您正在迭代的列表。不确定这是否是导致您的问题的原因,但您能否将该函数的主体替换为:return set([w for w in words if not w in sw.words('english')])? -
@sal 我只尝试了该行作为方法,但仍然遇到相同的错误。看到我将所有单词读入一个列表,然后想通过删除停用词来修改这个列表,这可能还是我做错了?
-
从您正在迭代的列表中删除项目是不行的(通常)。最好的方法是使用列表推导或其他方式从旧列表生成新列表。我很困惑,因为我尝试了一个简单的句子,它有效。
-
@sal 那么这真的很奇怪。由于您在帖子中的建议,我编辑了我的方法,但我仍然在 if 语句中遇到相同的错误。有什么我缺少的东西,比如导入什么的吗?
-
filtered_word_list = words不会复制:它们指向同一个列表,因此无法解决我指出的问题。所以你是说def removeStopWords(words): return set([w for w in words if not w in sw.words('english')])不能解决问题? (修复缩进)
标签: python python-3.x pandas nltk