Как комбинировать элементы с выводом разных размеров с помощью scikit-learn - PullRequest
0 голосов
/ 20 мая 2018

Я использую scikit-learn с Pipeline и FeatureUnion для извлечения функций из различных входных данных.Каждый образец (экземпляр) в моем наборе данных относится к документам различной длины.Моя цель - вычислить верхний tfidf для каждого документа независимо, но я продолжаю получать это сообщение об ошибке:

ValueError: blocks [0 ,:] имеет несовместимые размеры строки.Получил блоки [0,1] .shape [0] == 1, ожидается 2000.

2000 - размер обучающих данных.Это основной код:

book_summary= Pipeline([
   ('selector', ItemSelector(key='book')),
   ('tfidf', TfidfVectorizer(analyzer='word', ngram_range(1,3), min_df=1, lowercase=True, stop_words=my_stopword_list, sublinear_tf=True))
])

book_contents= Pipeline([('selector3', book_content_count())]) 

ppl = Pipeline([
    ('feats', FeatureUnion([
         ('book_summary', book_summary),
         ('book_contents', book_contents)])),
    ('clf', SVC(kernel='linear', class_weight='balanced') ) # classifier with cross fold 5
]) 

Я написал два класса для обработки каждой функции конвейера.Моя проблема связана с конвейером book_contents, который в основном работает с каждым образцом и возвращает матрицу TFidf для каждой книги независимо.

class book_content_count(): 
  def count_contents2(self, bookid):
        book = open('C:/TheCorpus/'+str(int(bookid))+'_book.csv', 'r')       
        book_data = pd.read_csv(book, header=0, delimiter=',', encoding='latin1',error_bad_lines=False,dtype=str)
                      corpus=(str([user_data['text']]).strip('[]')) 
        return corpus

    def transform(self, data_dict, y=None):
        data_dict['bookid'] #from here take the name 
        text=data_dict['bookid'].apply(self.count_contents2)
        vec_pipe= Pipeline([('vec', TfidfVectorizer(min_df = 1,lowercase = False, ngram_range = (1,1), use_idf = True, stop_words='english'))])
        Xtr = vec_pipe.fit_transform(text)
        return Xtr

    def fit(self, x, y=None):
        return self

Образец данных (пример):

title                         Summary                          bookid
The beauty and the beast      is a traditional fairy tale...    10
ocean at the end of the lane  is a 2013 novel by British        11

Тогда каждый идентификаторбудет ссылаться на текстовый файл с фактическим содержанием этих книг

Я пробовал функции toarray и reshape, но безуспешно.Есть идеи, как решить эту проблему.Спасибо

...