Загрузка данных
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)