У меня есть список, содержащий списки со всеми разделенными словами обзора, который выглядит следующим образом:

texts = [['fine','for','a','night'],['it','was','good']]

Я хочу удалить все стоп-слова, используя пакет nltk.corpus, и вернуть все слова без стоп-слов обратно в список. Конечные результаты должны быть списком, состоящим из списков слов без стоп-слов. Это я попробовал:

import nltk
nltk.download() # to download stopwords corpus
from nltk.corpus import stopwords
stopwords=stopwords.words('english')
words_reviews=[]

for review in texts:
    wr=[]
    for word in review:
        if word not in stopwords:
            wr.append(word)
        words_reviews.append(wr)

Этот код на самом деле работал, но теперь я получаю ошибку: AttributeError: объект «список» не имеет атрибута «слова», ссылаясь на стоп-слова. Я убедился, что я установил все пакеты. В чем может быть проблема?

0
Lisadk 31 Мар 2017 в 12:25

2 ответа

Лучший ответ

Проблема в том, что вы переопределяете stopwords в своем коде:

from nltk.corpus import stopwords
stopwords=stopwords.words('english')

После первой строки stopwords - читатель корпуса с методом words(). После второй строки это список. Действуйте соответственно.

На самом деле поиск в списке происходит очень медленно, поэтому вы получите гораздо лучшую производительность, если будете использовать это:

stopwords = set(stopwords.words('english'))
3
alexis 31 Мар 2017 в 13:55

Вместо

[word for word in text_tokens if not word in stopwords.words()]

Использование

[word for word in text_tokens if not word in all_stopwords]

After stopwords.word('english') the type of the file changes and therefore none of the previous attributes will work

0
Niranjan Mangotri 27 Май 2020 в 17:35