Проблемы с реализацией стоп-слов в nltk

После импорта стоп-слов из корпуса я загрузил все файлы из 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)

Вывод []


person olivia13    schedule 24.09.2017    source источник
comment
Попробуйте: stop_words = set(stopwords.words('english'))   -  person cs95    schedule 24.09.2017
comment
Я пробовал это, но он всегда выдает TypeError: unhashable type: 'list', в этой строке - если я в stop_words: под final_pos_words   -  person olivia13    schedule 24.09.2017
comment
Ваша ошибка здесь: pos_words.append(word_tokenize(i)). Метод word_tokenize() возвращает список (возможно, из одного слова), поэтому pos_words содержит списки, а не слова.   -  person alexis    schedule 24.09.2017


Ответы (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)

Я пробовал это и работает для меня без ошибок, попробуйте и дайте мне знать о результате.

person Nima    schedule 24.09.2017
comment
Выдает ошибку: Unhashable type: 'list' at ----> 1, если я не в стоп_словах: И после того, как я изменил стоп_слова на список, нет никаких изменений или фильтрации - person olivia13; 24.09.2017
comment
Или попробуйте это: final_pos_words = [w вместо w в pos_words, если не w в стоп-словах] - person Nima; 24.09.2017
comment
Нет, опять же, фильтрация не работает, это становится очень неприятно... - person olivia13; 24.09.2017
comment
Наконец-то это работает, большое спасибо, у вас также есть идеи, как удалить запятые, вопросительные знаки и цифры .... - person olivia13; 24.09.2017
comment
U W, Думаю, вы можете использовать Regex (re) для этой цели. Или просто определить другой набор для cammas, qms, чисел и использовать другой цикл для их фильтрации. - person Nima; 24.09.2017