AttributeError: у объекта 'NoneType' нет атрибута 'нижнего' питона, использующего spacy - PullRequest
0 голосов
/ 21 сентября 2018

Вот полное сообщение об ошибке:

AttributeErrorTraceback (последний последний вызов) в () 24 25 # train ---> 26 pipe.fit (train1, labelTrain1) 27 28 # test

C: \ Users \ mcichonski \ AppData \ Local \ Continuum \ anaconda3 \ envs \ py27 \ lib \ site-packages \ sklearn \ pipeline.pyc в соответствии (self, X, y, ** fit_params) 246Эта оценка 247 "" "-> 248 Xt, fit_params = self._fit (X, y, ** fit_params) 249, если self._final_estimator не равен None: 250 self._final_estimator.fit (Xt, y, ** fit_params)

C: \ Users \ mcichonski \ AppData \ Local \ Continuum \ anaconda3 \ envs \ py27 \ lib \ site-packages \ sklearn \ pipeline.pyc в _fit (self, X, y, ** fit_params) 211Xt, fit_transformer = fit_transform_one_cached (212 cloned_transformer, None, Xt, y, -> 213 ** fit_params_steps [name]) 214 # Замените преобразователь шага на встроенный преобразователь 215 #. Это необходимо при загрузке трансформатора

C: \ Users \ mcichonski \ AppData \ Local \ Continuum \ anaconda3 \ envs \ py27 \ lib \ site-packages \ sklearn\ externals \ joblib \ memory.pyc в вызов (self, * args, ** kwargs) 360 361 def вызов (self, * args, ** kwargs): ->362 return self.func (* args, ** kwargs) 363 364 def call_and_shelve (self, * args, ** kwargs):

C: \ Users \ mcichonski \ AppData \ Local \ Continuum \ anaconda3 \ envs\ py27 \ lib \ site-packages \ sklearn \ pipeline.pyc в _fit_transform_one (преобразователь, вес, X, y, ** fit_params) 579 ** fit_params): 580, если hasattr (преобразователь, 'fit_transform'): -> 581res = transformer.fit_transform (X, y, ** fit_params) 582 остальное: 583 res = transformer.fit (X, y, ** fit_params) .transform (X)

C: \ Users \ mcichonski \AppData \ Local \ Continuum \ anaconda3 \ envs \ py27 \ lib \ site-packages \ sklearn \ feature_extraction \ text.pyc в словаре fit_transform (self, raw_documents, y) 867 868 словарь, X = self._count_vocab (raw_documents, -> 869)self.fixed_vocabulary_) 870 871, если self.binary:

C: \ Users \ mcichonski \ AppData \ Local \ Continuum \ anaconda3 \ envs \ py27 \ lib \ site-packages \ sklearn \ feature_extraction \ text.pyc в _count_vocab (self, raw_documents, fixed_vocab) 790 для документа в raw_documents: 791 feature_counter = {} -> 792 для объекта в анализе (документ): 793 try: 794 feature_idx = словарь [функция]

C: \ Users \ mcichonski \ AppData \ Local \ Continuum \ anaconda3 \ envs \ py27 \ lib \ site-packages \ sklearn \ feature_extraction \ text.pyc in (doc) 264 265 вернуть лямбда-документ: self._word_ngrams (-> 266tokenize (preprocess (self.decode (doc))), stop_words) 267 268 else:

C: \ Users \ mcichonski \ AppData \ Local \ Continuum \ anaconda3 \ envs \ py27 \ lib \ site-packages \sklearn \ feature_extraction \ text.pyc in (x) 230 231, если self.lowercase: -> 232, возврат лямбда x: strip_accents (x.lower ()) 233, еще: 234, возврат strip_accents

AttributeError: 'NoneType'object не имеет атрибута' lower '

Вот код:

def printNMostInformative(vectorizer, clf, N):
    feature_names = vectorizer.get_feature_names()
    coefs_with_fns = sorted(zip(clf.coef_[0], feature_names))
    topClass1 = coefs_with_fns[:N]
    topClass2 = coefs_with_fns[:-(N + 1):-1]
    print("Class 1 best: ")
    for feat in topClass1:
        print(feat)
    print("Class 2 best: ")
    for feat in topClass2:
        print(feat)

vectorizer = CountVectorizer(tokenizer=tokenizeText, ngram_range=(1,1))
clf = LinearSVC()

pipe = Pipeline([('cleanText', CleanTextTransformer()), ('vectorizer', vectorizer), ('clf', clf)])

# data
train1 = train['Title'].tolist()
labelsTrain1 = train['Conference'].tolist()

test1 = test['Title'].tolist()
labelsTest1 = test['Conference'].tolist()

# train
pipe.fit(train1, labelsTrain1)

# test
preds = pipe.predict(test1)
print("accuracy:", accuracy_score(labelsTest1, preds))
print("Top 10 features used to predict: ")

printNMostInformative(vectorizer, clf, 10)
pipe = Pipeline([('cleanText', CleanTextTransformer()), ('vectorizer', vectorizer)])
transform = pipe.fit_transform(train1, labelsTrain1)

vocab = vectorizer.get_feature_names()
for i in range(len(train1)):
    s = ""
    indexIntoVocab = transform.indices[transform.indptr[i]:transform.indptr[i+1]]
    numOccurences = transform.data[transform.indptr[i]:transform.indptr[i+1]]
    for idx, num in zip(indexIntoVocab, numOccurences):
        s += str((vocab[idx], num))

Похоже, он как-то связан с данными train1.Не уверен, как это исправить.

Это после очистки данных объявление теперь пытается использовать эту функцию для распечатки наиболее важных функций, функций с наивысшими коэффициентами:

1 Ответ

0 голосов
/ 26 сентября 2018

Для тех, кто ищет дополнительную информацию - это основано на учебном пособии https://towardsdatascience.com/machine-learning-for-text-classification-using-spacy-in-python-b276b4051a49. Я также получаю ту же ошибку:

Это относится к функции cleanText(), которая не возвращалачто-нибудь для конвейера, с которым можно работать - отсюда трассировка объекта NoneType

def cleanText(text):
    text = text.strip().replace("\n", " ").replace("\r", " ")
    text = text.lower()

Если вы добавите return text, это должно исправить вашу ошибку

def cleanText(text):
    text = text.strip().replace("\n", " ").replace("\r", " ")
    text = text.lower()    
    return text
...