https://github.com/envek/spellchecker
Example of spellchecking HTTP microservice in Ruby and Hunspell
https://github.com/envek/spellchecker
Last synced: 10 months ago
JSON representation
Example of spellchecking HTTP microservice in Ruby and Hunspell
- Host: GitHub
- URL: https://github.com/envek/spellchecker
- Owner: Envek
- Created: 2017-08-02T20:38:24.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2017-08-08T05:11:52.000Z (over 8 years ago)
- Last Synced: 2025-03-29T02:47:26.666Z (10 months ago)
- Language: Ruby
- Size: 10.7 KB
- Stars: 1
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Spellchecker
Маленькое Rack-приложение, чтобы исправлять _твои_ опечатки.
## Что
Отправляешь POST-запрос с запросом, содержащим ошибки:
```json
{"result": "плптье женская"}
```
Получаешь в ответ JSON с исправлением:
```json
{"result": "платье женская"}
```
## Как
Под капотом используется [Hunspell]:
1. Rack-приложение принимает JSON, достаёт из него строку
2. Каждое слово из строки скармливается libhunspell.so на проверку
3. Для непрошедших слов ищутся варианты замены там же
4. Строка собирается обратно из (возможно) исправленных слов и отдаётся клиенту
## Запуск
### Через Docker
1. Соберите образ:
docker build -t spellchecker .
2. Запустите контейнер:
docker run -it --rm -p 5000:5000 spellchecker
3. Проверьте работу:
curl -f -X POST -d '{"query": "Плптье женское"}' http://localhost:5000/
### Вручную
Потребуется последняя версия [JRuby] (9.1 или новее).
> MRI не рекомендуется использовать при запуске через потоковые веб-серверы,
> например Puma — из-за GIL приложение будет де-факто выполняться в один поток.
1. Установите [Hunspell]:
```sh
sudo apt install hunspell # Linux (Debian)
brew install hunspell # OS X
```
2. Скачайте русский словарь:
```sh
export DEST=/usr/share/hunspell # Linux (Debian)
export DEST=~/Library/Spelling # OS X
curl 'https://cgit.freedesktop.org/libreoffice/dictionaries/plain/ru_RU/ru_RU.{dic,aff}' -o "$DEST/ru_RU.#1"
```
3. Установите зависимости:
bundle install
4. Запустите сервис:
```sh
rackup -s puma -p ${PORT:-5000} -o 0.0.0.0 -O "Threads=0:${MAX_THREADS:-16}"
```
5. Проверьте работу:
curl -f -X POST -d '{"query": "Плптье женское"}' http://localhost:5000/
## Тестирование
rspec
## Конфигурация
Учитываются следующие переменные окружения:
- `DICTIONARY_FILE` — полный путь к файлу с дополнительным словарём (словарь должен быть в той же кодировке и использовать те же сигнатуры аффиксов, что и словарь `ru_RU` из вашего Hunspell). По умолчанию используется [custom.dic](./custom.dic).
[Hunspell]: http://hunspell.github.io/
[JRuby]: http://jruby.org/ (The Ruby Programming Language on the JVM)
[Rack]: https://rack.github.io/ (Rack: a Ruby Webserver Interface)
[Puma]: http://puma.io/ (A modern, concurrent web server for Ruby)
[Docker]: https://www.docker.com/ (Docker is the world’s leading software containerization platform)