An open API service indexing awesome lists of open source software.

https://github.com/terratensor/lemmatizer


https://github.com/terratensor/lemmatizer

Last synced: 3 months ago
JSON representation

Awesome Lists containing this project

README

          

# Лемматизатор текстовых корпусов

[![Go Report Card](https://goreportcard.com/badge/github.com/terratensor/lemmatizer)](https://goreportcard.com/report/github.com/terratensor/lemmatizer)
[![Лицензия: MIT](https://img.shields.io/badge/Лицензия-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

Высокопроизводительный инструмент для лемматизации больших текстовых файлов с использованием Mystem от Яндекса.

## Особенности

- 🚀 Обработка файлов до 10ГБ+ с оптимизированными буферами
- ⚡ Многопоточная обработка с использованием всех ядер CPU
- 📊 Реальный мониторинг прогресса с детальной статистикой:
- Прогресс обработки (до 100%)
- Количество обработанных слов
- Скорость обработки (слов/сек)
- Скорость чтения (МБ/сек)
- Использование памяти
- 🔍 Автодетект Mystem (глобальный или локальный)
- 🛠️ Гибкая настройка через переменные окружения

## Установка

### Требования
- Go 1.20+
- Mystem (см. инструкцию ниже)

### Сборка
```bash
git clone https://github.com/terratensor/lemmatizer.git
cd lemmatizer
make build
```

### Установка Mystem
#### Linux
```bash
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/
```

#### macOS (Homebrew)
```bash
brew install mystem
```

## Использование

Базовый запуск:
```bash
./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 |

Примеры:
```bash
# С увеличенными буферами
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 |

## Разработка

Сборка и запуск:
```bash
make build
make run INPUT=input.txt OUTPUT=output.txt
```

Тестирование:
```bash
make test
```

## Лицензия

Проект распространяется под лицензией MIT. Полный текст см. в файле [LICENSE](LICENSE).