【问题标题】:Python NLTK - Preventing stop word removal from removing EVERY wordPython NLTK - 防止停用词删除删除每个单词
【发布时间】:2016-11-19 15:42:50
【问题描述】:

我正在处理非常短的字符串,其中一些是愚蠢的。假设,我可以有一个字符串“you an a”,如果我删除停用词,该字符串将是空白的。由于我在循环中进行分类,因此如果涉及空白字符串,它只会因错误而停止。我创建了以下代码来解决这个问题:

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

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

【问题讨论】:

  • 听起来移除停用词对您的语料库来说不是一个好主意...
  • 并非所有人都这样。我不确定这是否是个好主意,但我会测试一下。

标签: python nltk


【解决方案1】:

最简单的解决方案是检查过滤结果,必要时恢复完整的单词列表。然后,您的其余代码可以使用单个变量而无需检查。

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

【讨论】:

    【解决方案2】:

    你可以改写为:

    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 不为空(例如 - 有一个或一个或多个长度),或者如果它是空的,则将采用 filtered,然后继续拆分原始文件,如果它是空的,则默认为一个带有空字符串的元素列表。您可以使用[0] 来获取第一个元素(第一个非停用词、字符串的第一个词或空字符串)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-08
      • 2013-05-12
      • 1970-01-01
      • 2016-11-11
      • 2015-01-20
      • 2011-07-26
      • 2016-01-19
      • 2019-01-03
      相关资源
      最近更新 更多