Suggerimento di un leggero miglioramento riguardo l'elaborazione della ricerca in francese ("œ" e "æ" caratteri speciali)

Alcune parole francesi usano i seguenti caratteri:

  • Œ, œ, come in œuf (uovo) o cœur (cuore), œuvre (molteplici traduzioni e significati quindi non li dettaglio qui, non importa), ecc..
  • Æ, æ, come in nævus (il termine scientifico per neo (il puntino sulla pelle, non l’animale) o altri.

æ è raramente usato (penso che siano sempre termini scientifici/medici dal latino?), ma œ, tuttavia, è abbastanza presente nella lingua francese.

Purtroppo, questi caratteri speciali non sono presenti sulla tastiera francese e molte persone scrivono semplicemente “oe” o “ae” invece.
Ma alcuni utenti hanno layout personalizzati, e la correzione automatica degli smartphone, o altri sistemi di aiuto alla scrittura correggono spesso automaticamente le parole usando i “caratteri uniti” appropriati, come “oeuvre” → “œuvre”.

Attualmente, la ricerca elabora “oe” e “œ” come stringhe diverse, il che porta a risultati diversi che dovrebbero essere comuni invece.

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

Il mio suggerimento è che “oe” e “œ”, “OE” e “Œ” dovrebbero essere elaborati come stringhe identiche. E anche lo stesso per “ae” e “æ”, “AE” e “Æ”.

9 Mi Piace

Problema molto interessante @zogstrip / @j.jaffeux cosa ne pensi? Potremmo aggiungere un normalizzatore dietro un’impostazione del sito.

3 Mi Piace
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)

Per qualche motivo, pensavo che la gestione di diacritici, legature e simili fosse un problema risolto quando si tratta di ricerca… Immagino di no? :man_shrugging:

Come :fr: supporto decisamente quello. Sembra che potremmo usare l’ unaccent di PostgreSQL che rimuove gli accenti e gestisce anche le legature comuni.

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 Mi Piace

E come francese, odi anche tu la inutile complessità di questa (sebbene interessante) lingua quanto me? :smile:
Scusa per la leggera battuta fuori tema

4 Mi Piace

Dovremmo semplicemente modificare l’implementazione di search_ignore_accents per utilizzare unaccent o avremmo bisogno di un’impostazione completamente nuova?

Mi piace semplicemente cambiare l’implementazione di ignora accenti perché c’è parità con ciò che fa comunque PG.

3 Mi Piace

Questa è una buona domanda :thinking:

Funzionerebbe sicuramente per :fr: ma potrebbero esserci altre localizzazioni in cui potrebbe non funzionare come previsto?

Dopo aver esaminato i file /usr/share/postgresql/13/tsearch_data/unaccent.rules sembra che sia abbastanza sicuro.

Supporto decisamente la rimozione del passaggio della nostra impostazione search_ignore_accents per utilizzare unaccent di postgresql :+1:

@nbianca puoi aggiungerlo alla tua lista?

3 Mi Piace

Ho sostituito la nostra vecchia implementazione Ruby con unaccent di Postgresql in questa PR:

5 Mi Piace

Questo argomento è stato chiuso automaticamente dopo 3 giorni. Non sono più ammesse nuove risposte.