PostgreSQLLa base de données la plus sophistiquée au monde.

Version anglaise

F.43. unaccent

unaccent est un dictionnaire de recherche plein texte qui supprime les accents d'un lexeme. C'est un dictionnaire de filtre, ce qui signifie que sa sortie est passée au prochain dictionnaire (s'il y en a un), contrairement au comportement normal des dictionnaires. Cela permet le traitement des accents pour la recherche plein texte.

L'implémentation actuelle d'unaccent ne peut pas être utilisée comme un dictionnaire de normalisation pour un dictionnaire thesaurus.

F.43.1. Configuration

Le dictionnaire unaccent accepte les options suivantes :

  • RULES est le nom de base du fichier contenant la liste des règles de traduction. Ce fichier doit être stocké dans le répertoire $SHAREDIR/tsearch_data/ ($SHAREDIR étant le répertoire des données partagées de PostgreSQL™). Son nom doit se terminer avec l'extension .rules (qui ne doit pas être inclus dans le paramètre RULES).

Le fichier des règles a le format suivant :

  • Chaque ligne représente une paire, consistant en un caractère avec accent suivi par un caractère sans accent. Le premier est traduit par le second. Par exemple :

    À        A
    Á        A
    Â         A
    Ã        A
    Ä          A
    Å         A
    Æ         A

Un exemple plus complet, qui est directement utile pour les langages européens, se trouve dans unaccent.rules, qui est installé dans le répertoire $SHAREDIR/tsearch_data/ une fois le module unaccent installé.

F.43.2. Utilisation

Installer l'extension unaccent crée un modèle de recherche de texte appelé unaccent et un dictionnaire basé sur ce modèle, appelé lui-aussi unaccent. Le dictionnaire unaccent a le paramètre par défaut RULES='unaccent', qui le rend directement utilisable avec le fichier standard unaccent.rules. Si vous le souhaitez, vous pouvez modifier le paramètre. Par exemple :

ma_base=# ALTER TEXT SEARCH DICTIONARY unaccent (RULES='mes_regles');
     

Vous pouvez aussi créer des nouveaux dictionnaires basés sur le modèle.

Pour tester le dictionnaire, vous pouvez essayer la requête suivante :

ma_base=# select ts_lexize('unaccent','Hôtel');
 ts_lexize
-----------
 {Hotel}
(1 row)
     

Voici un exemple montrant comment installer le dictionnaire unaccent dans une configuration de recherche plein texte :

ma_base=# CREATE TEXT SEARCH CONFIGURATION fr ( COPY = french );
ma_base=# ALTER TEXT SEARCH CONFIGURATION fr
        ALTER MAPPING FOR hword, hword_part, word
        WITH unaccent, french_stem;
ma_base=# select to_tsvector('fr','Hôtels de la Mer');
    to_tsvector
-------------------
 'hotel':1 'mer':4
(1 row)

ma_base=# select to_tsvector('fr','Hôtel de la Mer') @@ to_tsquery('fr','Hotels');
 ?column?
----------
 t
(1 row)
ma_base=# select ts_headline('fr','Hôtel de la Mer',to_tsquery('fr','Hotels'));
      ts_headline
------------------------
  <b>Hôtel</b>de la Mer
(1 row)

     

F.43.3. Fonctions

La fonction unaccent() supprime les accents d'une chaîne de caractères donnée. Il utilise le dictionnaire unaccent mais il peut être utilisé en dehors du contexte normal de la recherche plein texte.

unaccent([dictionary regdictionary, ] string text) returns text
    

Si l'argument dictionary est omis, le dictionnaire de recherche plein texte nommé unaccent et apparaissant dans le même schéma que la fonction unaccent() est utilisé.

SELECT unaccent('unaccent','Hôtel');
SELECT unaccent('Hôtel');