TidfVectorizer - TypeError: TypeError: ожидаемая строка или байтовый объект

Я пытаюсь поместить объект TfidfVectorizer в список обзоров видеоигр, но по какой-то причине получаю сообщение об ошибке.

Вот мой код:

from sklearn.feature_extraction.text import TfidfVectorizer

tfidf_vectorizer = TfidfVectorizer(max_features = 50000, use_idf = True, ngram_range=(1,3),
                                   preprocessor = data_preprocessor.preprocess_tokenized_review)

print(train_set_x[0])
%time tfidf_matrix = tfidf_vectorizer.fit_transform(train_set_x)

И вот сообщение об ошибке:

I haven't gotten around to playing the campaign but the multiplayer is solid and pretty fun. Includes Zero Dark Thirty pack, an Online Pass, and the all powerful Battlefield 4 Beta access.

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<timed exec> in <module>()

~/anaconda3/lib/python3.6/site-packages/sklearn/feature_extraction/text.py in fit_transform(self, raw_documents, y)
   1379             Tf-idf-weighted document-term matrix.
   1380         """
-> 1381         X = super(TfidfVectorizer, self).fit_transform(raw_documents)
   1382         self._tfidf.fit(X)
   1383         # X is already a transformed view of raw_documents so

~/anaconda3/lib/python3.6/site-packages/sklearn/feature_extraction/text.py 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:

~/anaconda3/lib/python3.6/site-packages/sklearn/feature_extraction/text.py in _count_vocab(self, raw_documents, fixed_vocab)
    790         for doc in raw_documents:
    791             feature_counter = {}
--> 792             for feature in analyze(doc):
    793                 try:
    794                     feature_idx = vocabulary[feature]

~/anaconda3/lib/python3.6/site-packages/sklearn/feature_extraction/text.py in <lambda>(doc)
    264 
    265             return lambda doc: self._word_ngrams(
--> 266                 tokenize(preprocess(self.decode(doc))), stop_words)
    267 
    268         else:

~/anaconda3/lib/python3.6/site-packages/sklearn/feature_extraction/text.py in <lambda>(doc)
    239             return self.tokenizer
    240         token_pattern = re.compile(self.token_pattern)
--> 241         return lambda doc: token_pattern.findall(doc)
    242 
    243     def get_stop_words(self):

TypeError: expected string or bytes-like object

Обратите внимание, что первая часть вывода представляет собой один из обзоров из моего набора данных видеоигры. Если кто-нибудь знает, что происходит, я был бы признателен за помощь. Заранее спасибо!

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
757
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что эта проблема вызвана функцией data_preprocessor.preprocess_tokenized_review (которой вы не поделились).

Докажите (с использованием preprocessor=None по умолчанию):

In [19]: from sklearn.feature_extraction.text import TfidfVectorizer

In [20]: X = ["I haven't gotten around to playing the campaign but the multiplayer is solid and pretty fun. Includes Zero Dark Thirty pack, an Onlin
    ...: e Pass, and the all powerful Battlefield 4 Beta access."]

In [21]: tfidf_vectorizer = TfidfVectorizer(max_features=50000, use_idf=True, ngram_range=(1,3))

In [22]: r = tfidf_vectorizer.fit_transform(X)

In [25]: r
Out[25]:
<1x84 sparse matrix of type '<class 'numpy.float64'>'
        with 84 stored elements in Compressed Sparse Row format>

поэтому он работает нормально, когда мы не передаем никакого значения для параметра preprocessor.

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

Ćepa 11.06.2018 22:54

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