使用python3从列表中删除停用词

时间:2016-05-26 21:03:10

标签: python python-3.x nltk stop-words

我一直试图从使用python代码读取的csv文件中删除停用词,但我的代码似乎不起作用。我尝试在代码中使用示例文本来验证我的代码,但它仍然是相同的。以下是我的代码,如果有人可以帮我纠正这个问题,我将不胜感激。这里是下面的代码

import nltk
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
import csv

article = ['The computer code has a little bug' ,
      'im learning python' ,
           'thanks for helping me' ,
            'this is trouble' ,
          'this is a sample sentence'
            'cat in the hat']

tokenized_models = [word_tokenize(str(i)) for i in article]
stopset = set(stopwords.words('english'))
stop_models = [i for i in tokenized_models if str(i).lower() not in stopset]
print('token:'+str(stop_models))

2 个答案:

答案 0 :(得分:3)

您的tokenized_models是一个标记化句子列表,因此列出了列表。因此,以下行尝试将单词列表与停用词匹配:

stop_models = [i for i in tokenized_models if str(i).lower() not in stopset]

相反,再次通过单词迭代。类似的东西:

clean_models = []
for m in tokenized_models:
    stop_m = [i for i in m if str(i).lower() not in stopset]
    clean_models.append(stop_m)

print(clean_models)

偏离主题的有用提示:
要定义多行字符串,请使用括号而不使用逗号:

article = ('The computer code has a little bug'
           'im learning python'
           'thanks for helping me'
           'this is trouble'
           'this is a sample sentence'
           'cat in the hat')

此版本适用于原始代码

答案 1 :(得分:0)

word_tokenize(str(i))会返回单词列表,因此tokenized_models是一个列表列表。您需要将该列表展平,或者更好,只需将article设为一个字符串,因为我不知道为什么它现在是一个列表。

这是因为in运算符不会同时搜索列表,然后搜索该列表中的字符串,例如:

>>> 'a' in 'abc'
True
>>> 'a' in ['abc']
False