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

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

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

모범 사례

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

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

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

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

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

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

  • IStemmer::Init에 pfLicense가 NULL로 설정된 상태로 호출합니다. Init가 실패하고 액세스 위반이 발생하지 않습니다.
  • IStemmer::GetLicenseToUse를 ppwcsLicense 매개 변수를 NULL로 설정하여 호출하십시오. IStemmer::GetLicenseToUse로 인해 액세스 위반이 발생하지 않습니다.
  • NULL으로 설정된 pwcInBuf 매개 변수를 사용하여 IStemmer::GenerateWordForms를 호출합니다. IStemmer::GenerateWordForms은 실패하며 E_FAIL을 반환하고, 액세스 위반이 발생하지도 않습니다.
  • IStemmer::GenerateWordForms을(를) 호출할 때 cwc 매개 변수가 0입니다. IStemmer::GenerateWordForms 성공적으로 반환되고(S_OK 반환) 액세스 위반이 발생하지 않습니다.
  • IStemmer::GenerateWordForms를 호출할 때, pwcInBuf 매개 변수를 NULL로 설정하고, cwc 매개 변수를 0으로 설정합니다. IStemmer::GenerateWordForms은 실패하며 E_FAIL을 반환하고, 액세스 위반이 발생하지도 않습니다.

단어 구분기 일관성 테스트

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

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

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

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

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

언어 리소스 확장

언어 리소스 구성 요소 이해

단어 분리기 및 어간 추출기 구현

언어 및 유니코드 고려 사항