Recherche Full-Text Chinoise avec ServBay : Guide d’Utilisation de zhparser
zhparser
est une puissante extension tierce de PostgreSQL, spécialement conçue pour traiter efficacement le texte chinois. Elle dote PostgreSQL de capacités avancées de segmentation de mots et de recherche full-text en chinois, ce qui en fait un choix idéal pour les applications nécessitant la recherche de contenu en chinois. ServBay, en tant qu’environnement complet de développement Web local, intègre par défaut l’extension zhparser
ainsi que la bibliothèque de segmentation scws
(Simple Chinese Word Segmentation), permettant à zhparser
d’exploiter des dictionnaires personnalisés.
Ce guide détaille les étapes pour installer (activer) et configurer zhparser
dans l’environnement ServBay, explique comment l’utiliser pour la recherche full-text en chinois, et montre comment créer/appliquer un dictionnaire personnalisé via le scws intégré à ServBay.
1. Vue d’Ensemble
Pour les applications manipulant de gros volumes de texte en chinois, telles que les CMS, forums, ou plateformes e-commerce, il est essentiel d’assurer une recherche full-text aussi précise qu’efficace. PostgreSQL propose nativement cette fonctionnalité, mais son support du chinois est limité, car il repose principalement sur la séparation par espaces. L’extension zhparser
résout ce problème en intégrant une segmentation sémantique adaptée à la langue chinoise, permettant ainsi à PostgreSQL de reconnaître les frontières lexicales pour effectuer une recherche full-text performante.
ServBay intègre déjà zhparser
, ce qui évite toute compilation ou installation manuelle de l’extension et vous permet de rapidement disposer d’un environnement de développement local apte à supporter la recherche full-text en chinois.
2. Prérequis
Avant d’utiliser zhparser
, assurez-vous que :
- ServBay est bien installé sur votre machine.
- Le package PostgreSQL de ServBay est activé et en cours d’exécution. Vous pouvez vérifier et gérer les statuts des packages via l’interface de l’application ServBay.
3. Installation (Activation) de l’extension zhparser
ServBay a déjà placé les fichiers nécessaires de zhparser
à l’emplacement requis par PostgreSQL. Il vous suffit donc d’activer l’extension dans la base de données cible via une commande SQL.
Connectez-vous à votre base PostgreSQL :
Ouvrez un terminal et utilisez l’outil en ligne de commandepsql
pour vous connecter à la base PostgreSQL fournie par ServBay. Remplacezservbay-demo
par votre nom d'utilisateur réel, etyour_database_name
par le nom de votre base où vous souhaitez activerzhparser
:bashpsql -U servbay-demo -d your_database_name
1Si vous vous connectez à la base par défaut (généralement du même nom que l'utilisateur), l’option
-d
est facultative.Créer l’extension
zhparser
:
Dans l’interfacepsql
, exécutez la commande suivante :sqlCREATE EXTENSION zhparser;
1Si la commande s’exécute sans erreur, c’est que l’activation a réussi. Si un message indique que l’extension existe déjà, cela signifie qu’elle est déjà active.
Vérifier l’installation de
zhparser
:
Pour lister toutes les extensions installées dans la base :sql\dx
1L’affichage doit inclure
zhparser
et son numéro de version.
4. Configuration de zhparser
Une fois activée, il faut configurer le système de recherche textuelle de PostgreSQL pour utiliser zhparser
comme outil de segmentation. Cela implique principalement la création d’une configuration de recherche textuelle (Text Search Configuration).
Créer une configuration de recherche textuelle :
Définissez comment les documents et les requêtes sont transformés entsvector
(pour l’indexation) et entsquery
(pour la recherche). Créons une configuration nomméechinese
, utilisantzhparser
en tant que PARSER :sqlCREATE TEXT SEARCH CONFIGURATION chinese (PARSER = zhparser);
1Ajouter les mappings de dictionnaire :
Chaque type de token reconnu parzhparser
(nom, verbe, adjectif, etc.) peut être associé à un dictionnaire pour traitement. Ici, nous associons les tags noun (n), verb (v), adjective (a), idiom (i), emotion word (e), numeral (l), etc., au dictionnairesimple
, qui conserve le résultat brut de la segmentation :sqlALTER TEXT SEARCH CONFIGURATION chinese ADD MAPPING FOR n,v,a,i,e,l WITH simple; -- Vous pouvez ajouter ou modifier les tags et dictionnaires selon vos besoins.
1
2Remarque : Les tags de
zhparser
peuvent différer légèrement de ceux des solutions NLP standards. Ceux listés ici sont les plus courants pourzhparser
.
5. Utiliser zhparser pour la Recherche Full-Text en Chinois
Après configuration, vous pouvez utiliser zhparser
pour la recherche full-text. Voici un exemple d’utilisation.
5.1 Créer une Table et Insérer des Données de Test
Création de table :
sqlCREATE TABLE documents ( id SERIAL PRIMARY KEY, content TEXT );
1
2
3
4Insertion de données d’exemple :
sqlINSERT INTO documents (content) VALUES ('我爱自然语言处理'), ('中文分词是文本处理的重要步骤'), ('zhparser 是一个很好的中文分词工具'), ('ServBay 让本地开发更便捷');
1
2
3
4
5
5.2 Créer un Index Full-Text
Pour des performances optimales, surtout sur de gros volumes, il est recommandé de créer un index sur la colonne de texte recherchée. Un index GIN (Generalized Inverted Index) est particulièrement efficace pour ce type de recherche.
Créer un index GIN :
Appliquons-le sur la colonnecontent
en utilisant la configurationchinese
:sqlCREATE INDEX idx_gin_content ON documents USING gin (to_tsvector('chinese', content));
1
5.3 Effectuer des Requêtes de Recherche Full-Text
Vous pouvez utiliser to_tsquery
pour convertir vos mots-clés en requête, et l’opérateur @@
pour la correspondance avec l’index.
Exemple de requête de recherche :
Cherchons les documents contenant à la fois “中文” et “分词” :sqlSELECT id, content, to_tsvector('chinese', content) AS content_tsvector -- Optionnel : pour voir le résultat de la segmentation FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', '中文 & 分词');
1
2
3
4
5
6Cette requête retournera les documents avec
id
2 et 3, car ils contiennent tous deux “中文” et “分词”.Autres exemples possibles :
- Recherche de documents contenant “ServBay” :sql(Renverra le document avec l’id 4)
SELECT * FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', 'ServBay');
1 - Recherche de documents contenant “自然语言处理” :sql(Renverra le document avec l’id 1. Attention, suivant la segmentation et le dictionnaire, “自然语言处理” peut être reconnu comme un mot unique ou segmenté. Avec un dictionnaire personnalisé, la précision est encore meilleure.)
SELECT * FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', '自然语言处理');
1
- Recherche de documents contenant “ServBay” :
6. Créer Un Dictionnaire Personnalisé avec scws Intégré à ServBay
ServBay embarque la bibliothèque scws
, permettant à zhparser
d’utiliser des dictionnaires personnalisés pour une segmentation optimisée, notamment pour les termes spécialisés, jargon ou néologismes.
6.1 Création d’un Fichier de Dictionnaire Personnalisé
Créer ou éditer le fichier de dictionnaire :
ServBay recommande de placer les fichiers dictionnaires de scws dans/Applications/ServBay/etc/scws/
. Créez le fichiercustom_dict.txt
(s’il n’existe pas déjà) :bash# Créer ou éditer le fichier dans le terminal nano /Applications/ServBay/etc/scws/custom_dict.txt
1
2Ajouter des mots au dictionnaire :
Inscrivez sur chaque ligne un mot que vous souhaitez voir reconnu comme ensemble parzhparser
:plaintext自然语言处理 中文分词 ServBay 本地开发环境
1
2
3
4Sauvegardez et fermez le fichier.
6.2 Configurer zhparser pour Utiliser un Dictionnaire Personnalisé
Indiquez à zhparser
le chemin de votre dictionnaire personnalisé.
Définir le paramètre
zhparser.dict_path
:sqlSET zhparser.dict_path = '/Applications/ServBay/etc/scws/custom_dict.txt'; -- Veillez à ce que le chemin soit correct et lisible par l’utilisateur PostgreSQL.
1
2Note : Le paramètre modifié par
SET
n’est valable que pour la session en cours. Pour qu’il soit permanent sur toutes les connexions, éditez le fichierpostgresql.conf
et ajoutezzhparser.dict_path = '/Applications/ServBay/etc/scws/custom_dict.txt'
, puis redémarrez PostgreSQL (via l’interface ServBay). Pour le développement local, employez simplementSET
selon les besoins.
6.3 Recharger le Dictionnaire
Après modification du dictionnaire, il faut informer zhparser
de recharger le fichier concerné.
Recharger via la fonction dédiée :
sqlSELECT zhprs_reload_dict();
1Dès lors, toutes les segmentations futures utiliseront le nouveau contenu du dictionnaire personnalisé.
7. Ajuster le Mode de Segmentation
zhparser
propose différents modes influant sur la granularité de la segmentation. Le principal paramètre de contrôle est zhparser.seg_with_duality
.
7.1 Choisir et Régler un Mode de Segmentation
- Définir le paramètre
zhparser.seg_with_duality
:- Valeur
true
: active le “mode bigramme”, avec une segmentation très fine, utile pour améliorer le rappel (retrouver plus de résultats pertinents). Par exemple, “自然语言处理” sera segmenté en “自然”, “语言”, “处理”, “自然语言”, “语言处理”, etc.sqlSET zhparser.seg_with_duality = true;
1 - Valeur
false
: privilégie une segmentation plus grossière, donnant priorité à l’appariement le plus long du dictionnaire, pour une recherche plus précise. Ainsi, “自然语言处理” sera considéré comme un seul mot si le dictionnaire contient cette entrée.sqlSET zhparser.seg_with_duality = false;
1
postgresql.conf
pour une application globale. - Valeur
8. FAQ – Questions Fréquentes
- Q : La commande
CREATE EXTENSION zhparser;
retourne une erreur de module introuvable ?
R : Assurez-vous que le package PostgreSQL de ServBay est bien installé et en service. ServBay place les fichiers nécessaires dezhparser
dans le répertoire des extensions de PostgreSQL. Si le problème persiste, vérifiez l’intégrité de votre installation ServBay/PostgreSQL ou redémarrez ServBay. - Q : Le dictionnaire personnalisé n’est pas pris en compte ?
R : Veillez à :- Avoir correctement défini le paramètre
zhparser.dict_path
avec le chemin du fichier dictionnaire (/Applications/ServBay/etc/scws/custom_dict.txt
), en respectant la casse. - Avoir exécuté
SELECT zhprs_reload_dict();
après modification ou création du chemin pour recharger le dictionnaire. - La syntaxe du dictionnaire (un mot par ligne) est correcte.
- Si vous testez dans une nouvelle session, relancez la commande
SET zhparser.dict_path = ...;
, ou assurez-vous que la modification figure danspostgresql.conf
et que PostgreSQL a été redémarré. - L’utilisateur PostgreSQL a bien les droits de lecture sur le fichier dictionnaire.
- Avoir correctement défini le paramètre
- Q : Les résultats de recherche full-text ne correspondent pas aux attentes ?
R : Vérifiez la configuration textuelle (chinese
) et les mappings de tags/dictionnaire. Essayez de modifier le paramètrezhparser.seg_with_duality
pour analyser les effets. UtilisezSELECT to_tsvector('chinese', 'votre texte chinois');
afin de voir comment le texte est segmenté. Vérifiez la syntaxe de vos recherches (to_tsquery
) et l’emploi des bons opérateurs (&
,|
,!
). - Q : Les performances de la recherche full-text sont dégradées ?
R : Confirmez que l’index GIN a bien été créé sur la colonne gérantto_tsvector(...)
. Pour les bases volumineuses, examinez aussi les paramètres avancés de PostgreSQL et l’usage d’index supplémentaires si besoin.
9. Conclusion
Grâce à ServBay, la mise en place d'une recherche full-text sophistiquée pour le chinois via zhparser
dans PostgreSQL devient simple et rapide. En seulement quelques étapes, activez l’extension, configurez la recherche textuelle et exploitez la puissance de scws pour adapter le dictionnaire à vos besoins. Maîtriser les usages et réglages de zhparser
renforcera grandement vos capacités de traitement du texte chinois dans votre environnement de développement, et posera les bases solides de vos applications en chinois.