Hallo Discourse-Team,
wir betreiben ein mehrsprachiges Forum mit erheblichen arabischen und persischen Inhalten und sind auf eine kritische Einschränkung der Suchfunktionalität im Zusammenhang mit der arabischen orthografischen Normalisierung gestoßen.
Problembeschreibung
Das arabische Skript enthält mehrere Unicode-Darstellungen für semantisch identische Zeichen. Leider scheint die aktuelle Suchmaschine von Discourse diese Varianten als unterschiedlich zu behandeln, was zu unvollständigen oder irreführenden Suchergebnissen führt.
Beispiele:
- Eine Suche nach
إطلاق مقاميliefert nur exakte Treffer, während Beiträge mitاطلاق مقامي,أطلاق مقاميoderإطلاقمقاميausgeschlossen werden. - Ähnlich stimmt die Suche nach
ي(U+064A) nicht mitی(U+06CC) überein, undك(U+0643) stimmt nicht mitک(U+06A9) überein, obwohl sie im arabischen/persischen Kontext funktional äquivalent sind.
Dies betrifft nicht nur Hamza-Varianten (أ, إ, ء, ؤ, ئ), sondern auch gängige Ersetzungen wie:
| Zeichen | Unicode | Vorgeschlagene Normalisierung |
|---|---|---|
أ, إ, ء, آ |
U+0623, U+0625, U+0621, U+0622 | Normalisierung zu ا |
ؤ |
U+0624 | Normalisierung zu و |
ئ |
U+0626 | Normalisierung zu ي |
ى |
U+0649 | Normalisierung zu ي |
ة |
U+0629 | Normalisierung zu ه |
ي vs ی |
U+064A vs U+06CC | Normalisierung zu ی |
ك vs ک |
U+0643 vs U+06A9 | Normalisierung zu ک |
Dieses Problem wird durch das Weglassen von Diakritika durch Benutzer oder die Verwendung unterschiedlicher Tastaturlayouts noch verschärft, was zu einem fragmentierten Suchverhalten führt.
Vorgeschlagene Lösung
Wir empfehlen die Implementierung einer Unicode-fähigen Normalisierungsschicht sowohl bei der Indizierung als auch bei der Abfrageverarbeitung. Dies kann erreicht werden durch:
- Vorverarbeitung sowohl des indizierten Inhalts als auch der Benutzerabfragen, um Zeichenvarianten zu vereinheitlichen.
- Anwendung von Normalisierungsregeln, ähnlich denen, die in arabischen NLP-Bibliotheken oder Suchmaschinen verwendet werden (z. B. Farasa, Hazm oder benutzerdefinierte Regex-basierte Mapper).
- Optional: Unterstützung von Fuzzy-Matching oder Levenshtein-Distanz für nahezu exakte Treffer.
Hier ist ein vereinfachtes Beispiel für eine Normalisierungsfunktion (im Java-Stil):
public static String normalizeArabic(String text) {
return text.replace("أ", "ا")
.replace("إ", "ا")
.replace("آ", "ا")
.replace("ؤ", "و")
.replace("ئ", "ي")
.replace("ى", "ي")
.replace("ة", "ه")
.replace("ي", "ی")
.replace("ك", "ک");
}
Anfrage
Könnte diese Normalisierung für die Aufnahme in die Kernsuchmaschine oder als Plugin in Betracht gezogen werden? Sie würde die Benutzerfreundlichkeit für arabische und persische Gemeinschaften, die Discourse nutzen, erheblich verbessern.
Wenn es eine bestehende Problemumgehung oder ein Plugin gibt, das dieses Problem löst, würden wir uns über jede Anleitung freuen.
Vielen Dank für Ihre Zeit und dafür, dass Sie eine so leistungsstarke Plattform aufbauen.
Mit freundlichen Grüßen