Python NLTK - 防止删除单词删除每个单词

时间:2016-11-18 18:21:04

标签: python nltk

我正在使用非常短的单词串,其中一些是愚蠢的。假设我可以有一串“你是一个”,如果我删除了停用词,那么该字符串就是空白。由于我在循环中进行分类,如果它出现在空白字符串中,它就会因错误而停止。我已经创建了以下代码来解决这个问题:

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

这确保我没有错误,但我想知道是否有更有效的方法来做到这一点。或者一种方法,如果它们都是停用词,它将不会删除所有单词。

2 个答案:

答案 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中的任何一个选择第一个元素(第一个不停止的单词,字符串的第一个单词或空字符串)。