2009-04-08 12 views
4

アラビア語のテキストを含むutf-8エンコードファイルがあり、検索する必要があります。Delphi 2009:unicode utf-8で発音区別記号をスキップします。

私の問題は分音器です、どのようにそれらをスキップする検索ですか?

Internet Explorerでそのテキストを読み込んだり(HTMLのテキストを変換すると)、IEはこれらの発音区別記号をスキップしていますか?

助けが必要ですか?

EDIT1:検索は、単純に次のコードで実行されます。

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:Unicodeデータの例:

قلهواللهأحد あなたは特殊記号のない文字だけを検索する場合قل単語は見つかりません。

+0

検索はどのように実行しますか? –

+0

コードが質問に追加されます。 –

答えて

2

私は分音符号が唯一の問題ではないことを発見しました。

空の文字列に置き換えて文字の置換を行いますが、テキスト 'أ' 'إ' 'Â'がすべて「Ç」に変換されます。また、Íئيؤو検索のためにةه...

私はまた、より高度な方法はTRECようにそれを行うことです "khojaステマ"(Javaソースhere)のように

を光ステマーを使用したい:

  • 句読点を削除する
  • 発音区別符(主に弱母音)を削除するほとんどのコーパスには弱母音が含まれていませんでした。
  • 辞書エントリの一部に弱い母音が含まれていました。これによりすべてが一貫していました。
  • 非文字を削除する
  • 最初の葉またはiaを裸のアルフに置き換えます。ا
  • はئ
  • とシーケンスىءه
  • ストリップ6つの接頭辞ة最終置き換えي
  • でى最終置き換え置き換えا
  • でآ置き換えます定冠詞(فالآال、بال、والを、
  • ストリップ10の接尾語の端部から正規化された単語の始まりからال)とو (及び)اتان、ها、ية、ه、ية、يه、ين、ون

私はこの変更されたテキストでテキストを索引付けします(メモの場合は、元のテキストに単語の索引を格納します)。

私はMemo1.Textではなく、行を1つずつ検索しますが、行の終わりにあり、次の行に折り返された複数の単語が検索される可能性があります。

5

Vista +ではおそらく(私はアラビア語の経験がありません)CompareStringとオプションLINGUISTIC_IGNOREDIACRITICを使用できます。

NORM_IGNORENONSPACEも役立ちます。そして再び、it may not

(私はちょっと推測していますが)GetStringTypeExで文字列を解析し、手動で発音区別記号を削除することができます。おそらく、MAP_COMPOSITEフラグを持つFoldStringまたはMultiByteToWideCharを最初に呼び出す必要があります。

関連する問題