Почему я получаю список объектов не вызываемой ошибкой на Python? - PullRequest
1 голос
/ 27 сентября 2019

Я работаю над этим набором данных [https://archive.ics.uci.edu/ml/datasets/Reuter_50_50] и пытаюсь проанализировать функции текста.

Я читаю файлы и сохраняю их в переменной документов следующим образом:

documents=author_labels(raw_data_dir)
documents.to_csv(documents_filename,index_label="document_id")
documents=pd.read_csv(documents_filename,index_col="document_id")
documents.head()

Впоследствии я пытаюсь сгенерировать векторы tf-idf с использованием сублинейного роста и сохранить его в переменной под названием vectorizer.

vectorizer = TfidfVectorizer(input="filename",tokenizer=tokenizer,stop_words=stopwords_C50)

Затем я пытаюсь сгенерировать матрицу X из tfidf представленийдля каждого документа в корпусе, используя:

X = vectorizer.fit_transform(documents["filename"])

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

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-152-8c01204baf0e> in <module>
----> 1 X = vectorizer.fit_transform(documents["filename"])

~\Anaconda3\lib\site-packages\sklearn\feature_extraction\text.py in fit_transform(self, raw_documents, y)
   1611         """
   1612         self._check_params()
-> 1613         X = super(TfidfVectorizer, self).fit_transform(raw_documents)
   1614         self._tfidf.fit(X)
   1615         # X is already a transformed view of raw_documents so

~\Anaconda3\lib\site-packages\sklearn\feature_extraction\text.py in fit_transform(self, raw_documents, y)
   1029 
   1030         vocabulary, X = self._count_vocab(raw_documents,
-> 1031                                           self.fixed_vocabulary_)
   1032 
   1033         if self.binary:

~\Anaconda3\lib\site-packages\sklearn\feature_extraction\text.py in _count_vocab(self, raw_documents, fixed_vocab)
    941         for doc in raw_documents:
    942             feature_counter = {}
--> 943             for feature in analyze(doc):
    944                 try:
    945                     feature_idx = vocabulary[feature]

~\Anaconda3\lib\site-packages\sklearn\feature_extraction\text.py in <lambda>(doc)
    327                                                tokenize)
    328             return lambda doc: self._word_ngrams(
--> 329                 tokenize(preprocess(self.decode(doc))), stop_words)
    330 
    331         else:

TypeError: 'list' object is not callable

Как мне решить эту проблему?

1 Ответ

0 голосов
/ 28 сентября 2019

Хорошо, я разобрался с ответом на свою проблему.

Если я уроню все параметры в vectorizer, например:

vectorizer = TfidfVectorizer()

Код работает очень хорошо.Затем я добавил входной параметр обратно, и он все еще работал нормально.

vectorizer = TfidfVectorizer(input="filename")

То же самое, если я добавляю стоп-слова обратно:

vectorizer = TfidfVectorizer(input="filename",stop_words=stopwords_C50)

Однако, когда я передаю токенизатор, онвыдает ошибку.

Как оказалось, аргумент, который я передавал vectorizer, представлял собой список токенов, когда это должна была быть другая функция.

Я определилФункция stem_tokenizer выглядит следующим образом:

def stem_tokenizer(text):
    return [porter_stemmer.stem(token) for token in word_tokenize(text.lower())]

И передал это vectorizer:

vectorizer = TfidfVectorizer(input="filename",tokenizer = stem_tokenizer, stop_words=stopwords_C50)

Это решило проблему для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...