Solução de problemas de recursos de linguagem e práticas recomendadas
Este tópico fornece práticas recomendadas 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
- Testando a consistência do lematizador
- Teste de entrada inválida no lematizador
- Testando a consistência do separador de Word
- Teste de entrada inválida no separador de Word
Práticas Recomendadas
- Verifique se o modelo de threading para recursos de linguagem está definido como "ambos" no Registro.
- Sempre que possível, coloque dados de linguagem 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 linguagem em um recurso resultará em um desempenho aprimorado 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 objeto de recurso de linguagem precisar de acesso somente leitura a um léxico, considere compartilhar o léxico em todas as instâncias.
- Considere usar o separador de palavras neutro para manipular o texto que não está no idioma ou localidade para a 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 sobre quais documentos foram indexados.
Testando a consistência do lematizador
Recomendamos que você monitore o desempenho de uma implementação do IStemmer para consistência nas seguintes condições:
- O lematizador é executado consistentemente em várias chamadas para IStemmer::Init. O lematizador reinicializa com os mesmos parâmetros que 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 de entrada inválida no lematizador
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ê garanta que os métodos de lematizador não gerem exceções sem tratamento. O lematizador deve lidar com os seguintes erros:
- Chame para IStemmer::Init com pfLicense definido como NULL. A inicialização falha e não resulta em uma violação de acesso.
- Chame para IStemmer::GetLicenseToUse com o parâmetro ppwcsLicense definido como NULL. IStemmer::GetLicenseToUse não resulta em uma violação de acesso.
- Chame para 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.
- Chame 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 para 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 Word
Recomendamos que você garanta que a implementação do IWordBreaker seja executada de forma consistente nas seguintes condições:
- Word disjuntor é executado consistentemente em várias chamadas para seu método IWordBreaker::Init. O separador de palavras reinicializa com os mesmos parâmetros que na 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 .
Teste de entrada inválida no separador de 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ê garanta que os métodos de separador de palavras não gerem exceções sem tratamento. O separador de palavras deve executar as seguintes funções e tratar os seguintes erros:
- A chamada para IWordBreaker::Init deve retornar LANGUAGE_E_DATABASE_NOT_FOUND ou S_OK.
- Chamar para 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.
- Word disjuntor não lê além do final do parâmetro awcBuffer no método IWordBreaker::BreakText.
- Chame para IWordBreaker::BreakText com o pwcInBuf definido como NULL. IWordBreaker::BreakText falha (retorna E_FAIL) e não resulta em uma violação de acesso.
- Chame 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::P utWord e IWordFormSink::P utAltWord . O separador de palavras usa apenas o objeto IPhraseSink durante o tempo de consulta.
Tópicos relacionados