我正在尝试使用.join
功能从用户输入字符串中删除停用词。它看起来像这样:
while True:
line = raw_input()
if line.strip() == stopword:
break
remove_stopwords = ''.join(word for word in line.split() if word not in stop_words)
我在顶部的列表中定义了stop_words
。问题是当我输入要删除的停用词的字符串时,它只会删除第一个单词而剩下的就剩下了。任何帮助都会很棒。我是新手,所以这可能是愚蠢的。
答案 0 :(得分:4)
以下是使用filter
函数的单行内容:
" ".join(filter(lambda word: word not in stop_words, line.split()))
此外,请考虑将停用词存储在set
而不是list
中。搜索操作(in
)的平均算法复杂度对于set
是恒定的而对于list
是线性的。
编辑:您的程序似乎按预期工作,并为join
字符串增加了空间。这是有道理的,因为(x for x in y if f(x))
大致相当于filter
:
stop_words = set(["hi", "bye"])
stopword = "DONE"
while True:
line = raw_input()
if line.strip() == stopword:
break
print(" ".join(word for word in line.split() if word not in stop_words))
输入:
hello hi my name is bye justin
输出:
hello my name is justin
您的错误必须在程序的其他位置。你还在做什么?