Высокопроизводительный инструмент для лемматизации больших текстовых файлов с использованием Mystem от Яндекса.
- 🚀 Обработка файлов до 10ГБ+ с оптимизированными буферами
- ⚡ Многопоточная обработка с использованием всех ядер CPU
- 📊 Реальный мониторинг прогресса с детальной статистикой:
- Прогресс обработки (до 100%)
- Количество обработанных слов
- Скорость обработки (слов/сек)
- Скорость чтения (МБ/сек)
- Использование памяти
- 🔍 Автодетект Mystem (глобальный или локальный)
- 🛠️ Гибкая настройка через переменные окружения
- Go 1.20+
- Mystem (см. инструкцию ниже)
git clone https://github.com/terratensor/lemmatizer.git
cd lemmatizer
make build
wget https://download.cdn.yandex.net/mystem/mystem-3.1-linux-64bit.tar.gz
tar -xzf mystem-3.1-linux-64bit.tar.gz
sudo mv mystem /usr/local/bin/
brew install mystem
Базовый запуск:
./lemmatizer входной_файл.txt выходной_файл.txt
Пример вывода:
Processing file: corpus.txt
Input size: 2.8 GB
Output file: output.txt
Starting lemmatization...
Progress: 100.0% | Words: 12,345,678 | Speed: 45,678/s | 15.6 MB/s | Mem: 124.3MB (peak: 256.7MB)
Processing completed in 2m30s
Total words processed: 12,345,678
Average speed: 45,678 words/sec
Data rate: 15.6 MB/s
Peak memory usage: 256.7 MB
Переменная | По умолчанию | Описание |
---|---|---|
BUFFER_SIZE |
100MB | Размер буфера чтения/записи |
CHAN_BUFFER_SIZE |
1,000,000 | Размер буфера каналов обработки |
MYSTEM_PATH |
auto | Путь к бинарнику Mystem |
Примеры:
# С увеличенными буферами
BUFFER_SIZE=256MB ./lemmatizer large_input.txt output.txt
# С указанием пути к Mystem
MYSTEM_PATH=./custom_path/mystem ./lemmatizer input.txt output.txt
# Комбинированный пример
BUFFER_SIZE=1GB CHAN_BUFFER_SIZE=2000000 ./lemmatizer huge_corpus.txt result.txt
Типичные показатели на современных CPU:
Размер файла | Время обработки | Использование памяти |
---|---|---|
100MB | ~15 сек | 50-100MB |
1GB | ~2.5 мин | 100-300MB |
10GB | ~25 мин | 300-800MB |
Сборка и запуск:
make build
make run INPUT=input.txt OUTPUT=output.txt
Тестирование:
make test
Проект распространяется под лицензией MIT. Полный текст см. в файле LICENSE.