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 install
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_MAX
to 1000 chars or so. If you work with a large documents, redefineDOC_LEN_MAX
to 100000 characters etc.MYSTEM_PROCS
- how manymystem
processes to run. I use the following value in my projects - onemystem
process 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 6mystem
processes.
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_processes
toMYSTEM_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)