Hola equipo de Discourse,
Estamos ejecutando un foro multilingüe con un contenido significativo en árabe y persa, y hemos encontrado una limitación crítica en la funcionalidad de búsqueda relacionada con la normalización ortográfica del árabe.
Descripción del problema
El script árabe incluye múltiples representaciones Unicode para caracteres semánticamente idénticos. Desafortunadamente, el motor de búsqueda actual de Discourse parece tratar estas variantes como distintas, lo que lleva a resultados de búsqueda incompletos o engañosos.
Ejemplos:
- Buscar
إطلاق مقاميsolo devuelve coincidencias exactas, mientras que las publicaciones que contienenاطلاق مقامي,أطلاق مقاميoإطلاقمقاميse excluyen. - De manera similar, buscar
ي(U+064A) no coincide conی(U+06CC), yك(U+0643) no coincide conک(U+06A9), a pesar de su equivalencia funcional en contextos árabes/persas.
Esto afecta no solo a las variantes de hamza (أ, إ, ء, ؤ, ئ) sino también a sustituciones comunes como:
| Carácter | Unicode | Normalización Sugerida |
|---|---|---|
أ, إ, ء, آ |
U+0623, U+0625, U+0621, U+0622 | Normalizar a ا |
ؤ |
U+0624 | Normalizar a و |
ئ |
U+0626 | Normalizar a ي |
ى |
U+0649 | Normalizar a ي |
ة |
U+0629 | Normalizar a ه |
ي vs ی |
U+064A vs U+06CC | Normalizar a ی |
ك vs ک |
U+0643 vs U+06A9 | Normalizar a ک |
Este problema se agrava cuando los usuarios omiten los diacríticos o utilizan diferentes diseños de teclado, lo que resulta en un comportamiento de búsqueda fragmentado.
Solución Propuesta
Recomendamos implementar una capa de normalización consciente de Unicode durante la indexación y el análisis de consultas. Esto se puede lograr mediante:
- Preprocesamiento del contenido indexado y las consultas de usuario para unificar las variantes de caracteres.
- Aplicación de reglas de normalización similares a las utilizadas en bibliotecas de PNL árabes o motores de búsqueda (por ejemplo, Farasa, Hazm o mapeadores personalizados basados en expresiones regulares).
- Opcionalmente, soporte de coincidencia difusa o distancia de Levenshtein para coincidencias casi exactas.
Aquí hay un ejemplo simplificado de una función de normalización (estilo Java):
public static String normalizeArabic(String text) {
return text.replace("أ", "ا")
.replace("إ", "ا")
.replace("آ", "ا")
.replace("ؤ", "و")
.replace("ئ", "ي")
.replace("ى", "ي")
.replace("ة", "ه")
.replace("ي", "ی")
.replace("ك", "ک");
}
Solicitud
¿Se podría considerar la inclusión de esta normalización en el motor de búsqueda principal o como un plugin? Mejoraría significativamente la usabilidad para las comunidades de habla árabe y persa que utilizan Discourse.
Si existe una solución alternativa o un plugin que aborde esto, agradeceríamos cualquier orientación.
Gracias por su tiempo y por construir una plataforma tan potente.
Saludos cordiales