Pregunta

Estoy teniendo archivo codificado en UTF-8, que contiene el texto árabe y tengo que buscarla.

Mi problema son los signos diacríticos, cómo buscar saltarse ellos?

Al igual que si se carga ese texto en Internet Explorer (conversión de texto en HTML por supuesto), es decir se está saltando esos signos diacríticos?

Cualquier ayuda?

Edit1 : La búsqueda se realiza simplemente siguiente código:

 var m1 : TMemo; //contains utf-8 data)
     m2 : TMemo; // contains results

 ...

      m2.lines.BeginUpdate;
      for s in m1.Lines do
      begin
        if pos(eSearch.Text,s)>0 then
           begin
           m2.Lines.Add(s);
           end;
      end;
      m2.Lines.EndUpdate;

Edit2 : Ejemplo de datos Unicode:

قل هو الله أحد Si se busca sólo letras sin diacríticos قل la palabra قل suele ser encontrado.

¿Fue útil?

Solución

Me parece que diacríticos no son el único problema.

Me gustaría hacer sustituciones de caracteres, sustituyéndolos por cadenas vacías, también me normalizar el texto 'أ' 'إ' 'آ' son todos convierte en 'ا', y también hacer lo mismo para ى ئ ي ؤ و ة ه ...

Para la búsqueda También me gustaría usar una despalilladora luz como el "despalilladora khoja" (fuente de Java aquí )

Una forma más avanzada es hacerlo como TREC :

  • Eliminar puntuacion
  • Eliminar diacríticos (principalmente vocales débiles) La mayor parte del corpus no contenía vocales débiles.
  • Algunas de las entradas del diccionario contenía vocales débiles. Esto hizo que todo coherente.
  • Eliminar las cartas no
  • Reemplazar inicial إ o أ con alif desnudo .ا
  • Reemplazar آ con ا
  • reemplazar la secuencia ىء con ئ
  • Reemplazar última ى con ي
  • Reemplazar última ة con ه
  • tira 6 prefijos: artículos definidos (فال آال, بال, وال, ال,) y و (Y) a partir de los comienzos de palabras normalizados
  • banda 10 sufijos de los extremos de palabras ات ان, ها, ي ة, ه, ية, يه, ين, ون

Me indexar el texto de este texto modificado (para las notas que había almacenar el índice de la palabra en el texto original), y hacer lo mismo para la consulta de búsqueda.

También me busco en Memo1.Text y no las líneas de una en una, la búsqueda podría ser de varias palabras que pueden estar al final de una línea y envueltos a la siguiente línea.

Otros consejos

En Vista + probablemente pueda (no tengo experiencia con el árabe) utiliza CompareString con la opción LINGUISTIC_IGNOREDIACRITIC.

NORM_IGNORENONSPACE también puede ayudar. Por otra parte, no puede .

Como alternativa (pero sólo estoy adivinando) puede ser capaz de analizar sus secuencias con GetStringTypeEx y quitar manualmente los signos diacríticos. Probablemente tendría que llamar FoldString o MultiByteToWideChar con la bandera MAP_COMPOSITE primero.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top