pg_mystem - расширение PostgreSQL для Yandex mystem (стеммер или лемматизатор или морфологический нормализатор - точный термин, как я понимаю, в русском языке не определен). Основная функция данного расширения заключается в объединении лучшего, на мой взгляд, стеммера русского языка mystem и мощнейшей СУБД PostgreSQL.
Необходимо загрузить исполнимый файл 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`$ git clone https://github.com/maxoodf/pg_mystem.git
$ cd ./pg_mystem
$ git submodule init
$ git submodule update
$ make
$ sudo make installНастройки 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, как описано ранее.
- Измените ваш конфигурационный файл
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 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.
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`$ git clone https://github.com/maxoodf/pg_mystem.git
$ cd ./pg_mystem
$ git submodule init
$ git submodule update
$ make
$ sudo make installYou 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.
- 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;
\qThat's all. Now you can use mystem from PostgreSQL queries.
SELECT mystem_convert('Ехал грека через реку, сунул грека руку в реку');
mystem_convert
-----------------------------------------------
ехать грек через река, сунуть грек рука в река +
(1 row)