Vorschlag für eine leichte Verbesserung der französischen Suchverarbeitung ("œ" und "æ" Sonderzeichen)

Einige französische Wörter verwenden die folgenden Zeichen:

  • Œ, œ, wie in œuf (Ei) oder cœur (Herz), œuvre (mehrere Übersetzungen und Bedeutungen, daher werde ich hier nicht näher darauf eingehen, es spielt keine Rolle), etc.
  • Æ, æ, wie in nævus (der wissenschaftliche Begriff für Muttermal (der Punkt auf der Haut, nicht das Tier) oder andere).

æ wird selten verwendet (ich glaube, es sind immer wissenschaftliche/medizinische Begriffe aus dem Lateinischen?), aber œ ist in der französischen Sprache recht verbreitet.

Leider sind diese Sonderzeichen auf dem französischen Tastaturlayout nicht vorhanden, und viele Leute schreiben einfach „oe“ oder „ae“ anstelle davon.
Aber einige Benutzer haben benutzerdefinierte Layouts, und die automatische Korrektur von Smartphones oder andere Schreibassistenzsysteme korrigieren die Wörter oft automatisch mit den richtigen „zusammengeführten Zeichen“, wie z. B. „oeuvre“ → „œuvre“.

Derzeit verarbeitet die Suche „oe“ und „œ“ als unterschiedliche Zeichenfolgen, was zu unterschiedlichen Ergebnissen führt, die eigentlich gleich sein sollten.

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

Mein Vorschlag ist, dass „oe“ und „œ“, „OE“ und „Œ“ als identische Zeichenfolgen verarbeitet werden sollten. Und das Gleiche gilt für „ae“ und „æ“, „AE“ und „Æ“.

9 „Gefällt mir“

Sehr interessantes Problem @zogstrip / @j.jaffeux, was meint ihr? Wir könnten einen Normalizer hinter einer Website-Einstellung hinzufügen.

3 „Gefällt mir“
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)

Ich dachte aus irgendeinem Grund, dass die Behandlung von diakritischen Zeichen, Ligaturen und Ähnlichem ein gelöstes Problem bei der Suche sei… Ich schätze nicht? :man_shrugging:

Als :fr: unterstütze ich das definitiv. Es sieht so aus, als könnten wir PostgreSQLs unaccent verwenden, das Akzente entfernt und sich auch mit gängigen Ligaturen befasst.

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 „Gefällt mir“

Und als Franzose, hasst du auch die nutzlose Komplexität dieser (wenn auch interessanten) Sprache so sehr wie ich? :smile:
Entschuldigung für den leichten Off-Topic-Humor

4 „Gefällt mir“

Sollten wir die Implementierung von search_ignore_accents einfach so ändern, dass unaccent verwendet wird, oder bräuchten wir eine komplett neue Einstellung?

Ich würde die Implementierung von ignore accents einfach ändern, da sie ohnehin mit dem übereinstimmt, was PG tut.

3 „Gefällt mir“

Das ist eine gute Frage :thinking:
Das würde definitiv für :fr: funktionieren, aber es könnte andere Lokalisierungen geben, bei denen es nicht wie erwartet funktioniert?
Nachdem ich mir die Dateien /usr/share/postgresql/13/tsearch_data/unaccent.rules angesehen habe, sieht es ziemlich sicher aus.
Ich unterstütze definitiv die Entfernung und die Umstellung unserer search_ignore_accents-Einstellung auf die Verwendung von PostgreSQLs unaccent :+1:
@nbianca kannst du das zu deiner Liste hinzufügen?

3 „Gefällt mir“

Ich habe unsere alte Ruby-Implementierung in diesem PR durch das Postgresql-unaccent ersetzt:

5 „Gefällt mir“

Dieses Thema wurde nach 3 Tagen automatisch geschlossen. Neue Antworten sind nicht mehr möglich.