def get_texts_stat(self, mode='train'): # Готовим данные env = Environment() if mode == 'train': file_res = env.filename_results_csv() if mode == 'test': file_res = env.filename_stat_test_csv() authors = pd.read_csv(env.filename_authors_csv(), index_col='idauthor', encoding='utf-8') data = pd.read_csv(file_res, index_col='idstat', encoding='utf-8') data.drop(columns=['file', 'idchunk'], inplace=True) columns = data.columns group = data.groupby(['idtext', 'idauthor', 'author', 'name']) group = group.agg({ 'sentences_text': ['mean'], 'words_text': ['mean'], 'sentence_mean': ['mean'], 'sentences_chunk': ['mean'], 'words_chunk': ['mean'], 'words_uniq_chunk': ['mean'], 'uniq_per_sent_chunk': ['mean'], 'uniq_per_words_chunk': ['mean'], 'NOUN': ['mean'], 'ADJF': ['mean'], 'ADJS': ['mean'], 'COMP': ['mean'], 'VERB': ['mean'], 'INFN': ['mean'], 'PRTF': ['mean'], 'PRTS': ['mean'], 'GRND': ['mean'], 'NUMR': ['mean'], 'ADVB': ['mean'], 'NPRO': ['mean'], 'PRED': ['mean'], 'PREP': ['mean'], 'CONJ': ['mean'], 'PRCL': ['mean'], 'INTJ': ['mean'], 'predict': ['sum'] }) group.columns = columns[4:] group.reset_index(inplace=True) data = pd.merge(group, authors, on='idauthor', how='left', suffixes=('', '_author')) if mode == 'test': data['predict'] = data['predict'].astype(int) data = pd.merge(data, authors, left_on='predict', right_on='idauthor', how='left', suffixes=('', '_predict')) return data
def predict(self, aidtext, b_makestat=False): env = Environment() # Открываем файл со статистикой по тестовым текстам df_stat = pd.read_csv( env.filename_stat_test_csv(), index_col='idstat', encoding='utf-8') # Статистика по тстовым текстам df_texts = pd.read_csv(env.filename_predict_csv(), index_col='idtext', encoding='utf-8') # Реестр текстов mask = df_texts.index.isin(aidtext) df_texts = df_texts[mask] columns = ['idtext', 'idchunk', 'idauthor', 'author', 'name', 'file', \ 'sentences_text', 'words_text','sentence_mean', \ 'sentences_chunk', 'words_chunk', 'words_uniq_chunk','uniq_per_sent_chunk','uniq_per_words_chunk', \ 'NOUN','ADJF','ADJS','COMP','VERB','INFN','PRTF','PRTS','GRND','NUMR',\ 'ADVB','NPRO','PRED','PREP','CONJ','PRCL','INTJ', 'predict'] y_result = [] #Если необходимо подготовить статистику по тестовым текстам if b_makestat: for index, row in df_texts.iterrows( ): # Для каждого текста, который надо обработать file_txt = df_texts.at[index, 'filename'] # Read text file env.debug(1, ['Analyzer', 'predict', 'START file TXT:', file_txt]) t_start = timer() file = codecs.open(file_txt, "r", "utf_8_sig") text = file.read().strip() file.close() # Автор в тестовой выборке вообще говоря нет idauthor = df_texts.at[index, 'idauthor'] # Автор #idauthor = 0 name = df_texts.at[index, 'name'] # Название # Собственно обработка текста df_add = self.analyze_text( columns, text, index, idauthor, name, file_txt) # Analyze text, get Series #print(df_add) df_add.reset_index(drop=True, inplace=True) df_stat = df_stat.append( df_add, ignore_index=True) #Добавляем к файлу результатов df_stat.reset_index(drop=True, inplace=True) df_stat.index.name = 'idstat' t_end = timer() env.debug(1, [ 'END file TXT:', file_txt, 'time:', env.job_time(t_start, t_end) ]) #df_stat теперь содержит информацию о всех тестовых текстах, которые хотели обработать #Указываем верный тип для целочисленных колонок int_cols = [ 'idtext', 'idchunk', 'idauthor', 'sentences_text', 'words_text', 'sentences_chunk', 'words_chunk', 'words_uniq_chunk' ] for col in int_cols: df_stat[col] = df_stat[col].astype(int) # Сохраняем результат на диск df_stat.to_csv(env.filename_stat_test_csv(), encoding='utf-8') #Статистика готова # Открываем файл со статистикой по тестовым текстам df_stat = pd.read_csv( env.filename_stat_test_csv(), index_col='idstat', encoding='utf-8') # Статистика по тстовым текстам #mask = df_stat.index.isin(aidtext) #df_stat2predict = df_stat[mask] #Предсказываем авторов y_res = self.model_predict(df_stat.loc[aidtext]) #print(y_res) df_stat.loc[aidtext, 'predict'] = y_res.astype(int) #print(df_stat) #y_result.append(y_res[0]) #Сохраняем измененный файл с предсказаниями df_stat.to_csv(env.filename_stat_test_csv(), encoding='utf-8') return y_res #Возвращаем предсказания