/
IvanMysin
/
Topics
Обзор
Документация
Войти
/
IvanMysin
/
Topics
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
summarize_articles.py
120 строк
5 KB
ivan
AI summarization is added
07 окт 2025, 14:35
07 окт 2025, 14:35
54990fe
Код
Авторство
О чём код?
#!/usr/bin/env python3 """ Скрипт для суммаризации научных статей с использованием Ollama """ import argparse import sys import os from datetime import datetime # Добавляем src в путь для импорта sys.path.append(os.path.join(os.path.dirname(__file__), 'src')) from summarization_manager import SummarizationManager, SummarizationValidator from config import SUMMARIZATION_CONFIG def main(): parser = argparse.ArgumentParser(description='Суммаризация научных статей с помощью Ollama') parser.add_argument('--batch-size', type=int, default=SUMMARIZATION_CONFIG["summarization"]["batch_size"], help='Размер батча для обработки') parser.add_argument('--update-existing', action='store_true', help='Обновить существующие суммаризации') parser.add_argument('--max-articles', type=int, help='Максимальное количество статей для обработки') parser.add_argument('--validate-only', action='store_true', help='Только проверить качество существующих суммаризаций') parser.add_argument('--ollama-model', type=str, help='Модель Ollama для использования') args = parser.parse_args() print("🚀 Запуск суммаризации научных статей") print(f"📅 {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") try: # Обновляем конфиг если переданы аргументы if args.ollama_model: SUMMARIZATION_CONFIG["ollama"]["model"] = args.ollama_model if args.update_existing: SUMMARIZATION_CONFIG["summarization"]["update_existing"] = True summarization_manager = SummarizationManager() if args.validate_only: # Режим проверки качества validate_summaries(summarization_manager) else: # Режим суммаризации result = summarization_manager.process_batch_summarization(args.batch_size) if result["success"]: print(f"✅ {result['message']}") stats = result.get("stats", {}) if stats: print(f"📊 Статистика:") print(f" Всего статей: {stats['total']}") print(f" Обработано: {stats['processed']}") print(f" Успешно: {stats['successful']}") print(f" Ошибок: {stats['failed']}") if stats['errors']: print(f" Последние ошибки:") for error in stats['errors'][-5:]: # Показываем последние 5 ошибок print(f" - {error}") else: print(f"❌ Ошибка: {result.get('error', 'Неизвестная ошибка')}") sys.exit(1) except KeyboardInterrupt: print("\n⏹️ Суммаризация прервана пользователем") except Exception as e: print(f"❌ Критическая ошибка: {e}") sys.exit(1) def validate_summaries(summarization_manager): """Проверяет качество существующих суммаризаций""" print("🔍 Проверка качества существующих суммаризаций...") try: conn = sqlite3.connect(summarization_manager.db_path) query = f""" SELECT {summarization_manager.summary_column} FROM {summarization_manager.table_name} WHERE {summarization_manager.summary_column} IS NOT NULL AND TRIM({summarization_manager.summary_column}) != '' """ df = pd.read_sql_query(query, conn) conn.close() print(f"📋 Найдено суммаризаций: {len(df)}") validator = SummarizationValidator() valid_count = 0 for _, row in df.iterrows(): summary = row[summarization_manager.summary_column] length_ok = validator.validate_summary_length(summary) content_ok = validator.validate_summary_content(summary) if length_ok and content_ok: valid_count += 1 print(f"📊 Результаты проверки:") print(f" Всего суммаризаций: {len(df)}") print(f" Валидных: {valid_count}") print(f" Невалидных: {len(df) - valid_count}") print(f" Качество: {valid_count/len(df)*100:.1f}%") except Exception as e: print(f"❌ Ошибка при проверке суммаризаций: {e}") if __name__ == "__main__": main()