문제

아랍어 텍스트가 포함 된 UTF-8 인코딩 파일이 있고 검색해야합니다.

내 문제는 Diacritics입니다. 검색 방법을 건너 뛰는 방법은 무엇입니까?

인터넷 익스플로러에 해당 텍스트를로드하는 것처럼 (HTML Ofcourse에서 텍스트를 변환), 즉, 해당 디아크리닉을 건너 뛰고 있습니까?

도움이 있습니까?

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: 유니 코드 데이터의 예 :

Diacritics없는 문자 만 검색하면 قُلْ이 찾을 수 없을 것입니다.

도움이 되었습니까?

해결책

나는 디아크리닉이 유일한 문제가 아니라는 것을 알았습니다.

나는 캐릭터 교체를하고, 빈 줄로 대체하고, 텍스트 'أ' ''إ '' 'آ'도 'ا'로 변환되며 또한 ى ئ Â 우리에게도 동일한 작업을 수행 할 것입니다. .

검색의 경우 "Khoja Stemmer"(Java Source 여기)

보다 진보 된 방법은 그렇게하는 것입니다 트렉:

  • 구두점을 제거하십시오
  • 코퍼스의 대부분은 약한 모음이 포함되어 있지 않았습니다.
  • 사전 항목 중 일부에는 약한 모음이 포함되어 있습니다. 이것은 모든 것을 일관되게 만들었습니다.
  • 비 문자를 제거하십시오
  • 초기 إ 또는 إ를 Bare alif로 교체하십시오
  • ا로 교체하십시오
  • 시퀀스 ىء를 ئ로 교체하십시오
  • Final ى를 뛰어드로 교체하십시오
  • Final ة를 ه로 교체하십시오
  • 스트립 6 접두사 : 정규화 된 단어의 시작부터 명확한 기사 (ف ال آال ، Á 야자 ، و وال ، ال ،) 및 و (및)
  • 단어의 끝에서 10 개의 접미사 St Strip 10 접미사 Statting tant ا ي ة ، ه ، 우리 ، ، 우리 ه ، ين ، ون

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

나는 또한 줄을 하나씩하지 않고 memo1.text에서 검색 할 것입니다. 검색은 줄의 끝에 있고 다음 줄로 포장 될 수있는 여러 단어에 대해 검색 할 수 있습니다.

다른 팁

Vista+에서 당신은 아마도 (아랍어에 대한 경험이 없음) 사용할 수 있습니다. 비교 옵션 linguistic_ignorediacritic.

Norm_ignorenonspace도 도움이 될 수 있습니다. 다시, 그렇지 않을 수도 있습니다.

또는 (그러나 나는 단지 추측하고 있습니다) 당신은 당신의 줄을 GetStringTypeex 수동으로 디아크리닉을 제거합니다. 아마도 당신은 전화해야 할 것입니다 폴드 스트링 또는 MultibyteWideChar 플래그 MAP_COMPOSITE를 먼저 사용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top