2009-04-08 78 views
4

我有utf-8編碼文件包含阿拉伯文本,我必須搜索它。德爾福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

你如何執行搜索? – 2009-04-08 14:04:21

回答

2

我發現變音符不是唯一的問題。

我會做字符替換,用空字符串取代它們,我還會規範化文本'أ''إ''''全部轉換爲''',並且也爲ìؤdo ةه...

對於搜索我還使用了光詞幹像「加尼詞幹」(Java源here

更先進的方法是做它喜歡TREC

  • 刪除標點符號
  • 刪除變音符號(主要是弱元音)大部分語料庫不包含弱元音。
  • 一些字典條目包含弱元音。這使得一切都一致。
  • 刪除非字母
  • 用裸alif替換初始إ或أ。ا
  • 替換آ與ا
  • 更換序列ىء與ئ
  • 替換最終ى與ي
  • 替換最終ة與ه
  • 地帶6個前綴:定冠詞(فالآال,بال,وال, ال,)和و從歸一化的話,從單詞的端部
  • 地帶10個後綴的開端 (和)اتان,ها,ية,ه,ية,يه,ين,ون

我會通過這個修改後的文本(對於備忘錄我將這個詞的索引存儲在原始文本中)索引文本,併爲搜索查詢做同樣的事情。

我也會在Memo1.Text中搜索,而不是逐行搜索,搜索可能是多個單詞,可能在一行的末尾幷包裝到下一行。

5

在Vista +上,您可以(我沒有阿拉伯語的經驗)使用CompareString並帶有LINGUISTIC_IGNOREDIACRITIC選項。

NORM_IGNORENONSPACE也可能有所幫助。然後再次,it may not

另外(但我只是猜測)你可能能夠解析你的字符串GetStringTypeEx並手動刪除變音符號。可能您必須先致電FoldStringMultiByteToWideChar,並首先標記MAP_COMPOSITE。

相關問題