CountVectorizer(): у объекта StreamBackedCorpusView нет атрибута "нижний"

Я пытаюсь запустить и создать экземпляр CountVectorizer() в корпусе обзоров фильмов NLTK, используя следующий код:

>>>import nltk
>>>import nltk.corpus
>>>from sklearn.feature_extraction.text import CountVectorizer
>>>from nltk.corpus import movie_reviews
>>>neg_rev = movie_reviews.fileids('neg')
>>>pos_rev = movie_reviews.fileids('pos')
>>>rev_list = [] # Empty List
>>>for rev in neg_rev:
    rev_list.append(nltk.corpus.movie_reviews.words(rev))
>>>for rev_pos in pos_rev:
    rev_list.append(nltk.corpus.movie_reviews.words(rev_pos))
>>>count_vect = CountVectorizer()
>>>X_count_vect = count_vect.fit_transform(rev_list)

Я получаю следующую ошибку:

AttributeError                            Traceback (most recent call last)
<ipython-input-37-00e9047daa67> in <module>()
----> 1 X_count_vect = count_vect.fit_transform(rev_list)

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\feature_extraction\text.py in fit_transform(self, raw_documents, y)
    837 
    838         vocabulary, X = self._count_vocab(raw_documents,
--> 839                                           self.fixed_vocabulary_)
    840 
    841         if self.binary:

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\feature_extraction\text.py in _count_vocab(self, raw_documents, fixed_vocab)
    760         for doc in raw_documents:
    761             feature_counter = {}
--> 762             for feature in analyze(doc):
    763                 try:
    764                     feature_idx = vocabulary[feature]

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\feature_extraction\text.py in <lambda>(doc)
    239 
    240             return lambda doc: self._word_ngrams(
--> 241                 tokenize(preprocess(self.decode(doc))), stop_words)
    242 
    243         else:

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\feature_extraction\text.py in <lambda>(x)
    205 
    206         if self.lowercase:
--> 207             return lambda x: strip_accents(x.lower())
    208         else:
    209             return strip_accents

AttributeError: 'StreamBackedCorpusView' object has no attribute 'lower'

nltk.corpus.movie_reviews.words(rev_pos) имеет токенизированные предложения.... такие как:

['films', 'adapted', 'from', 'comic', 'books', 'have', ...]

Может кто-нибудь сказать, пожалуйста, что я делаю не так? Я полагаю, что я использую некоторые tstep в создании списка (rev_list) обзоров фильмов.

ТИА

1 ответ

Похоже, что ваша функция.words() на самом деле не возвращает вам список токенов, а представляет собой серию классов StreamBackedCorpusView. Этот класс позволяет вам получить токены, но на самом деле не является полным представлением самих токенов.

Однако вы можете получить токены из представления. Смотрите ниже ссылку для более подробной информации о работе с StreamBackCorpusView.

http://nltk.sourceforge.net/corpusview/corpusview.StreamBackedCorpusView-class.html

Другие вопросы по тегам