Condividi tramite


Risoluzione dei problemi relativi alle risorse linguistiche e alle migliori prassi

Questo argomento fornisce procedure consigliate e suggerimenti per la convalida e la risoluzione dei problemi relativi alle implementazioni di IWordBreaker e IStemmer.

Questo argomento è organizzato come segue:

Procedure consigliate

  • Assicurarsi che il modello di threading per le risorse linguistiche sia configurato su "entrambi" nel Registro di sistema.
  • Se possibile, inserire i dati del linguaggio in una risorsa nella DLL anziché in un file separato. In questo modo la DLL risulta più semplice da installare e proteggere. Inoltre, l'inserimento dei dati linguistici in una risorsa comporterà un miglioramento delle prestazioni 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 lessico, è consigliabile condividere il lessico in tutte le istanze.
  • È consigliabile usare il word breaker neutro per gestire il testo che non è nella lingua o nel contesto regionale della tua implementazione del word breaker. In questo modo si garantisce che il testo venga elaborato in modo coerente in tutte le lingue.
  • Verificare tutti i codici di ritorno e restituirli dalle funzioni come IStemmer::GenerateWordForms e IWordBreaker::BreakText. Se l'indicizzazione non riesce, è importante passare l'errore in modo che l'utente riceve una notifica sui documenti indicizzati.

Test della coerenza degli stemmer

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

  • Lo stemmer esegue in modo coerente su 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 esegue chiamate identiche ai metodi dell'oggetto IWordFormSink.

Testare l'input invalido nello stemmer

È consigliabile monitorare il modo in cui i metodi di 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 IStemmer::GetLicenseToUse con il parametro ppwcsLicense impostato su NULL. IStemmer::GetLicenseToUse non genera una violazione di accesso.
  • Chiamare 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 IStemmer::GenerateWordForms con il parametro cwc uguale a 0. IStemmer::GenerateWordForms restituisce correttamente (restituisce S_OK) e non genera una violazione di accesso.
  • Chiamata 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 del separatore di parole

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

  • Word breaker opera in modo coerente su più chiamate al suo 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 le ripetizioni della stessa query, il metodo IWordBreaker::BreakText produce l'output identico e esegue chiamate identiche ai metodi del IWordSink e oggetti IPhraseSink.

Test per input non valido nel segmentatore di parole

È consigliabile assicurarsi che i metodi IWordBreaker gestiscono tutti gli errori correlati ai parametri non validi. È inoltre consigliabile assicurarsi che i metodi 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.
  • Chiamata a IWordBreaker::Init inizializza correttamente il parametro pfLicense a FALSE e chiama IStemmer::GetLicenseToUse e non genera una violazione di accesso.
  • Word breaker non legge oltre la fine del parametro awcBuffer nel metodo IWordBreaker::BreakText.
  • Chiamare a IWordBreaker::BreakText con il pwcInBuf impostato su NULL. IWordBreaker::BreakText ha esito negativo (restituisce E_FAIL) e non genera una violazione di accesso.
  • Chiamata al IWordBreaker::BreakText con il parametro cwc uguale a 0. IWordBreaker::BreakText restituisce correttamente (restituisce S_OK) e non genera una violazione di accesso.
  • Chiamata al metodo IWordBreaker::BreakText con il parametro pwcInBuf impostato su NULL e il parametro cwc pari a 0. IWordBreaker::BreakText ha esito negativo (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 di IWordFormSink::PutWord e IWordFormSink::PutAltWord. Il word breaker utilizza solo l'oggetto IPhraseSink durante il tempo di query.

Estensione delle risorse linguistiche

Comprendere i Componenti delle Risorse Linguistiche

Implementazione di word breaker e stemmer

Aspetti Linguistici e Unicode