Склеарн векторизация документа по предложениям для классификации - PullRequest
0 голосов
/ 27 июня 2018
temp = []
for i in chunks:
    vectorizer2 = CountVectorizer()
    vectorizer2.fit_transform(i).todense()
    temp.append(vectorizer2)
    print(vectorizer2.vocabulary_)

x = [LinearSVC_classifier.classify(y) for y in temp ]

У меня есть документ, который я пытаюсь оформить в правильном формате, чтобы использовать мои классификаторы. Я разбил документ на отдельные списки. Таким образом, данные выглядят так:

chunks = [[ 'sentence1'] , ['sentence2'], ['sentences']] 

Функция, которую я написал, частично возвращает меня туда, но затем я получаю эту ошибку. ValueError: пустой словарь; возможно, документы содержат только стоп-слова но также получаю это ...

{u'and': 4, u'www': 53, u'is': 25, u'some': 44, u'commitment': 10} 

Если я запускаю каждое предложение вручную и индивидуально, каждое из них работает с 0 ошибками, и классификатор работает. Я надеюсь, что мои результаты в конце будут выглядеть так.

['sentence1', 'no'] , ['senence2', 'yes'] 

или, в любом случае, я вижу, что классификация каждого предложения работает честно. Я просто не уверен, где лежит ошибка и можно ли ее исправить или мне нужен новый подход. Любая помощь будет принята с благодарностью.

ValueError                                Traceback (most recent call last)
<ipython-input-608-c2fb95ef6621> in <module>()
  4 for i in chunks:
  5     print (i)
----> 6     vectorizer2.fit_transform(i).todense()
  7     temp.append(vectorizer2)
  8     print(vectorizer2.vocabulary_)

C:\Program Files\Anaconda2\lib\site- 
packages\sklearn\feature_extraction\text.pyc in fit_transform(self, 
raw_documents, y)
867 
868         vocabulary, X = self._count_vocab(raw_documents,
--> 869                                           self.fixed_vocabulary_)
870 
871         if self.binary:

C:\Program Files\Anaconda2\lib\site- 
packages\sklearn\feature_extraction\text.pyc in _count_vocab(self, 
raw_documents, fixed_vocab)
809             vocabulary = dict(vocabulary)
810             if not vocabulary:
--> 811                 raise ValueError("empty vocabulary; perhaps the 
documents only"
812                                  " contain stop words")
813 

ValueError: empty vocabulary; perhaps the documents only contain stop words

1 Ответ

0 голосов
/ 27 июня 2018

Просто поместите инициализацию вне цикла, как это, иначе она будет переинициализирована снова и снова для каждого предложения отдельно, что неверно.

temp = []
vectorizer2 = CountVectorizer()   #<--- This needs to be initialized only once
for i in chunks:

    vectorizer2.fit_transform(i).todense()
    temp.append(vectorizer2)
    print(vectorizer2.vocabulary_)

x = [LinearSVC_classifier.classify(y) for y in temp ]
...