2016-11-18 98 views
0

我正在处理非常短的词串,其中一些是愚蠢的。假设,我可以有一串“你是一个”,如果我删除了停用词,该字符串将是空白的。由于我在循环中进行分类,因此如果出现空白字符串,它会停止并显示错误。我创建了下面的代码来解决这个问题: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 

这可以确保我没有错误,但我不知道是否有更有效的方式来做到这一点。或者一种方式去做它不会摆脱所有单词的地方,如果它们都是停用词。

+0

这听起来像停止词删除不是你的语料库的好主意...... –

+0

不是所有的人都是这样的。 我不确定这是不是一个好主意,但我要测试一下。 –

回答

1

你可以为重新写:

​​

将于filtered,如果它不是空的(例如: - 具有的长度或一个或多个),或者是空的情况下,再进行拆分原始的,如果它是空的,则默认为空字符串的一个元素列表。你比第一个使用[0]的元素(无论是第一个不停止的单词,字符串的第一个单词还是一个空字符串)都要使用[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