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 commande- psqlpour vous connecter à la base PostgreSQL fournie par ServBay. Remplacez- servbay-demopar votre nom d'utilisateur réel, et- your_database_namepar le nom de votre base où vous souhaitez activer- zhparser:bash- psql -U servbay-demo -d your_database_name1- Si vous vous connectez à la base par défaut (généralement du même nom que l'utilisateur), l’option - -dest facultative.
- Créer l’extension - zhparser:
 Dans l’interface- psql, exécutez la commande suivante :sql- CREATE EXTENSION zhparser;1- Si 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- \dx1- L’affichage doit inclure - zhparseret 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 en- tsvector(pour l’indexation) et en- tsquery(pour la recherche). Créons une configuration nommée- chinese, utilisant- zhparseren tant que PARSER :sql- CREATE TEXT SEARCH CONFIGURATION chinese (PARSER = zhparser);1
- Ajouter les mappings de dictionnaire : 
 Chaque type de token reconnu par- zhparser(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 dictionnaire- simple, qui conserve le résultat brut de la segmentation :sql- ALTER 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
 2- Remarque : Les tags de - zhparserpeuvent différer légèrement de ceux des solutions NLP standards. Ceux listés ici sont les plus courants pour- zhparser.
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 : sql- CREATE TABLE documents ( id SERIAL PRIMARY KEY, content TEXT );1
 2
 3
 4
- Insertion de données d’exemple : sql- INSERT 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 colonne- contenten utilisant la configuration- chinese:sql- CREATE 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 “分词” :sql- SELECT 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
 6- Cette requête retournera les documents avec - id2 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 fichier- custom_dict.txt(s’il n’existe pas déjà) :bash- # Créer ou éditer le fichier dans le terminal nano /Applications/ServBay (macOS) ou C:\ServBay (Windows)/etc/scws/custom_dict.txt1
 2
- Ajouter des mots au dictionnaire : 
 Inscrivez sur chaque ligne un mot que vous souhaitez voir reconnu comme ensemble par- zhparser:plaintext- 自然语言处理 中文分词 ServBay 本地开发环境1
 2
 3
 4- Sauvegardez 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:sql- SET zhparser.dict_path = '/Applications/ServBay (macOS) ou C:\ServBay (Windows)/etc/scws/custom_dict.txt'; -- Veillez à ce que le chemin soit correct et lisible par l’utilisateur PostgreSQL.1
 2- Note : Le paramètre modifié par - SETn’est valable que pour la session en cours. Pour qu’il soit permanent sur toutes les connexions, éditez le fichier- postgresql.confet ajoutez- zhparser.dict_path = '/Applications/ServBay/etc/scws/custom_dict.txt', puis redémarrez PostgreSQL (via l’interface ServBay). Pour le développement local, employez simplement- SETselon 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 : sql- SELECT zhprs_reload_dict();1- Dè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.confpour 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 dezhparserdans 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_pathavec 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.confet 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_dualitypour 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.
