#!/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()