/
dayekb
/
vibecoding_transcript_parser
Обзор
Документация
Войти
/
dayekb
/
vibecoding_transcript_parser
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
chat_analyzer.py
149 строк
5 KB
dayekb
upload files
12 окт 2025, 09:41
12 окт 2025, 09:41
e614fc8
Код
Авторство
О чём код?
import os import csv import pandas as pd from collections import defaultdict import openpyxl def extract_speaker_theses_from_file(file_path): """ Извлекает тезисы из одного файла транскрипции используя CSV парсер """ speaker_theses = defaultdict(list) try: with open(file_path, 'r', encoding='utf-8') as file: # Пропускаем первую строку (заголовок) next(file) # Создаем CSV reader с табуляцией как разделителем reader = csv.reader(file, delimiter='\t') for row_num, row in enumerate(reader, 2): if len(row) >= 3: time_part, speaker, text = row[0], row[1], row[2] # Игнорируем Долганова Антона if speaker.lower() == 'долганов антон': continue # Очищаем текст от лишних пробелов clean_text = text.strip() if clean_text: speaker_theses[speaker].append(clean_text) except Exception as e: print(f"Ошибка при обработке файла {file_path}: {e}") return speaker_theses def analyze_chat_transcripts(data_folder): """ Анализирует все файлы транскрипции в папке """ all_speakers = set() file_speaker_theses = {} # Обрабатываем все txt файлы в папке for filename in os.listdir(data_folder): if filename.endswith('.txt'): file_path = os.path.join(data_folder, filename) print(f"Обработка файла: {filename}") speaker_theses = extract_speaker_theses_from_file(file_path) file_speaker_theses[filename] = speaker_theses # Собираем всех уникальных говорящих for speaker in speaker_theses.keys(): all_speakers.add(speaker) return all_speakers, file_speaker_theses def create_excel_report(all_speakers, file_speaker_theses, output_file): """ Создает Excel файл с результатами анализа """ # Создаем DataFrame для Excel df_data = {} # Заголовки - названия файлов columns = list(file_speaker_theses.keys()) # Строки - имена говорящих for speaker in sorted(all_speakers): row_data = [] for filename in columns: theses = file_speaker_theses[filename].get(speaker, []) # Объединяем все тезисы говорящего через перенос строки cell_content = '\n'.join(theses) row_data.append(cell_content) df_data[speaker] = row_data # Создаем DataFrame df = pd.DataFrame(df_data, index=columns).T # Создаем Excel файл with pd.ExcelWriter(output_file, engine='openpyxl') as writer: df.to_excel(writer, sheet_name='Анализ чата') # Получаем workbook для дополнительного форматирования workbook = writer.book worksheet = writer.sheets['Анализ чата'] # Делаем заголовки жирными from openpyxl.styles import Font header_font = Font(bold=True) for col_num in range(len(df.columns) + 1): cell = worksheet.cell(row=1, column=col_num + 1) cell.font = header_font # Автоширина колонок for column in worksheet.columns: max_length = 0 column_letter = column[0].column_letter for cell in column: try: if len(str(cell.value)) > max_length: max_length = len(str(cell.value)) except: pass adjusted_width = min(max_length + 2, 100) # Ограничиваем максимальную ширину worksheet.column_dimensions[column_letter].width = adjusted_width print(f"Excel файл создан: {output_file}") def main(): # Папка с данными data_folder = 'data' # Проверяем существование папки if not os.path.exists(data_folder): print(f"Папка {data_folder} не найдена!") return # Анализируем транскрипции print("Начинаем анализ транскрипций...") all_speakers, file_speaker_theses = analyze_chat_transcripts(data_folder) if not all_speakers: print("Не найдено говорящих в файлах транскрипции.") return print(f"Найдено {len(all_speakers)} говорящих: {', '.join(sorted(all_speakers))}") print(f"Обработано {len(file_speaker_theses)} файлов.") # Создаем Excel отчет output_file = 'chat_analysis.xlsx' create_excel_report(all_speakers, file_speaker_theses, output_file) print("Анализ завершен!") if __name__ == "__main__": main()