2009-04-08 4 views
4

아랍어 텍스트가 포함 된 utf-8 인코딩 파일을 가지고 있는데 검색해야합니다.Delphi 2009 : 유니 코드 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가 : 유니 코드 데이터의 예 :

قل هو الله أحد 당신이 분음 부호없이 문자 만 검색하는 경우 قل 단어는 찾을 수 없습니다.

+0

검색은 어떻게 수행합니까? –

+0

코드가 질문에 추가되었습니다. –

답변

2

필자는 분음 기호가 유일한 문제는 아님을 알았습니다.

나는 빈 문자열로 바꾸고, 'أ' 'إ' '모두'Ç '로 변환하고, Í ئ ي ל و ة ه ... 검색하십시오

나는 또한 "khoja의 형태소 분석기"(Java 소스 here) 같은 빛 형태소 분석기를 사용하십시오

더 진보 된 방법은 TREC처럼하는 것입니다 :

  • 구두점 제거
  • 발음 구별 기호 (주로 약한 모음)를 제거합니다. 대부분의 코퍼스에는 약한 모음이 포함되어 있지 않았습니다.
  • 일부 사전 항목에는 약한 모음이 포함되어 있습니다. 이로 인해 모든 것이 일관되게되었습니다.
  • 비 문자 제거
  • 초기 ia 또는 أ을 베어 알프로 바꿉니다.ا
  • 는 ئ
  • 와 시퀀스 ىء ه
  • 스트립 6 접두사 ة 최종 교체 ي
  • 으로 ى 최종 교체 장착 ا
  • 으로 آ 장착 : 정관사 (فال آال, بال, وال을
  • 스트립 (10) 접미사 단어의 끝에서 정규화 된 단어의 처음에서 ال) 및 و (및) ات ان, ها, ي ة, ه, ية, يه, ين, ون

나는이 수정 된 텍스트로 텍스트를 색인화하고 (메모의 경우 원래 단어에 단어의 색인을 저장합니다) 검색 쿼리에 대해 동일한 작업을 수행합니다.

나는 또한 Memo1.Text에서 하나씩 검색하지 않을 것이고, 검색은 한 줄 끝에있을 수 있고 다음 줄로 감싸는 여러 단어 일 수 있습니다.

5

Vista에서는 + (아랍어 사용 경험이 없음) CompareString 옵션을 사용할 수 있습니다 (LINGUISTIC_IGNOREDIACRITIC 옵션).

NORM_IGNORENONSPACE도 도움이 될 수 있습니다. 그런 다음 다시 it may not.

또는 (다만 추측하고있는 바) GetStringTypeEx으로 문자열을 구문 분석하고 분음 기호를 수동으로 제거 할 수 있습니다. 아마 MAP_COMPOSITE 플래그가있는 FoldString 또는 MultiByteToWideChar으로 전화해야합니다.