4

アラビア語のテキストを含む 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 データの例:

分音符号のない文字のみを検索すると、単語 قُلْ は見つかりません。

4

2 に答える 2

5

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

NORM_IGNORENONSPACEも役立つ場合があります。それからまた、それはそうではないかもしれません

または(推測しているだけですが)、 GetStringTypeExを使用して文字列を解析し、発音区別符号を手動で削除できる場合があります。おそらく、最初にフラグMAP_COMPOSITEを指定してFoldStringまたはMultiByteToWideCharを呼び出す必要があります。

于 2009-04-09T06:08:55.427 に答える
2

分音記号だけが問題ではないことがわかりました。

文字の置換を行い、それらを空の文字列に置き換えます。また、テキスト 'أ' 'إ' 'آ' を正規化し、すべて 'ا' に変換します。 .

検索には、「khoja Stemmer」のような軽量ステマーも使用します (Java ソースはこちら) 。

より高度な方法は、TRECのようにすることです:

  • 句読点を削除
  • 分音符号を削除 (主に弱母音) コーパスのほとんどに弱母音が含まれていませんでした。
  • 辞書のエントリの一部に弱い母音が含まれていました。これにより、すべてが一貫したものになりました。
  • 文字以外を削除
  • 最初の إ または أ をそのままの alif に置き換えます。
  • â を â に置き換えます。
  • シーケンス ىء を ئ に置き換えます
  • 最後の ى を ي に置き換えます
  • 末尾の を æ に置き換えます
  • 正規化された単語の先頭から 6 つの接頭辞を取り除きます。
  • 単語の末尾から 10 個の接尾辞を取り除きます。

この変更されたテキストでテキストにインデックスを付け (メモの場合、元のテキストに単語のインデックスを保存します)、検索クエリに対して同じことを行います。

行ごとではなく、Memo1.Text も検索します。検索は、行末にある複数の単語を検索して、次の行に折り返すことができます。

于 2009-05-23T22:59:46.580 に答える