Question

J'ai fichier encodé utf-8 contenant du texte arabe et je dois le chercher.

Mon problème est diacritiques, comment rechercher les sauter?

Comme si vous chargez ce texte dans Internet Explorer (conversion de texte en HTML ofcourse), IE saute les diacritiques?

Toute aide?

Edit1 : La recherche est simplement effectuée par le code suivant:

 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 : Exemple de données unicode:

قل هو الله أحد Si vous recherchez uniquement des lettres sans diacritiques قل le mot قل trouve coutume.

Était-ce utile?

La solution

Je trouve que diacritiques ne sont pas le seul problème.

Je ferais le remplacement de caractères, en les remplaçant par des chaînes vides, je voudrais aussi normaliser le texte « أ » « إ » « آ » sont tous convertis en « ا », et aussi faire la même chose pour ى ئ ي ؤ و ة ه ...

Pour la recherche j'utiliser aussi un égrappoir de lumière comme le "Khoja égrappoir" (source Java TREC :

  • Supprimer la ponctuation
  • Supprimer diacritiques (principalement les voyelles faibles) La plupart des corpus ne contenait pas les voyelles faibles.
  • Certaines des entrées du dictionnaire contient les voyelles faibles. Cela a tout cohérent.
  • Suppression de lettres non
  • Remplacer initial ou إ أ avec Alif nu .ا
  • Remplacer آ avec ا
  • Remplacer la séquence ىء avec ئ
  • Remplacer finale ى avec ي
  • Remplacer finale ة avec ه
  • Strip 6 préfixes: articles définis (فال آال, بال, وال, ال,) et و (Et) des débuts de mots normalisés
  • Strip 10 suffixes des extrémités des mots ات ان, ها, ي ة, ه, ية, يه, ين, ون

Je indexerait le texte par ce texte modifié (pour les notes de service je stocker l'index du mot dans le texte original), et faire la même chose que pour la requête de recherche.

Je cherche aussi dans Memo1.Text et non les lignes une par une, la recherche pourrait être pour plusieurs mots qui peuvent être à la fin d'une ligne et enveloppées à la ligne suivante.

Autres conseils

Sur Vista + vous pouvez probablement (je n'ai aucune expérience avec l'arabe) utiliser CompareString avec option LINGUISTIC_IGNOREDIACRITIC.

NORM_IGNORENONSPACE peut aussi aider. Là encore, il ne peut pas .

Sinon (mais je suis juste deviner), vous pouvez être en mesure d'analyser vos chaînes avec GetStringTypeEx et supprimer manuellement diacritiques. Probablement vous auriez à appeler FoldString ou MultiByteToWideChar avec le drapeau MAP_COMPOSITE premier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top