Suggestion of a slight improvement regarding French search processing ("œ" and "æ" special characters)

Some French words use the following characters:

  • Œ, œ, like in œuf (egg) or cœur (heart), œuvre (multiple translations and meanings so I won’t detail here, it doesn’t matter), etc.
  • Æ, æ, like in nævus (the scientific term for mole (the dot on the skin, not the animal) or others.

æ is rarely used (I think it’s always scientific/medical terms from Latin?), but œ, however, is quite present in the French language.

Sadly, these special characters aren’t present on the French keyboard layout and a lot of people simply write “oe” or “ae” instead.
But some users have custom layouts, and autocorrection from smartphones, or some other writing help systems often automatically correct the words using the proper “merged characters”, like “oeuvre” → “œuvre”.

Currently, the search processes “oe” and “œ” as different strings, which leads to different results that should be common instead.

Example:
https://forum.monocycle.info/search?q=coeur
https://forum.monocycle.info/search?q=cœur

My suggestion is that “oe” and “œ”, “OE” and “Œ” should be processed as identical strings. And also the same for “ae” and “æ”, “AE” and “Æ”.

9 « J'aime »

Problème très intéressant @zogstrip / @j.jaffeux qu’en pensez-vous ? Nous pourrions ajouter un normaliseur derrière un paramètre de site.

3 « J'aime »
SELECT to_tsvector('french', E'Cette oeuvre d\\'art n\\'est pas une œuvre.');
            to_tsvector
------------------------------------
 'art':4 'cet':1 'oeuvr':2 'œuvr':9
(1 row)

Pour une raison quelconque, je pensais que la gestion des diacritiques, des ligatures et autres était un problème résolu en matière de recherche… J’imagine que non ? :man_shrugging:

En tant que :fr:, je soutiens certainement cela. Il semble que nous pourrions utiliser la fonction unaccent de PostgreSQL qui supprime les accents et gère également les ligatures courantes.

SELECT to_tsvector('french', unaccent('œuvre poêle œuf Noël électroencéphalogramme æ Æ'));
                               to_tsvector
-------------------------------------------------------------------------
 'ae':6,7 'electroencephalogramm':5 'noel':4 'oeuf':3 'oeuvr':1 'poel':2
(1 row)
4 « J'aime »

Et en tant que Français, détestez-vous aussi la complexité inutile de cette langue (bien qu’intéressante) autant que moi ? :smile:
Désolé pour cette petite touche d’humour hors sujet

4 « J'aime »

Devrions-nous simplement modifier l’implémentation de search_ignore_accents pour utiliser unaccent ou aurions-nous besoin d’un tout nouveau paramètre ?

J’aime bien changer simplement l’implémentation de l’ignorance des accents car il y a une parité avec ce que PG fait de toute façon.

3 « J'aime »

C’est une bonne question :thinking:
Cela fonctionnerait certainement pour :fr: mais il pourrait y avoir d’autres locales où cela ne fonctionnerait pas comme prévu ?
Après avoir examiné les fichiers /usr/share/postgresql/13/tsearch_data/unaccent.rules, il semble que ce soit assez sûr.
Je soutiens définitivement la suppression du passage de notre paramètre search_ignore_accents à l’utilisation de unaccent de postgresql :+1:
@nbianca pouvez-vous ajouter cela à votre liste ?

3 « J'aime »

J’ai remplacé notre ancienne implémentation Ruby par la fonction unaccent de Postgresql dans cette PR :

5 « J'aime »

Ce sujet a été automatiquement fermé après 3 jours. Les nouvelles réponses ne sont plus autorisées.