【问题标题】:Trouble implementing stopwords in nltk在 nltk 中实现停用词时遇到问题
【发布时间】:2017-09-24 12:51:37
【问题描述】:

从语料库导入停用词后,我从 nltk.download() 下载了所有文件,然后

#reading from a .txt file

list = []
with open("positive.txt", "r") as file:
        for words in file:
            words = words.strip()
            list.append(words)

#tokenizing words

pos_words = []
for i in list:
    pos_words.append(word_tokenize(i))

stop_words = [stopwords.words('english')]
print(stop_words)

final_pos_words = []
for i in pos_words:
    if i not in stop_words:
        final_pos_words.append(i)
print(final_pos_words)

但这并没有删除任何内容 运行后:

final_pos_words = []
for i in pos_words:
    if i in stop_words:
        final_pos_words.append(i)
print(final_pos_words)

输出是[]

【问题讨论】:

  • 试试:stop_words = set(stopwords.words('english'))
  • 我试过了,但它总是给出 TypeError: unhashable type: 'list', at this line- if i in stop_words: under final_pos_words
  • 您的错误在这里:pos_words.append(word_tokenize(i))word_tokenize() 方法返回一个列表(可能是一个单词),所以 pos_words 包含列表,而不是单词。

标签: python nltk stop-words


【解决方案1】:

也许改成:

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

#Read the file
f = open('positive.txt').read()

#Tokenizing the words 
words = word_tokenize(f)

#set of predifined english stop words
stop_words = set(stopwords.words('english'))

#Filter stop words
filtered = [w for w in words if not w in stop_words]
print(filtered)

我已经尝试过这个并且对我有用,没有错误,尝试一下,让我知道结果。

【讨论】:

  • 或者试试这个:final_pos_words = [w for w in pos_words if not w in stop_words]
  • 不,再次,不进行过滤,这变得非常令人沮丧......
  • 终于成功了,非常感谢你,你也知道如何删除逗号、问号和数字......
  • U W ,猜猜你可以使用 Regex (re) 来达到这个目的。或者只是为 cammas 、 qms 、 numbers 定义另一个集合并使用另一个循环来过滤它们。
猜你喜欢
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-14
相关资源
最近更新 更多