2017-09-04 3 views
0

plus bas que je suis en train de courir et instancier CountVectorizer() sur NLTK Film Critiques corpus, en utilisant le code suivant:CountVectorizer(): StreamBackedCorpusView » objet n'a pas d'attribut « »

>>>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) 

Je reçois l'erreur suivante :

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) a tokenizés phrases .... telles que:

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

Quelqu'un peut-il s'il vous plaît dites-moi ce que je fais mal? Je suppose que je suis en train de miising quelques tstep dans la création de la liste des critiques de films (rev_list).

TIA

+0

Vous devriez vérifier le type 'nltk.corpus.movie_reviews.words (rev_pos)' que vous apposent à la liste. Ce devrait être une chaîne à traiter par CountVectorizer, ce que je ne pense pas qu'il est actuellement. –

Répondre

1

Il semble que votre fonction .words() ne fait que vous redonnant une liste de jetons, mais plutôt une série de classes StreamBackedCorpusView. Cette classe vous permet de récupérer les jetons mais n'est pas réellement une représentation complète des jetons lui-même.

Vous pouvez cependant récupérer les jetons de la vue. Voir le lien ci-dessous pour plus de détails sur l'utilisation de StreamBackCorpusView.

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