Risoluzione dei problemi relativi alle risorse del linguaggio e alle procedure consigliate

In questo argomento vengono fornite procedure consigliate e suggerimenti per convalidare e risolvere i problemi relativi alle implementazioni di IWordBreaker e IStemmer .

Questo argomento è organizzato come segue:

Procedure consigliate

  • Assicurarsi che il modello di threading per le risorse del linguaggio sia impostato su "entrambi" nel Registro di sistema.
  • Se possibile, inserire i dati del linguaggio in una risorsa nella DLL anziché in un file separato. Ciò semplifica l'installazione e la sicurezza della DLL. Inoltre, l'inserimento dei dati del linguaggio in una risorsa comporterà prestazioni migliorate per tale componente della risorsa del linguaggio.
  • Ridurre al minimo le risorse di sistema usate dai componenti delle risorse del linguaggio. Ad esempio, se ogni istanza di un oggetto risorsa del linguaggio richiede l'accesso in sola lettura a un lexicon, prendere in considerazione la condivisione del lexicon in tutte le istanze.
  • È consigliabile usare il word breaker neutrale per gestire il testo non presente nella lingua o nelle impostazioni locali per l'implementazione del word breaker. Ciò consente di assicurarsi che il testo venga elaborato in modo coerente in tutte le lingue.
  • Controllare tutti i codici restituiti e restituirli da funzioni come IStemmer::GenerateWordForms e IWordBreaker::BreakText. Se l'indicizzazione ha esito negativo, è importante passare l'errore in modo che l'utente riceva una notifica ai documenti indicizzati.

Test della coerenza dello stemmer

È consigliabile monitorare le prestazioni di un'implementazione di IStemmer per la coerenza nelle condizioni seguenti:

  • Lo stemmer esegue in modo coerente più chiamate a IStemmer::Init. Lo stemmer reinizializza con gli stessi parametri dell'inizializzazione precedente, senza rilasciare i parametri.
  • Dato lo stesso corpus di test e le ripetizioni della stessa query, IStemmer::GenerateWordForms produce l'output identico e effettua chiamate identiche ai metodi dell'oggetto IWordFormSink .

Test per l'input non valido in Stemmer

È consigliabile monitorare il modo in cui i metodi IStemmer gestiscono tutti gli errori correlati ai parametri non validi. È inoltre consigliabile assicurarsi che i metodi stemmer non generino eccezioni non gestite. Lo stemmer deve gestire gli errori seguenti:

  • Chiamare a IStemmer::Init con pfLicense impostato su NULL. Init ha esito negativo e non comporta una violazione di accesso.
  • Chiamare a IStemmer::GetLicenseToUse con il parametro ppwcsLicense impostato su NULL. IStemmer::GetLicenseToUse non genera una violazione di accesso.
  • Chiamare a IStemmer::GenerateWordForms con il parametro pwcInBuf impostato su NULL. IStemmer::GenerateWordForms ha esito negativo (restituisce E_FAIL) e non genera una violazione di accesso.
  • Chiamare a IStemmer::GenerateWordForms con il parametro cwc uguale a 0. IStemmer::GenerateWordForms restituisce correttamente (restituisce S_OK) e non genera una violazione di accesso.
  • Chiamare a IStemmer::GenerateWordForms con il parametro pwcInBuf impostato su NULL e il parametro cwc uguale a 0. IStemmer::GenerateWordForms ha esito negativo (restituisce E_FAIL) e non genera una violazione di accesso.

Test della coerenza Word breaker

È consigliabile assicurarsi che l'implementazione di IWordBreaker venga eseguita in modo coerente nelle condizioni seguenti:

  • Word breaker esegue in modo coerente più chiamate al metodo IWordBreaker::Init. Il word breaker reinizializza con gli stessi parametri dell'inizializzazione precedente, senza rilasciare i parametri.
  • Dato lo stesso corpus di test e ripetizioni della stessa query, il metodo IWordBreaker::BreakText produce l'output identico e effettua chiamate identiche ai metodi degli oggetti IWordSink eIPhraseSink .

Test per input non valido nel breaker di Word

È consigliabile assicurarsi che i metodi IWordBreaker gestiscono tutti gli errori correlati ai parametri non validi. È inoltre consigliabile assicurarsi che i metodi di word breaker non generino eccezioni non gestite. Il word breaker deve eseguire le funzioni seguenti e gestire gli errori seguenti:

  • La chiamata a IWordBreaker::Init deve restituire LANGUAGE_E_DATABASE_NOT_FOUND o S_OK.
  • La chiamata a IWordBreaker::Init inizializza correttamente il parametro pfLicense su FALSE e chiama IStemmer::GetLicenseToUse e non genera una violazione di accesso.
  • Word breaker non viene letto oltre la fine del parametro awcBuffer nel metodo IWordBreaker::BreakText.
  • Chiamare a IWordBreaker::BreakText con pwcInBuf impostato su NULL. IWordBreaker::BreakText non riesce (restituisce E_FAIL) e non genera una violazione di accesso.
  • Chiamare a IWordBreaker::BreakText con il parametro cwc uguale a 0. IWordBreaker::BreakText restituisce correttamente (restituisce S_OK) e non genera una violazione di accesso.
  • Chiamare il metodo IWordBreaker::BreakText con il parametro pwcInBuf impostato su NULL e il parametro cwc uguale a 0. IWordBreaker::BreakText non riesce (restituisce E_FAIL) e non genera una violazione di accesso.
  • Le frasi generate durante la creazione dell'indice contengono lo stesso numero di parole.
  • Le frasi vengono generate durante la creazione dell'indice tramite chiamate successive ai metodi IWordFormSink::P utWord e IWordFormSink::P utAltWord. Il word breaker usa solo l'oggetto IPhraseSink durante il tempo di query.

Estensione delle risorse del linguaggio

Informazioni sui componenti delle risorse del linguaggio

Implementazione di un Word Breaker e Stemmer

Considerazioni linguistiche e Unicode