Olá equipe do Discourse,
Estamos executando um fórum multilíngue com conteúdo significativo em árabe e persa e encontramos uma limitação crítica na funcionalidade de pesquisa relacionada à normalização ortográfica árabe.
Descrição do Problema
O script árabe inclui múltiplas representações Unicode para caracteres semanticamente idênticos. Infelizmente, o mecanismo de busca atual do Discourse parece tratar essas variantes como distintas, o que leva a resultados de pesquisa incompletos ou enganosos.
Exemplos:
- Pesquisar por
إطلاق مقاميretorna apenas correspondências exatas, enquanto postagens contendoاطلاق مقامي,أطلاق مقاميouإطلاقمقاميsão excluídas. - Da mesma forma, pesquisar por
ي(U+064A) não corresponde aی(U+06CC), eك(U+0643) falha em corresponder aک(U+06A9), apesar de sua equivalência funcional em contextos árabe/persa.
Isso afeta não apenas as variantes de hamza (أ, إ, ء, ؤ, ئ), mas também substituições comuns como:
| Caractere | Unicode | Normalização Sugerida |
|---|---|---|
أ, إ, ء, آ |
U+0623, U+0625, U+0621, U+0622 | Normalizar para ا |
ؤ |
U+0624 | Normalizar para و |
ئ |
U+0626 | Normalizar para ي |
ى |
U+0649 | Normalizar para ي |
ة |
U+0629 | Normalizar para ه |
ي vs ی |
U+064A vs U+06CC | Normalizar para ی |
ك vs ک |
U+0643 vs U+06A9 | Normalizar para ک |
Esse problema é agravado quando os usuários omitem diacríticos ou usam diferentes layouts de teclado, resultando em comportamento de pesquisa fragmentado.
Solução Proposta
Recomendamos a implementação de uma camada de normalização ciente de Unicode durante a indexação e a análise de consultas. Isso pode ser alcançado por meio de:
- Pré-processamento do conteúdo indexado e das consultas do usuário para unificar as variantes de caracteres.
- Aplicação de regras de normalização semelhantes às usadas em bibliotecas de Processamento de Linguagem Natural (PLN) árabes ou mecanismos de busca (por exemplo, Farasa, Hazm ou mapeadores personalizados baseados em regex).
- Opcionalmente, suporte à correspondência aproximada ou distância de Levenshtein para correspondências quase exatas.
Aqui está um exemplo simplificado de uma função de normalização (estilo Java):
public static String normalizeArabic(String text) {
return text.replace("أ", "ا")
.replace("إ", "ا")
.replace("آ", "ا")
.replace("ؤ", "و")
.replace("ئ", "ي")
.replace("ى", "ي")
.replace("ة", "ه")
.replace("ي", "ی")
.replace("ك", "ک");
}
Solicitação
Essa normalização poderia ser considerada para inclusão no mecanismo de busca principal ou como um plugin? Isso melhoraria significativamente a usabilidade para as comunidades de língua árabe e persa que usam o Discourse.
Se houver uma solução alternativa ou plugin existente que resolva isso, agradeceríamos qualquer orientação.
Obrigado pelo seu tempo e por construir uma plataforma tão poderosa.
Atenciosamente