Domanda

Ho dei file codificato UTF-8 contenente testo in arabo e devo cercare di esso.

Il mio problema sono i segni diacritici, come cercare di loro saltare?

Come se si carica il testo in Internet Explorer (conversione del testo in HTML naturalmente), IE è saltare quei segni diacritici?

Qualsiasi aiuto?

Edit1 : Ricerca avviene semplicemente seguente codice:

 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 : Esempio di dati unicode:

قل هو الله أحد Se si cerca solo lettere, senza segni diacritici قل la parola قل non sarà trovato.

È stato utile?

Soluzione

Trovo che segni diacritici non sono l'unico problema.

Vorrei fare sostituzioni di caratteri, la loro sostituzione con stringhe vuote, vorrei anche normalizzare il testo 'أ' 'إ' 'آ' sono tutti convertiti in 'ا', e anche fare lo stesso per ى ئ ي ؤ و ة ه ...

Per una ricerca Mi piacerebbe anche utilizzare uno stemmer luce come il "Khoja Stemmer" (sorgente Java qui )

Un modo più avanzato è quello di farlo come TREC :

  • Rimuovi punteggiatura
  • Rimuovi i segni diacritici (principalmente vocali deboli) La maggior parte del corpus non contenevano vocali deboli.
  • Alcune delle voci del dizionario conteneva vocali deboli. Questo ha reso tutto coerente.
  • Rimuovi non lettere
  • Sostituire iniziale إ o أ con Alif nuda .ا
  • Sostituire آ con ا
  • Sostituire la sequenza ىء con ئ
  • Sostituire finale ى con ي
  • Sostituire finale ة con ه
  • Strip 6 prefissi: articoli determinativi (فال آال, بال, وال, ال,) e و (E) dagli inizi di parole normalizzati
  • nastro 10 suffissi dalle estremità delle parole ات ان, ها, ي ة, ه, ية, يه, ين, ون

vorrei indicizzare il testo da questo testo modificato (per appunti che avevo archiviare l'indice della parola nel testo originale), e fare la stessa cosa per la query di ricerca.

Vorrei anche cercare in Memo1.Text e non le linee uno per uno, la ricerca potrebbe essere per più parole che possono essere alla fine di una linea e avvolti alla riga successiva.

Altri suggerimenti

Su Vista + probabilmente si può (non ho alcuna esperienza con l'arabo) utilizzare CompareString con l'opzione LINGUISTIC_IGNOREDIACRITIC.

NORM_IGNORENONSPACE può anche aiutare. Poi di nuovo, potrebbe non .

In alternativa (ma sto solo indovinando) si può essere in grado di analizzare le corde con GetStringTypeEx e rimuovere manualmente segni diacritici. Probabilmente dovreste chiamare FoldString o MultiByteToWideChar con bandiera MAP_COMPOSITE prima.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top