# JRSub
[![PyPI](https://img.shields.io/pypi/v/jrsub.svg)](https://pypi.python.org/pypi/jrsub)
[![Build Status](https://travis-ci.com/kateabr/jrsub.svg?branch=master)](https://travis-ci.com/kateabr/jrsub)

## Установка

`pip install jrsub`

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

### Загрузка ранее сгенерированной словарной базы

#### ЯРКСИ
```
yl = YarxiLoader() // экземпляр загрузчика
yd = yl.load() // словарь
```
#### Warodai
```
wl = WarodaiLoader() // экземпляр загрузчика
wd = wl.load() // словарь
```

### Поиск в словарях

`yd.lookup(lexeme: str[, reading: str, search_mode: SearchMode])` → `[SearchResult]`
* возвращает список `SearchResult`, включающих в себя поля `lexeme`, `reading` и `translation` из подходящих записей;
* все три поля являются списками строк.

`yd.lookup_translations_only(lexeme: str[, reading: str, search_mode: SearchMode])`→ `[str]`
* возвращает значения полей "перевод" из подходящих записей в виде одномерного списка строк.

Параметр | Допустимые значения | Обязательный параметр
------------ | ------------- | ------------
`lexeme` | хирагана, катакана, кандзи | ✔️
`reading` | хирагана | ❌
`search_mode` | `SearchMode.consecutive`, `SearchMode.deep_only`, `SearchMode.shallow_only` | ❌

* `SearchMode.shallow_only`: поиск осуществляется только по исходным формам, дословно приведенным в словаре. Малейшие изменения в слове (например, лишние символы окуриганы или их отсутствие) приведут к пустой выдаче словаря.

* `SearchMode.deep_only`: задает "глубокий" режим поиска: при поиске в первую очередь учитываются входящие в слово иероглифы. Этот режим работает медленнее, чем `SearchMode.shallow_only`, но при этом он гораздо надежнее.

* `SearchMode.consecutive` (_задан по умолчанию_): вначале запускается "поверхностный поиск", а затем, если он не дал результатов, -- "глубокий". Это оптимальный из всех трех вариантов, лучше его не изменять.

---
### Пересборка словарных баз

#### Методы загрузчиков

Действие  | Метод | Аргументы | Начальное значение
----------|-------|-----------|------------------------
Включение/откючение транслитерации примеров в переводах | `.enable_transliteration` | mode: `bool` | `True` (включено)
Изменение префикса к переводам, свойственным иероглифам в составе сложных слов _(только для ЯРКСИ)_ | `.set_compounds_pref` | pref: `str` | `'〈в сочет.〉'`
Изменение способа выделения некоторых частей перевода | `.set_highlighting` | left: `str`; right: `str` | `'《'`; `'》'`
Запуск перестройки словарной базы | `.rescan` | path: `str`; show_progress: `bool` | папка `dictionaries/source` в каталоге установки пакета; `True`

* Для отображения в браузере можно при помощи `set_highlighting` заменить кавычки-елочки на HTML-теги: `yl.set_highlighting('<i>', '</i>')`;
* Перестройка одной базы занимает около восьми минут: полосы прогресса позволяют отследить, на какой стадии база находится в данный момент.
* При перестройке рекомендую использовать отредактированные мной варианты исходников, доступные в репозитории в каталоге [`dictionaries/source`](https://github.com/kateabr/jrsub/tree/master/dictionaries/source) (список изменений в [`Яркси`](https://docs.google.com/spreadsheets/d/1oUPO1zTyYWZdhC4T_DKzlWpR9B4NBnw16mv5vycp4TM/edit?usp=sharing) | [`Вародае`](https://docs.google.com/spreadsheets/d/1sU5ihleVZlBVRimYV_NM5TWq0lH_n68cEJx60iRdjTM/edit?usp=sharing); в основном изменения касаются форматирования, но также было найдено и исправлено несколько опечаток).

#### Методы полученных после сборки словарных баз

Действие  | Метод | Аргументы | Значение по умолчанию
----------|-------|-----------|------------------------
Сохранение перестроенной базы | `.save` | path: `str` | папка `dictionaries` в каталоге установки пакета

* Если оставить значение пути по умолчанию, база будет сохраняться в установочный каталог пакета, и при следующем запуске к ней можно будет получить доступ методом загрузчика `.load()` без параметров.

---
### Примеры работы со словарями ([`demo`](https://github.com/kateabr/jrsub/tree/master/demo))
* `cli.py` -- самый простой пример взаимодействия через командную строку;
* `app.py` -- веб-интерфейс для работы через браузер;
* `flask.Dockerfile` -- docker-контейнер с приложением из файла `app.py`.