我正在使用非常短的单词串,其中一些是愚蠢的。假设我可以有一串“你是一个”,如果我删除了停用词,那么该字符串就是空白。由于我在循环中进行分类,如果它出现在空白字符串中,它就会因错误而停止。我已经创建了以下代码来解决这个问题:
def title_features(words):
filter_words = [word for word in words.split() if word not in stopwords.words('english')]
features={}
if len(filter_words) >= 1:
features['First word'] = ''.join(filter_words[0])
else:
features['First word'] = ''.join(words.split()[0])
return features
这确保我没有错误,但我想知道是否有更有效的方法来做到这一点。或者一种方法,如果它们都是停用词,它将不会删除所有单词。
答案 0 :(得分:2)
最简单的解决方案是检查过滤结果,并在必要时恢复完整的单词列表。然后,其余代码可以使用单个变量而不进行检查。
def title_features(words):
filter_words = [word for word in words.split() if word not in stopwords.words('english')]
if not filter_words: # Use full list if necessary
filter_words = words
features={}
features['First word'] = filter_words[0]
features[...] = ...
return features
答案 1 :(得分:1)
您可以重写为:
catch
如果def title_features(words):
filtered = [word for word in words.split() if word not in stopwords.words('english')]
return {'First word': (filtered or words.split(None, 1) or [''])[0]}
不为空(例如 - 有一个长度或一个或多个),或者如果它是空的,那么将继续分割原始,如果是空的默认值为带有空字符串的单元素列表。您可以使用filtered
中的任何一个选择第一个元素(第一个不停止的单词,字符串的第一个单词或空字符串)。