Solução de problemas de recursos de linguagem e práticas recomendadas

Este tópico fornece as melhores práticas e sugestões para validar e solucionar problemas de implementações do IWordBreaker e do IStemmer .

Este tópico é organizado da seguinte maneira:

Práticas recomendadas

  • Verifique se o modelo de encadeamento para os recursos de linguagem está definido como "ambos" no Registro.
  • Sempre que possível, coloque dados de idioma em um recurso em sua DLL em vez de em um arquivo separado. Isso torna a DLL mais fácil de instalar e mais segura. Além disso, colocar dados de idioma em um recurso resultará em um melhor desempenho para esse componente de recurso de linguagem.
  • Minimize os recursos do sistema que os componentes de recurso de linguagem usam. Por exemplo, se cada instância de um recurso de linguagem precisar de acesso somente de leitura a um léxico, considere compartilhar o léxico entre todas as instâncias.
  • Considere usar o separador de palavras neutro para manipular o texto que não está no idioma ou localidade da implementação do separador de palavras. Isso ajudará a garantir que o texto seja processado consistentemente em todos os idiomas.
  • Verifique todos os códigos de retorno e retorne-os de funções como IStemmer::GenerateWordForms e IWordBreaker::BreakText. Se a indexação falhar, é importante passar o erro para que o usuário seja notificado quais documentos foram indexados.

Testar a consistência do stemmer

Recomendamos que você monitore o desempenho de uma implementação do IStemmer para consistência nas seguintes condições:

  • O lematizador funciona de forma consistente em várias chamadas para IStemmer::Init. O processador de radical é reinicializado com os mesmos parâmetros usados na inicialização anterior, sem liberar os parâmetros.
  • Considerando o mesmo corpus de teste e repetições da mesma consulta, IStemmer::GenerateWordForms produz a saída idêntica e faz chamadas idênticas aos métodos do objeto IWordFormSink .

Teste para entrada inválida no stemmer

Recomendamos que você monitore como os métodos IStemmer lidam com todos os erros relacionados a parâmetros inválidos. Além disso, recomendamos que você verifique se os métodos de stemmer não geram exceções não tratadas. O stemmer deve lidar com os seguintes erros:

  • Chame IStemmer::Init com pfLicense definido como NULL. O init falha e não resulta em uma violação de acesso.
  • Chame iStemmer::GetLicenseToUse com o parâmetro ppwcsLicense definido como NULL. IStemmer::GetLicenseToUse não resulta em uma violação de acesso.
  • Chame IStemmer::GenerateWordForms com o parâmetro pwcInBuf definido como NULL. IStemmer::GenerateWordForms falha (retorna E_FAIL) e não resulta em uma violação de acesso.
  • Chamada para IStemmer::GenerateWordForms com o parâmetro cwc igual a 0. IStemmer::GenerateWordForms retorna com êxito (retorna S_OK) e não resulta em uma violação de acesso.
  • Chame iStemmer::GenerateWordForms com o parâmetro pwcInBuf definido como NULL e o parâmetro cwc igual a 0. IStemmer::GenerateWordForms falha (retorna E_FAIL) e não resulta em uma violação de acesso.

Testando a consistência do separador de palavras

É recomendável garantir que a implementação do IWordBreaker seja executada de forma consistente nas seguintes condições:

  • O separador de palavras é executado consistentemente em várias chamadas para seu método IWordBreaker::Init . O separador de palavras reinicializa com os mesmos parâmetros da inicialização anterior, sem liberar os parâmetros.
  • Considerando o mesmo corpus de teste e repetições da mesma consulta, o método IWordBreaker::BreakText produz a saída idêntica e faz chamadas idênticas aos métodos dos objetos IWordSink e IPhraseSink .

Testagem para entrada inválida no quebrador de palavras no Word

Recomendamos que você verifique se os métodos IWordBreaker lidam com todos os erros relacionados a parâmetros inválidos. Além disso, recomendamos que você verifique se os métodos de separação de palavras não geram exceções sem tratamento. O separador de palavras deve executar as seguintes funções e manipular os seguintes erros:

  • A chamada para IWordBreaker::Init deve retornar LANGUAGE_E_DATABASE_NOT_FOUND ou S_OK.
  • Chamar iWordBreaker::Init inicializa com êxito o parâmetro pfLicense para FALSE e chama IStemmer::GetLicenseToUse e não resulta em uma violação de acesso.
  • O separador de palavras não lê além do final do parâmetro awcBuffer no método IWordBreaker::BreakText .
  • Chame iWordBreaker::BreakText com o pwcInBuf definido como NULL. IWordBreaker::BreakText falha (retorna E_FAIL) e não resulta em uma violação de acesso.
  • Chamada para IWordBreaker::BreakText com o parâmetro cwc igual a 0. IWordBreaker::BreakText retorna com êxito (retorna S_OK) e não resulta em uma violação de acesso.
  • Chame para o método IWordBreaker::BreakText com o parâmetro pwcInBuf definido como NULL e o parâmetro cwc igual a 0. IWordBreaker::BreakText falha (retorna E_FAIL) e não resulta em uma violação de acesso.
  • As frases geradas durante a criação do índice contêm o mesmo número de palavras.
  • As frases são geradas durante a criação do índice por meio de chamadas sucessivas para os métodos IWordFormSink::PutWord e IWordFormSink::PutAltWord. O separador de palavras usa apenas o objeto IPhraseSink durante o tempo de consulta.

Estendendo recursos de idioma

Noções básicas sobre componentes de recursos de linguagem

Implementando um separador de palavras e um stemmer

Considerações linguísticas e Unicode