我不明白为什么这段代码不起作用。当我点击运行时,它会显示"删除停用词后:无"。任何人都可以帮助解决问题吗?非常感谢。
stop_words = ["the", "of", "a", "to", "be", "from", "or"]
last = lower_words.split()
for i in stop_words:
lastone = last.remove(i)
print "\nAAfter stopwords removal:\n",lastone
答案 0 :(得分:1)
list.remove()
函数修改了列表并返回None
。
因此,当您执行last.remove(i)
时,它会从列表i
中删除第一次出现last
并返回None
,因此lastone
将永远是设为None
。
对于您要执行的操作,您可能希望删除stop_words
项中出现的所有项目,因此last.remove()
将不是最有效的方法。相反,我会使用列表理解来执行以下操作:
stop_words = set(["the", "of", "a", "to", "be", "from", "or"])
last = lower_words.split()
last = [word for word in last if word not in stop_words]
将stop_words
转换为集合是为了提高效率,但如果将其保留为列表,则会获得相同的行为。
为了完整起见,您需要使用remove()
:
stop_words = ["the", "of", "a", "to", "be", "from", "or"]
last = lower_words.split()
for word in stop_words:
try:
while True:
last.remove(word)
except ValueError:
pass
答案 1 :(得分:0)
这是一个接收文本并返回没有停用词的文本的函数。它通过忽略字典停用词中的每个单词来实现其目标。我为每个单词i使用.lower()函数,因为大多数stopwords包都是小写字母,但我们的文本可能不是。
def cut_stop_words(text,stopwords):
new_text= ''
for i in text.split():
if (i.lower()) in stopwords:
pass
else:
new_text= new_text.strip() + ' ' + i
return new_text