pg_mystem - расширение PostgreSQL для поддержки Yandex Mystem
April 4, 2017 · View on GitHub
pg_mystem - расширение PostgreSQL для Yandex mystem (стеммер или лемматизатор или морфологический нормализатор - точный термин, как я понимаю, в русском языке не определен). Основная функция данного расширения заключается в объединении лучшего, на мой взгляд, стеммера русского языка mystem и мощнейшей СУБД PostgreSQL.
Установка Yandex Mystem
Необходимо загрузить исполнимый файл mystem, соответствующий вашей архитектуре, и скопировать его в share директорию PostgreSQL.
Пример:
$ wget http://download.cdn.yandex.net/mystem/mystem-3.0-linux3.1-64bit.tar.gz
$ tar xfz mystem-3.0-linux3.1-64bit.tar.gz
$ sudo cp ./mystem `pg_config --sharedir`
Установка pg_mystem
$ git clone https://github.com/maxoodf/pg_mystem.git
$ cd ./pg_mystem
$ git submodule init
$ git submodule update
$ make
$ sudo make install
Настройка pg_mystem
Настройки pg_mystem могут быть изменены. Для этого необходимо отредактировать соответствующие переменные, определенные в Makefile -
DOC_LEN_MAX- максимальный размер документа (в байтах). Если вы работаете с короткими документами (строками), установите значениеDOC_LEN_MAX, например, в 1000. Для работы с большими документами (строками), установитеDOC_LEN_MAXв необходимое значение.MYSTEM_PROCS- количество запущенныхmystemпроцессов. Рекомендованное значение - одинmystemпроцесс на 9 KB/sec обрабатываемого текста. Например, если требуется обеспечить производительность лемматизации в 50KB текста в секунду, используйте 6 процессовmystem(приведенные значения являются крайне относительными и зависят от производительности вашей системы).
После изменения настроек необходимо переустановить pg_mystem, как описано ранее.
Регистрация расширения pg_mystem
- Измените ваш конфигурационный файл
postgresql.conf.
- необходимо добавить следующую строку -
shared_preload_libraries = 'pg_mystem' - возможно, вам потребуется увелисить количество
max_worker_processesдоMYSTEM_PROCS+ 1, как минимум. Например, строка конфигурационного файла -max_worker_processes = 24
- Перезапустите
PostgreSQL
$ sudo service postgresql restart
- Выполните следующий запрос для регистрации расширения в
PostgreSQL-
$ sudo -u postgres psql
\connect YOUR_DB
CREATE EXTENSION pg_mystem;
\q
Теперь вы можете использовать mystem из PostgreSQL.
SELECT mystem_convert('Ехал грека через реку, сунул грека руку в реку');
mystem_convert
-----------------------------------------------
ехать грек через река, сунуть грек рука в река +
(1 row)
pg_mystem - PostgreSQL extension for Yandex Mystem
pg_mystem is an implementation of the PostgreSQL extension for Yandex mystem (morphology analyzer/stemmer for Russian language). What is the extension function? You can use the power of the mystem inside of a PostgreSQL database.
Yandex mystem Installation
Download binary mystem file and install it to the PostgreSQL share directory.
Example:
$ wget http://download.cdn.yandex.net/mystem/mystem-3.0-linux3.1-64bit.tar.gz
$ tar xfz mystem-3.0-linux3.1-64bit.tar.gz
$ sudo cp ./mystem `pg_config --sharedir`
pg_mystem Installation
$ git clone https://github.com/maxoodf/pg_mystem.git
$ cd ./pg_mystem
$ git submodule init
$ git submodule update
$ make
$ sudo make install
pg_mystem Configuration
You may wish to change pg_mystem default settings. All you need is to change Makefile defined parameters -
DOC_LEN_MAX- maximum document (string) length. If you work with a short lines, redefineDOC_LEN_MAXto 1000 chars or so. If you work with a large documents, redefineDOC_LEN_MAXto 100000 characters etc.MYSTEM_PROCS- how manymystemprocesses to run. I use the following value in my projects - onemystemprocess throughput is about 9 KB/sec (depends on hardware). So if I need to process, say 50 KB of text in a second I use 6mystemprocesses.
You will need to reinstall pg_mystem in case any of these parameters is changed.
pg_mystem Extension registration
- Edit your
postgresql.conf.
Add the following line -shared_preload_libraries = 'pg_mystem'
Also you may need to changemax_worker_processestoMYSTEM_PROCS+ 1 at least.
Example -max_worker_processes = 24 - Restart
PostgreSQL
$ sudo service postgresql restart
- Execute the following query inside your database. Example -
$ sudo -u postgres psql
\connect YOUR_DB
CREATE EXTENSION pg_mystem;
\q
That's all. Now you can use mystem from PostgreSQL queries.
SELECT mystem_convert('Ехал грека через реку, сунул грека руку в реку');
mystem_convert
-----------------------------------------------
ехать грек через река, сунуть грек рука в река +
(1 row)