Ciao team di Discourse,
Stiamo gestendo un forum multilingue con un contenuto significativo in arabo e persiano e abbiamo riscontrato una limitazione critica nella funzionalità di ricerca relativa alla normalizzazione ortografica araba.
Descrizione del problema
Lo script arabo include più rappresentazioni Unicode per caratteri semanticamente identici. Sfortunatamente, l’attuale motore di ricerca di Discourse sembra trattare queste varianti come distinte, il che porta a risultati di ricerca incompleti o fuorvianti.
Esempi:
- La ricerca di
إطلاق مقاميrestituisce solo corrispondenze esatte, mentre i post contenentiاطلاق مقامي,أطلاق مقاميoإطلاقمقاميsono esclusi. - Allo stesso modo, la ricerca di
ي(U+064A) non corrisponde aی(U+06CC) eك(U+0643) non corrisponde aک(U+06A9), nonostante la loro equivalenza funzionale nei contesti arabo/persiano.
Ciò influisce non solo sulle varianti di hamza (أ, إ, ء, ؤ, ئ), ma anche sulle sostituzioni comuni come:
| Carattere | Unicode | Normalizzazione suggerita |
|---|---|---|
أ, إ, ء, آ |
U+0623, U+0625, U+0621, U+0622 | Normalizzare a ا |
ؤ |
U+0624 | Normalizzare a و |
ئ |
U+0626 | Normalizzare a ي |
ى |
U+0649 | Normalizzare a ي |
ة |
U+0629 | Normalizzare a ه |
ي vs ی |
U+064A vs U+06CC | Normalizzare a ی |
ك vs ک |
U+0643 vs U+06A9 | Normalizzare a ک |
Questo problema è aggravato quando gli utenti omettono i segni diacritici o utilizzano layout di tastiera diversi, con conseguente comportamento di ricerca frammentato.
Soluzione proposta
Si consiglia di implementare un livello di normalizzazione consapevole di Unicode durante l’indicizzazione e l’analisi delle query. Ciò può essere ottenuto mediante:
- Pre-elaborazione sia del contenuto indicizzato che delle query degli utenti per unificare le varianti dei caratteri.
- Applicazione di regole di normalizzazione simili a quelle utilizzate nelle librerie NLP arabe o nei motori di ricerca (ad esempio, Farasa, Hazm o mapper personalizzati basati su espressioni regolari).
- Opzionalmente, supporto per la corrispondenza approssimativa o la distanza di Levenshtein per corrispondenze quasi esatte.
Ecco un esempio semplificato di una funzione di normalizzazione (stile Java):
public static String normalizeArabic(String text) {
return text.replace("أ", "ا")
.replace("إ", "ا")
.replace("آ", "ا")
.replace("ؤ", "و")
.replace("ئ", "ي")
.replace("ى", "ي")
.replace("ة", "ه")
.replace("ي", "ی")
.replace("ك", "ک");
}
Richiesta
Si potrebbe considerare l’inclusione di questa normalizzazione nel motore di ricerca principale o come plugin? Migliorerebbe significativamente l’usabilità per le comunità arabe e persiane che utilizzano Discourse.
Se esiste una soluzione alternativa o un plugin che affronta questo problema, apprezzeremmo qualsiasi indicazione.
Grazie per il vostro tempo e per aver costruito una piattaforma così potente.
Cordiali saluti