Bonjour l’équipe Discourse,
Nous gérons un forum multilingue avec un contenu arabe et persan important, et nous avons rencontré une limitation critique dans la fonctionnalité de recherche liée à la normalisation orthographique arabe.
Description du problème
L’écriture arabe comprend plusieurs représentations Unicode pour des caractères sémantiquement identiques. Malheureusement, le moteur de recherche actuel de Discourse semble traiter ces variantes comme distinctes, ce qui entraîne des résultats de recherche incomplets ou trompeurs.
Exemples :
- Rechercher
إطلاق مقاميne renvoie que des correspondances exactes, tandis que les messages contenantاطلاق مقامي,أطلاق مقامي, ouإطلاقمقاميsont exclus. - De même, la recherche de
ي(U+064A) ne correspond pas àی(U+06CC), etك(U+0643) ne correspond pas àک(U+06A9), malgré leur équivalence fonctionnelle dans les contextes arabe/persan.
Cela affecte non seulement les variantes de hamza (أ, إ, ء, ؤ, ئ), mais aussi les substitutions courantes telles que :
| Caractère | Unicode | Normalisation suggérée |
|---|---|---|
أ, إ, ء, آ |
U+0623, U+0625, U+0621, U+0622 | Normaliser en ا |
ؤ |
U+0624 | Normaliser en و |
ئ |
U+0626 | Normaliser en ي |
ى |
U+0649 | Normaliser en ي |
ة |
U+0629 | Normaliser en ه |
ي vs ی |
U+064A vs U+06CC | Normaliser en ی |
ك vs ک |
U+0643 vs U+06A9 | Normaliser en ک |
Ce problème est aggravé lorsque les utilisateurs omettent les diacritiques ou utilisent différentes dispositions de clavier, ce qui entraîne un comportement de recherche fragmenté.
Solution proposée
Nous recommandons la mise en œuvre d’une couche de normalisation consciente de Unicode lors de l’indexation et de l’analyse des requêtes. Cela peut être réalisé en :
- Prétraitant le contenu indexé et les requêtes des utilisateurs pour unifier les variantes de caractères.
- Appliquant des règles de normalisation similaires à celles utilisées dans les bibliothèques de NLP arabe ou les moteurs de recherche (par exemple, Farasa, Hazm, ou des mappeurs personnalisés basés sur des expressions régulières).
- Optionnellement, en prenant en charge la correspondance floue ou la distance de Levenshtein pour des correspondances quasi exactes.
Voici un exemple simplifié d’une fonction de normalisation (style Java) :
public static String normalizeArabic(String text) {
return text.replace("أ", "ا")
.replace("إ", "ا")
.replace("آ", "ا")
.replace("ؤ", "و")
.replace("ئ", "ي")
.replace("ى", "ي")
.replace("ة", "ه")
.replace("ي", "ی")
.replace("ك", "ک");
}
Demande
Cette normalisation pourrait-elle être envisagée pour inclusion dans le moteur de recherche principal ou en tant que plugin ? Cela améliorerait considérablement la convivialité pour les communautés arabophones et persanophones utilisant Discourse.
S’il existe une solution de contournement ou un plugin existant qui résout ce problème, nous apprécierions tout conseil.
Merci de votre temps et de la création d’une plateforme aussi puissante.
Cordialement