Compartir a través de


Solución de problemas de recursos de lenguaje y procedimientos recomendados

En este tema se proporcionan procedimientos recomendados y sugerencias para validar y solucionar problemas de las implementaciones de IWordBreaker e IStemmer .

Este tema se organiza de la siguiente manera:

Prácticas recomendadas

  • Asegúrese de que el modelo de subprocesos para los recursos de lenguaje esté establecido en "ambos" en el Registro.
  • Siempre que sea posible, coloque los datos de idioma en un recurso en el archivo DLL en lugar de en un archivo independiente. Esto hace que el archivo DLL sea más fácil de instalar y más seguro. Además, colocar los datos de idioma en un recurso dará como resultado un rendimiento mejorado para ese componente de recursos de lenguaje.
  • Minimice los recursos del sistema que usan los componentes de recursos de lenguaje. Por ejemplo, si cada instancia de un objeto de recurso de lenguaje necesita acceso de solo lectura a un léxico, considere la posibilidad de compartir el léxico en todas las instancias.
  • Considere la posibilidad de usar el separador de palabras neutro para controlar el texto que no está en el idioma o la configuración regional de la implementación del separador de palabras. Esto ayudará a garantizar que el texto se procesa de forma coherente en todos los idiomas.
  • Compruebe todos los códigos de retorno y los devuelva de funciones como IStemmer::GenerateWordForms e IWordBreaker::BreakText. Si se produce un error en la indexación, es importante pasar el error para que se notifique al usuario qué documentos se indizaron.

Probar la coherencia del lematizador

Se recomienda supervisar el rendimiento de una implementación de IStemmer para mantener la coherencia en las condiciones siguientes:

  • El lematizador se realiza de forma coherente en varias llamadas a IStemmer::Init. El lematizador reinicializa con los mismos parámetros que en la inicialización anterior, sin liberar los parámetros.
  • Dado el mismo corpus de prueba y las repeticiones de la misma consulta, IStemmer::GenerateWordForms genera el resultado idéntico y realiza llamadas idénticas a los métodos del objeto IWordFormSink .

Probar la entrada no válida en el lematizador

Se recomienda supervisar cómo los métodos de IStemmer controlan todos los errores relacionados con parámetros no válidos. Además, se recomienda asegurarse de que los métodos de lematizador no generan excepciones no controladas. El lematizador debe controlar los siguientes errores:

  • Llame a IStemmer::Init con pfLicense establecido en NULL. Se produce un error en Init y no se produce una infracción de acceso.
  • Llame a IStemmer::GetLicenseToUse con el parámetro ppwcsLicense establecido en NULL. IStemmer::GetLicenseToUse no produce una infracción de acceso.
  • Llame a IStemmer::GenerateWordForms con el parámetro pwcInBuf establecido en NULL. Se produce un error en IStemmer::GenerateWordForms (devuelve E_FAIL) y no se produce una infracción de acceso.
  • Llame a IStemmer::GenerateWordForms con el parámetro cwc igual a 0. IStemmer::GenerateWordForms devuelve correctamente (devuelve S_OK) y no produce una infracción de acceso.
  • Llame a IStemmer::GenerateWordForms con el parámetro pwcInBuf establecido en NULL y el parámetro cwc igual a 0. Se produce un error en IStemmer::GenerateWordForms (devuelve E_FAIL) y no se produce una infracción de acceso.

Probar Word coherencia del separador

Se recomienda asegurarse de que la implementación de IWordBreaker se realiza de forma coherente en las siguientes condiciones:

  • Word separador realiza constantemente varias llamadas a su método IWordBreaker::Init. El separador de palabras reinicializa con los mismos parámetros que en la inicialización anterior, sin liberar los parámetros.
  • Dado el mismo corpus de prueba y las repeticiones de la misma consulta, el método IWordBreaker::BreakText genera el resultado idéntico y realiza llamadas idénticas a los métodos de los objetos IWordSink e IPhraseSink .

Probar la entrada no válida en el separador de Word

Se recomienda asegurarse de que los métodos IWordBreaker controlan todos los errores relacionados con parámetros no válidos. Además, se recomienda asegurarse de que los métodos del separador de palabras no generan excepciones no controladas. El separador de palabras debe realizar las siguientes funciones y controlar los siguientes errores:

  • La llamada a IWordBreaker::Init debe devolver LANGUAGE_E_DATABASE_NOT_FOUND o S_OK.
  • La llamada a IWordBreaker::Init inicializa correctamente el parámetro pfLicense en FALSE y llama a IStemmer::GetLicenseToUse y no produce una infracción de acceso.
  • Word separador no lee más allá del final del parámetro awcBuffer en el método IWordBreaker::BreakText.
  • Llame a IWordBreaker::BreakText con pwcInBuf establecido en NULL. Se produce un error en IWordBreaker::BreakText (devuelve E_FAIL) y no produce una infracción de acceso.
  • Llame a IWordBreaker::BreakText con el parámetro cwc igual a 0. IWordBreaker::BreakText devuelve correctamente (devuelve S_OK) y no produce una infracción de acceso.
  • Llame al método IWordBreaker::BreakText con el parámetro pwcInBuf establecido en NULL y el parámetro cwc igual a 0. Se produce un error en IWordBreaker::BreakText (devuelve E_FAIL) y no produce una infracción de acceso.
  • Las frases generadas durante la creación del índice contienen el mismo número de palabras.
  • Las frases se generan durante la creación del índice mediante llamadas sucesivas a los métodos IWordFormSink::P utWord e IWordFormSink::P utAltWord . El separador de palabras solo usa el objeto IPhraseSink durante el tiempo de consulta.

Extensión de recursos de lenguaje

Descripción de los componentes de recursos de lenguaje

Implementación de un separador de Word y lematizador

Consideraciones lingüísticas y Unicode