Программа MyStem — морфологический анализатор русского текста от Яндекса. Задача mystem-docker: упаковать MyStem в Docker-контейнер и работать с программой по http-протоколу.
Перед использованием необходимо прочитать и принять лицензионное соглашение MyStem.
Параметр | Тип | Значение по умолчанию | Комментарий |
---|---|---|---|
USER_DICT | string | - | Подключить пользовательский словарь |
GLUE_GRAMMEMES | bool | false | Объединить словоформы при одной лемме |
HOMONYMS_DETECTION | bool | false | Применить контекстное снятие омонимии |
TIMEOUT | int | 1000 | Ограничить время обработки каждого запроса (в миллисекундах) |
Таймаут необходим в силу однопоточной работы приложения, чтобы не допустить его зависания при ошибке.
Установить таймаут на 800 миллисекунд:
docker run -p 2345:8080 -e TIMEOUT=800 azzzak/mystem
Подключить словарь:
docker run -v ~/dict:/stem/dict -p 2345:8080 -e USER_DICT=dict.txt azzzak/mystem
Пример запуска в проде:
docker run -d --restart always -v ~/dict:/stem/dict -p 127.0.0.1:2345:8080 -e USER_DICT=dict.txt -e HOMONYMS_DETECTION=true -e GLUE_GRAMMEMES=true -e TIMEOUT=800 --name mystem azzzak/mystem
curl -i -d "text=съешь еще этих мягких французских булок" -X POST http://localhost:2345/mystem
Для получения морфологического анализа надо отправить POST
запрос с полем text=[текст для анализа]
на /mystem
. Ответ приходит в формате json. Об ошибке сигнализирует ответ со статус-кодом, отличным от 200
.
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "MyStem JSON Schema",
"type": "array",
"items": {
"type": "object",
"properties": {
"analysis": {
"type": "array",
"items": {
"type": "object",
"properties": {
"lex": {
"description": "лемма",
"type": "string"
},
"wt": {
"description": "бесконтекстная вероятность леммы",
"type": "number",
"minimum": 0,
"maximum": 1
},
"qual": {
"description": "особые отметки",
"type": "string"
},
"gr": {
"description": "граммемы",
"type": "string"
}
},
"required": [
"lex", "wt", "gr"
]
},
"text": {
"description": "исходная словоформа",
"type": "string"
}
}
},
"required": [
"analysis", "text"
]
}
}
Расшифровка обозначений граммем.
В случае некорректной работы с неологизмами словарь можно дополнить. Формат пользовательского словаря описан в документации MyStem.
После изменения словаря нужно перезапустить контейнер.