Загрузка данных


import os
from pathlib import Path
from datetime import datetime

# ==============================================================================
# НАСТРОЙКИ
# ==============================================================================
# Укажите вашу сетевую папку
USER_DIR = Path(r"\\srv-02\48\Сохранение\ОИБ25-к\Лысенко_Михаил\TextAnalyzer")
INPUT_FILE = USER_DIR / "input_data.txt"
OUTPUT_DIR = USER_DIR / "output"

TARGET_WORDS = ["python", "данные", "система", "обработка", "анализ"]

# ==============================================================================
# ФУНКЦИИ
# ==============================================================================

def count_basic_stats(text: str) -> dict:
    """Возвращает количество строк, слов и символов."""
    # 1. Разбиваем текст на строки
    lines = text.splitlines()
    line_count = len(lines)
    
    # 2. Разбиваем текст на слова и фильтруем пустые строки/пробелы
    words = [word for word in text.split() if word.strip()]
    word_count = len(words)
    
    # 3. Считаем символы без учета пробелов и переносов строк
    char_count = len([char for char in text if char not in " \t\n\r"])
    
    return {"lines": line_count, "words": word_count, "chars": char_count}


def analyze_keywords(text: str, keywords: list) -> dict:
    """Возвращает словарь {слово: количество_вхождений}."""
    # 1. Приводим текст к нижнему регистру
    text_lower = text.lower()
    results = {}
    
    # 2. Для каждого ключевого слова считаем вхождения (.count)
    for word in keywords:
        word_lower = word.lower()
        results[word_lower] = text_lower.count(word_lower)
        
    return results


def extract_long_words(text: str) -> list:
    """Возвращает отсортированный список уникальных слов длиной > 5 символов."""
    # 1. Разбиваем текст на слова
    raw_words = text.split()
    cleaned_words = []
    
    # 2. Очищаем слова от знаков препинания
    punctuation = ".,!?;:\"()'-"
    for word in raw_words:
        cleaned = word.strip(punctuation).lower()
        # 3. Отфильтровываем слова длиннее 5 символов
        if len(cleaned) > 5:
            cleaned_words.append(cleaned)
            
    # 4. Оставляем только уникальные и сортируем по алфавиту
    unique_words = sorted(list(set(cleaned_words)))
    return unique_words


def save_report(stats: dict, keywords_stats: dict, long_words: list, output_dir: Path):
    """Сохраняет отчет в текстовый файл."""
    output_dir.mkdir(parents=True, exist_ok=True)
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    report_path = output_dir / f"report_{timestamp}.txt"
    
    with open(report_path, "w", encoding="utf-8") as f:
        f.write("СТАТИСТИЧЕСКИЙ ОТЧЕТ\n")
        f.write(f"Дата формирования: {datetime.now().strftime('%d.%m.%Y %H:%M')}\n")
        f.write("=" * 40 + "\n")
        f.write(f"Строк: {stats['lines']}\n")
        f.write(f"Слов: {stats['words']}\n")
        f.write(f"Символов (без пробелов): {stats['chars']}\n\n")
        
        f.write("ВХОЖДЕНИЯ КЛЮЧЕВЫХ СЛОВ:\n")
        for word, count in keywords_stats.items():
            f.write(f"  {word}: {count}\n")
        f.write("\n")
        
        f.write("УНИКАЛЬНЫЕ СЛОВА ДЛИННЕЕ 5 СИМВОЛОВ:\n")
        for w in long_words:
            f.write(f"  {w}\n")
            
    print(f"Отчет сохранен: {report_path}")

# ==============================================================================
# ТОЧКА ВХОДА
# ==============================================================================
if __name__ == "__main__":
    if not INPUT_FILE.exists():
        print(f"Ошибка: файл {INPUT_FILE} не найден. Поместите input_data.txt в рабочую папку.")
        exit(1)
        
    try:
        with open(INPUT_FILE, "r", encoding="utf-8") as f:
            text_content = f.read()
    except Exception as e:
        print(f"Ошибка чтения файла: {e}")
        exit(1)
        
    # Сбор статистики
    basic_stats = count_basic_stats(text_content)
    kw_stats = analyze_keywords(text_content, TARGET_WORDS)
    long_w = extract_long_words(text_content)
    
    # Вывод в консоль
    print("Базовая статистика:", basic_stats)
    print("Ключевые слова:", kw_stats)
    print(f"Найдено {len(long_w)} длинных слов.")
    
    # Генерация отчета
    save_report(basic_stats, kw_stats, long_w, OUTPUT_DIR)