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