NLP_Homework_1 / demo.py
Kolesnikov Dmitry
feat: Готовый проект
54ccdcb
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Демонстрационный скрипт для проекта анализа токенизации.
Показывает основные возможности системы на примере данных.
"""
import os
import sys
from pathlib import Path
# Добавляем путь к модулям проекта
project_root = Path(__file__).parent
sys.path.insert(0, str(project_root))
from src.text_cleaner import clean_text
from src.universal_preprocessor import UniversalPreprocessor, PreprocessingConfig
from src.tokenizers_cmp import TokenizationComparator
from src.utils import calculate_text_statistics, create_corpus_summary
def demo_text_processing():
"""Демонстрация обработки текста."""
print("🔧 Демонстрация обработки текста")
print("=" * 50)
# Пример текста
sample_text = """
Компания ООО "Тест" (ул. Ленина, д. 1) сообщила о результатах за 2023 г.
Контакты: info@test.ru, +7(495)123-45-67, сайт www.test.com
Цена: 1000 руб., рост на 15% по сравнению с прошлым годом.
Дата: 15.03.2024, т.е. вчера.
"""
print("Исходный текст:")
print(sample_text.strip())
print()
# Очистка текста
cleaned_text = clean_text(sample_text, lower=True, remove_stopwords=False)
print("После очистки:")
print(cleaned_text)
print()
# Предобработка
config = PreprocessingConfig(
replace_urls=True,
replace_emails=True,
replace_numbers=True,
expand_abbreviations=True
)
preprocessor = UniversalPreprocessor(config)
processed_text = preprocessor.preprocess(sample_text)
print("После предобработки:")
print(processed_text)
print()
def demo_tokenization():
"""Демонстрация методов токенизации."""
print("🔤 Демонстрация методов токенизации")
print("=" * 50)
sample_texts = [
"Это тестовый текст для проверки различных методов токенизации.",
"В России работает множество новостных агентств: РИА Новости, ТАСС, Интерфакс.",
"Компания ООО 'Тест' сообщила о результатах за 2023 год. Контакты: info@test.ru"
]
comparator = TokenizationComparator()
available_methods = list(comparator.methods.keys())
print(f"Доступные методы: {', '.join(available_methods)}")
print()
# Сравниваем несколько методов
methods_to_test = ['naive', 'regex']
if 'razdel' in available_methods:
methods_to_test.append('razdel')
if 'nltk' in available_methods:
methods_to_test.append('nltk')
print("Сравнение методов токенизации:")
results = comparator.compare_methods(sample_texts, methods_to_test)
print(results)
print()
def demo_corpus_analysis():
"""Демонстрация анализа корпуса."""
print("📊 Демонстрация анализа корпуса")
print("=" * 50)
corpus_path = "data/raw_corpus.jsonl"
if os.path.exists(corpus_path):
print(f"Анализируем корпус: {corpus_path}")
# Загружаем ограниченное количество статей для демо
from src.utils import load_jsonl
articles = load_jsonl(corpus_path, max_items=100) # Ограничиваем для демо
texts = [article.get('text', '') for article in articles if article.get('text')]
# Вычисляем статистику
stats = calculate_text_statistics(texts)
print(f"Всего статей: {stats['total_texts']}")
print(f"Всего слов: {stats['total_words']}")
print(f"Среднее слов на статью: {stats['avg_words_per_text']:.1f}")
print(f"Уникальных слов: {stats['unique_words']}")
print("\nТоп-10 наиболее частых слов:")
for word, count in stats['most_common_words'][:10]:
print(f" {word}: {count}")
else:
print(f"Корпус {corpus_path} не найден")
print("Используем тестовые данные...")
test_texts = [
"Это тестовый текст для демонстрации анализа корпуса.",
"Второй текст содержит больше слов для статистики.",
"Третий текст завершает набор тестовых данных."
]
stats = calculate_text_statistics(test_texts)
print(f"Всего текстов: {stats['total_texts']}")
print(f"Всего слов: {stats['total_words']}")
print(f"Среднее слов на текст: {stats['avg_words_per_text']:.1f}")
def main():
"""Основная функция демонстрации."""
print("🚀 Демонстрация системы анализа токенизации")
print("=" * 60)
print()
try:
# Демонстрация обработки текста
demo_text_processing()
# Демонстрация токенизации
demo_tokenization()
# Демонстрация анализа корпуса
demo_corpus_analysis()
print("✅ Демонстрация завершена успешно!")
print()
print("💡 Для полного функционала запустите веб-интерфейс:")
print(" streamlit run src/streamlit_app.py")
except Exception as e:
print(f"❌ Ошибка при демонстрации: {e}")
print("Убедитесь, что все зависимости установлены:")
print(" pip install -r requirements.txt")
if __name__ == "__main__":
main()