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
- Test della coerenza dello stemmer
- Test per l'input non valido nello stemmer
- Test della Coerenza del Word Breaker
- Test per l'input non valido nell'interruzione delle parole
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.
Argomenti correlati