다음을 통해 공유


언어 리소스 및 모범 사례 문제 해결

이 항목에서는 IWordBreakerIStemmer 구현의 유효성을 검사하고 문제를 해결하기 위한 모범 사례 및 제안을 제공합니다.

이 항목은 다음과 같이 구성됩니다.

모범 사례

  • 언어 리소스에 대한 스레딩 모델이 레지스트리에서 "둘 다"로 설정되어 있는지 확인합니다.
  • 가능한 경우 언어 데이터를 별도의 파일이 아닌 DLL의 리소스에 넣습니다. 이렇게 하면 DLL을 더 쉽게 설치하고 더 안전하게 만들 수 있습니다. 또한 리소스에 언어 데이터를 배치하면 해당 언어 리소스 구성 요소의 성능이 향상됩니다.
  • 언어 리소스 구성 요소에서 사용하는 시스템 리소스를 최소화합니다. 예를 들어 언어 리소스 개체의 각 instance 어휘집에 대한 읽기 전용 액세스 권한이 필요한 경우 모든 인스턴스에서 어휘를 공유하는 것이 좋습니다.
  • 중립 단어 분리기를 사용하여 단어 분리기 구현에 대한 언어 또는 로캘에 없는 텍스트를 처리하는 것이 좋습니다. 이렇게 하면 모든 언어에서 텍스트가 일관되게 처리되도록 할 수 있습니다.
  • 모든 반환 코드를 확인하고 IStemmer::GenerateWordFormsIWordBreaker::BreakText와 같은 함수에서 반환합니다. 인덱싱에 실패하면 인덱싱된 문서를 사용자에게 알리도록 오류를 전달하는 것이 중요합니다.

형태소 분석기 일관성 테스트

다음 조건에서 일관성을 위해 IStemmer 구현의 성능을 모니터링하는 것이 좋습니다.

  • 형태소 분석기는 IStemmer::Init에 대한 여러 호출에서 일관되게 수행됩니다. 형태소 분석기는 매개 변수를 해제하지 않고 이전 초기화와 동일한 매개 변수를 사용하여 다시 초기화합니다.
  • 동일한 테스트 모음과 동일한 쿼리의 반복을 감안할 때 IStemmer::GenerateWordForms 는 동일한 출력을 생성하고 IWordFormSink 개체의 메서드에 대해 동일한 호출을 수행합니다.

형태소 분석기에서 잘못된 입력 테스트

IStemmer 메서드가 잘못된 매개 변수와 관련된 모든 오류를 처리하는 방법을 모니터링하는 것이 좋습니다. 또한 형태소 분석기 메서드가 처리되지 않은 예외를 발생시키지 않도록 하는 것이 좋습니다. 형태소 분석기는 다음 오류를 처리해야 합니다.

  • pfLicenseNULL로 설정된 IStemmer::Init를 호출합니다. Init가 실패하고 액세스 위반이 발생하지 않습니다.
  • ppwcsLicense 매개 변수가 NULL로 설정된 IStemmer::GetLicenseToUse를 호출합니다. IStemmer::GetLicenseToUse 는 액세스 위반을 초래하지 않습니다.
  • pwcInBuf 매개 변수가 NULL로 설정된 IStemmer::GenerateWordForms를 호출합니다. IStemmer::GenerateWordForms가 실패하고(E_FAIL 반환) 액세스 위반이 발생하지 않습니다.
  • cwc 매개 변수가 0인 IStemmer::GenerateWordForms를 호출합니다. IStemmer::GenerateWordForms는 성공적으로 반환되고(S_OK 반환) 액세스 위반이 발생하지 않습니다.
  • pwcInBuf 매개 변수가 NULL로 설정되고 cwc 매개 변수가 0으로 설정된 IStemmer::GenerateWordForms를 호출합니다. IStemmer::GenerateWordForms가 실패하고(E_FAIL 반환) 액세스 위반이 발생하지 않습니다.

Word 차단기 일관성 테스트

IWordBreaker 구현이 다음 조건에서 일관되게 수행되도록 하는 것이 좋습니다.

  • Word 차단기는 IWordBreaker::Init 메서드에 대한 여러 호출에서 일관되게 수행됩니다. 단어 분리기는 매개 변수를 해제하지 않고 이전 초기화에서와 동일한 매개 변수를 사용하여 다시 초기화합니다.
  • 동일한 테스트 모음과 동일한 쿼리의 반복을 감안할 때 IWordBreaker::BreakText 메서드는 동일한 출력을 생성하고 IWordSink 및IPhraseSink 개체의 메서드에 대해 동일한 호출을 수행합니다.

Word 차단기에서 잘못된 입력 테스트

IWordBreaker 메서드가 잘못된 매개 변수와 관련된 모든 오류를 처리하는 것이 좋습니다. 또한 단어 분리기 메서드가 처리되지 않은 예외를 발생시키지 않도록 하는 것이 좋습니다. 단어 분리기는 다음 함수를 수행하고 다음 오류를 처리해야 합니다.

  • IWordBreaker::Init에 대한 호출은 LANGUAGE_E_DATABASE_NOT_FOUND 또는 S_OK 반환해야 합니다.
  • IWordBreaker::Init 호출은 pfLicense 매개 변수를 FALSE로 초기화하고 IStemmer::GetLicenseToUse를 호출하며 액세스 위반이 발생하지 않습니다.
  • Word 차단기는 IWordBreaker::BreakText 메서드에서 awcBuffer 매개 변수의 끝을 지나서 읽지 않습니다.
  • pwcInBufNULL로 설정된 IWordBreaker::BreakText를 호출합니다. IWordBreaker::BreakText 가 실패하고(E_FAIL 반환) 액세스 위반이 발생하지 않습니다.
  • cwc 매개 변수가 0인 IWordBreaker::BreakText를 호출합니다. IWordBreaker::BreakText 는 성공적으로 반환되고(S_OK 반환) 액세스 위반이 발생하지 않습니다.
  • pwcInBuf 매개 변수가 NULL로 설정되고 cwc 매개 변수가 0인 IWordBreaker::BreakText 메서드를 호출합니다. IWordBreaker::BreakText 가 실패하고(E_FAIL 반환) 액세스 위반이 발생하지 않습니다.
  • 인덱스를 만드는 동안 생성된 구에는 동일한 수의 단어가 포함됩니다.
  • 구는 IWordFormSink::P utWord 및 IWordFormSink::PutAltWord 메서드에 대한 연속 호출을 통해 인덱스를 만드는 동안 생성됩니다. 단어 분리기는 쿼리 시간 동안 IPhraseSink 개체만 사용합니다.

언어 리소스 확장

언어 리소스 구성 요소 이해

Word 차단기 및 형태소 분석기 구현

언어 및 유니코드 고려 사항