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