Повнотекстовий пошук китайською мовою в ServBay: Посібник з використання zhparser
zhparser
— це потужне стороннє розширення для PostgreSQL, спеціально розроблене для ефективної обробки китайського тексту. Воно надає PostgreSQL точну сегментацію слів та можливості повнотекстового пошуку для китайської мови, тож ідеально підходить для створення додатків із пошуком по китайському контенту. ServBay — комплексне локальне середовище розробки для Web — вже має вбудовану підтримку розширення zhparser
, а також інтегрована бібліотека сегментації слів scws
(Simple Chinese Word Segmentation), яку можна використовувати для підключення власного словника через zhparser
.
У цій статті розглянуто, як встановити (активувати) та налаштувати zhparser
у середовищі ServBay, використати його для повнотекстового пошуку китайською, а також як створити власний словник на базі вбудованого в ServBay scws
.
1. Огляд
Для застосунків з великими обсягами китайських текстів — наприклад, систем керування контентом, форумів, e‑commerce — ефективний і точний повнотекстовий пошук є критично важливим. PostgreSQL має вбудовану систему повнотекстового пошуку, але за замовчуванням вона не призначена для китайської, адже орієнтована на мови з розділенням слів пробілами. Розширення zhparser
інтегрує технології китайської сегментації слів і дає PostgreSQL розуміння меж між словами, тим самим забезпечуючи якісний повнотекстовий пошук китайською.
ServBay містить попередньо інтегрований zhparser
, завдяки чому не потрібно вручну компілювати чи встановлювати розширення, і ви швидко зможете розгорнути середовище для розробки з підтримкою повнотекстового пошуку китайською.
2. Передумови
Перед використанням zhparser
переконайтесь, що:
- Ви успішно встановили ServBay.
- Пакет PostgreSQL у ServBay активований і працює. Стан пакетів можна переглянути та управляти ними у графічному інтерфейсі додатка ServBay.
3. Встановлення (активація) розширення zhparser
ServBay вже розмістив файли модуля zhparser
у каталогах, які PostgreSQL бачить. Вам потрібно лише виконати SQL-команду в цільовій базі даних для активації.
Підключіться до вашої бази даних PostgreSQL: Відкрийте термінал і під’єднайтеся до бази PostgreSQL, запущеної в ServBay, скориставшись інструментом командного рядка
psql
. Замінітьservbay-demo
на ваш актуальний логін користувача, аyour_database_name
— на назву бази, де ви хочете підключитиzhparser
.bashpsql -U servbay-demo -d your_database_name
1Якщо підключаєтесь до бази за замовчуванням (зазвичай збігається із логіном), можна пропустити параметр
-d
.Створіть розширення
zhparser
: У інтерактивному інтерфейсіpsql
виконайте наступну SQL-команду:sqlCREATE EXTENSION zhparser;
1Якщо команда виконалася без помилок, розширення активовано. Якщо з’явилося повідомлення, що розширення вже існує, значить воно було активовано раніше.
Перевірте встановлення
zhparser
: Щоби ознайомитися зі списком вже встановлених розширень у базі даних, використайте команду:sql\dx
1Якщо все налаштовано правильно, у переліку з’явиться
zhparser
та його версія.
4. Налаштування zhparser
Після активації розширення потрібно налаштувати повнотекстовий пошук у PostgreSQL для використання zhparser
як аналізатора китайської мови. Для цього створюють текстову пошукову конфігурацію (Text Search Configuration).
Створіть пошукову конфігурацію: Пошукова конфігурація визначає, як документи перетворюються у
tsvector
(для індексації) і як рядки запиту перетворюються уtsquery
(для пошуку). Створіть конфігурацію з назвоюchinese
, вказавши в якості парсера (PARSER)zhparser
:sqlCREATE TEXT SEARCH CONFIGURATION chinese (PARSER = zhparser);
1Додайте відображення словників: Для різних типів токенів (слів), які видає парсер
zhparser
залежно від частини мови (наприклад, іменник n, дієслово v, прикметник a тощо), необхідно вказати, який словник застосовувати. Тут ми відобразимо іменники (n), дієслова (v), прикметники (a), самостійні слова (i), емоційні слова (e), числівники (l) на словникsimple
. Словникsimple
— це базовий словник без трансформацій: він залишає розбитіzhparser
слова як є.sqlALTER TEXT SEARCH CONFIGURATION chinese ADD MAPPING FOR n,v,a,i,e,l WITH simple; -- За необхідності ви можете додати чи змінити позначки частин мови і словники.
1
2Зверніть увагу: списки тегів частин мови в
zhparser
можуть відрізнятися від стандартних NLP-позначень; наведено поширені дляzhparser
лейбли.
5. Використання zhparser для повнотекстового пошуку
Після налаштування можна виконувати повнотекстовий пошук китайською мовою через zhparser
. Нижче — покрокова демонстрація.
5.1 Створення прикладної таблиці та даних
Спочатку створіть таблицю для збереження китайських текстів і додайте у неї декілька записів.
Створіть таблицю:
sqlCREATE TABLE documents ( id SERIAL PRIMARY KEY, content TEXT );
1
2
3
4Додайте тестові дані:
sqlINSERT INTO documents (content) VALUES ('Я люблю обробку природної мови'), ('Сегментація китайських слів є важливим етапом опрацювання тексту'), ('zhparser — гарний інструмент для сегментації китайських слів'), ('ServBay робить локальну розробку зручною');
1
2
3
4
5
5.2 Створення повнотекстового індексу
Щоб прискорити пошук, особливо у великих наборах даних, рекомендується створити індекс на стовпці, що використовуються для повнотекстового пошуку. Для поля типу tsvector
зазвичай обирають індекс GIN (Generalized Inverted Index), що особливо ефективний для таких запитів.
Створіть GIN-індекс: Додаємо GIN-індекс на колонці
content
, використовуючи для цього нашу створену конфігураціюchinese
(та парсерzhparser
):sqlCREATE INDEX idx_gin_content ON documents USING gin (to_tsvector('chinese', content));
1
5.3 Виконання повнотекстових пошукових запитів
Тепер ви можете конвертувати ключові слова у формат запиту через to_tsquery
і знаходити збіги за допомогою оператора @@
.
Виконайте пошуковий запит: Наприклад, знайти документи, що містять і «китайська» і «сегментація»:
sqlSELECT id, content, to_tsvector('chinese', content) AS content_tsvector -- Необов’язково: перегляд результатів сегментації FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', 'китайська & сегментація');
1
2
3
4
5
6Цей запит поверне документи з id 2 та 3, оскільки їхній зміст містить обидва слова.
Інші приклади запитів:
- Пошук документів із «ServBay»:sql(Поверне документ з id 4)
SELECT * FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', 'ServBay');
1 - Пошук документів із «обробка природної мови»:sql(Поверне документ з id 1. Зверніть увагу: залежно від режиму сегментації та словника,
SELECT * FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', 'обробка природної мови');
1zhparser
може розбити фразу на окремі слова чи залишити як суцільне, якщо у власному словнику вона присутня.)
- Пошук документів із «ServBay»:
6. Створення власного словника з вбудованим scws у ServBay
ServBay інтегрує бібліотеку scws
, і zhparser
дозволяє вказати словники scws, у тому числі власні, щоб покращити якість сегментації слів, особливо у випадку специфічної термінології чи нових слів.
6.1 Створення власного словника
Створіть або відредагуйте файл словника: Рекомендується зберігати користувацькі словники scws у
/Applications/ServBay/etc/scws/
. Створіть файлcustom_dict.txt
, якщо такого ще немає.bash# Створити чи редагувати файл через термінал nano /Applications/ServBay/etc/scws/custom_dict.txt
1
2Додайте слова до файлу: Додавайте по одному слову на рядок, ті слова чи фрази, які ви хочете визначити як окремі одиниці сегментації у
zhparser
:plaintextобробка природної мови сегментація китайських слів ServBay локальне середовище розробки
1
2
3
4Збережіть файл.
6.2 Налаштування zhparser на використання власного словника
Тепер потрібно встановити шлях до вашого словника для zhparser
.
Задайте параметр
zhparser.dict_path
: У сесії PostgreSQL виконайте команду, нижче шлях вказує на ваш файл словника:sqlSET zhparser.dict_path = '/Applications/ServBay/etc/scws/custom_dict.txt'; -- Переконайтеся, що шлях вказаний правильно і користувач PostgreSQL має право читати файл.
1
2Зверніть увагу: команда
SET
діє лише для поточної сесії. Щоб встановити шлях для всіх нових підключень, внесіть цю опцію у файл налаштувань PostgreSQLpostgresql.conf
:zhparser.dict_path = '/Applications/ServBay/etc/scws/custom_dict.txt'
та перезавантажте службу PostgreSQL (можна через інтерфейс ServBay). Для розробки доволі зручно використовувати простеSET
.
6.3 Перезавантаження словника
Після змін у словнику потрібно повідомити zhparser
про необхідність оновлення.
Викличте функцію перезавантаження:
sqlSELECT zhprs_reload_dict();
1Після виконання цієї функції новий словник одразу використовується для сегментації.
7. Налаштування режиму сегментації
zhparser
підтримує різні режими розбиття тексту на слова, що впливає на ступінь деталізації сегментації. Ключова опція керування — параметр zhparser.seg_with_duality
.
7.1 Вибір режиму розбиття
- Задайте параметр
zhparser.seg_with_duality
:- true — включено «бінарну» (двійкову) сегментацію: генерується більше частин, що допомагає підвищити повноту пошуку (ревізію результатів). Наприклад, «обробка природної мови» може бути розбита на «обробка», «природна», «мова», «обробка природна», «природна мова» тощо.sql
SET zhparser.seg_with_duality = true;
1 - false — більш груба сегментація: як правило, відбувається максимумально довгий збіг згідно зі словником, що підвищує точність пошуку. Наприклад, «обробка природної мови» може залишитись одним словом, якщо воно у словнику.sql
SET zhparser.seg_with_duality = false;
1
postgresql.conf
для глобального налаштування. - true — включено «бінарну» (двійкову) сегментацію: генерується більше частин, що допомагає підвищити повноту пошуку (ревізію результатів). Наприклад, «обробка природної мови» може бути розбита на «обробка», «природна», «мова», «обробка природна», «природна мова» тощо.
8. Часті питання (FAQ)
- Питання: Команда
CREATE EXTENSION zhparser;
видає помилку про відсутність розширення? Відповідь: Перевірте, що пакет PostgreSQL у ServBay встановлений і працює. ServBay має автоматично додавати бібліотекуzhparser
у потрібний каталог PostgreSQL. Якщо помилка зберігається — перевірте цілісність встановлення ServBay і PostgreSQL, або спробуйте перезапустити ServBay. - Питання: Власний словник не працює? Відповідь: Перевірте:
- Чи встановлений параметр
zhparser.dict_path
на правильний шлях до вашого словника (/Applications/ServBay/etc/scws/custom_dict.txt
)? Шлях чутливий до регістру! - Чи викликали після зміни шляху команду
SELECT zhprs_reload_dict();
для перезавантаження словника? - Чи дотриманий правильний формат файлу словника (одне слово на рядок)?
- У новій сесії: чи виконали ви знову команду
SET zhparser.dict_path = ...;
або чи додано параметр уpostgresql.conf
і перезапущено PostgreSQL? - Чи є у користувача PostgreSQL права на читання словника?
- Чи встановлений параметр
- Питання: Результати пошуку непередбачені? Відповідь: Переконайтеся, що ваша пошукова конфігурація (
chinese
) правильно відображає частини мови на словники. Поекспериментуйте з параметромzhparser.seg_with_duality
. Скористайтеся командоюSELECT to_tsvector('chinese', 'ваш китайський текст');
для діагностики сегментації тексту. Перевірте, чи ваш запит (to_tsquery
) правильно використовує ключові слова та логіку (&
,|
,!
). - Питання: Повільна швидкість повнотекстового пошуку? Відповідь: Перевірте, чи створено GIN-індекс на колонці
to_tsvector(...)
. Для великих масивів даних варто додатково оптимізувати налаштування PostgreSQL чи використовувати розширені індексні технології.
9. Підсумок
Сервіс ServBay суттєво спрощує розгортання повнотекстового пошуку китайською мовою у PostgreSQL із допомогою zhparser
. Всього за кілька дій ви можете підключити розширення, налаштувати текстовий пошук та використовувати scws для створення власних словників. Оволодіння базовими знаннями та навичками налаштування zhparser
значно підвищить ваші можливості у локальному середовищі розробки при обробці китайських текстових даних і допоможе закласти фундамент для розробки потужних китайськомовних застосунків.