Problembehandlung für Sprachressourcen und bewährte Methoden
Dieses Thema enthält bewährte Methoden und Vorschläge für die Überprüfung und Problembehandlung Ihrer IWordBreaker- und IStword-Implementierungen.
Dieses Thema ist wie folgt organisiert:
- Bewährte Methoden
- Testen der Stammmerkonsistenz
- Testen auf ungültige Eingaben im Stemmer
- Testen der Wörterbruchkonsistenz
- Testen auf ungültige Eingaben in der Wörterpause
Empfehlungen
- Stellen Sie sicher, dass das Threadingmodell für Sprachressourcen in der Registrierung auf "beide" festgelegt ist.
- Legen Sie nach Möglichkeit Sprachdaten in einer Ressource in Ihrer DLL anstatt in einer separaten Datei ab. Dadurch ist die DLL einfacher zu installieren und sicherer. Darüber hinaus führt das Setzen von Sprachdaten in eine Ressource zu einer verbesserten Leistung für diese Sprachressourcenkomponente.
- Minimieren Sie die Systemressourcen, die von Sprachressourcenkomponenten verwendet werden. Wenn beispielsweise jede Instanz eines Sprachressourcenobjekts schreibgeschützten Zugriff auf ein Lexikon benötigt, sollten Sie das Lexikon für alle Instanzen freigeben.
- Erwägen Sie die Verwendung der neutralen Wörterpause, um Text zu verarbeiten, der sich nicht in der Sprache oder im Gebietsschema für Ihre Wörterbruch-Implementierung befindet. Dadurch wird sichergestellt, dass Text in allen Sprachen konsistent verarbeitet wird.
- Überprüfen Sie alle Rückgabecodes, und geben Sie sie von Funktionen wie IStword::GenerateWordForms und IWordBreaker::BreakTextzurück. Wenn die Indizierung fehlschlägt, ist es wichtig, den Fehler zu übergeben, damit der Benutzer benachrichtigt wird, welche Dokumente indiziert wurden.
Testen der Stammmerkonsistenz
Es wird empfohlen, die Leistung einer IStaufsicht-Implementierung unter den folgenden Bedingungen auf Konsistenz zu überwachen:
- Die Stemmer-Funktion führt konsistent mehrere Aufrufe von IStammer::Initaus. Die Stemmer-Funktion wird mit den gleichen Parametern wie in der vorherigen Initialisierung erneut initialisiert, ohne die Parameter freizugeben.
- Angesichts des gleichen Testkorpus und der Wiederholungen derselben Abfrage erzeugt IStache::GenerateWordForms die identische Ausgabe und führt identische Aufrufe an die Methoden des IWordFormSink-Objekts aus.
Testen auf ungültige Eingaben im Stemmer
Es wird empfohlen, zu überwachen, wie die IStaufsicht-Methoden alle Fehler im Zusammenhang mit ungültigen Parametern behandeln. Darüber hinaus wird empfohlen, sicherzustellen, dass die Stemmermethoden keine unbehandelten Ausnahmen auslösen. Der Stemmer sollte die folgenden Fehler behandeln:
- Rufen Sie ISttine::Init auf, wobei pfLicense auf NULL festgelegt ist. Init schlägt fehl und führt nicht zu einer Zugriffsverletzung.
- Rufen Sie IStwc::GetLicenseToUse auf, wobei der ppwcsLicense-Parameter auf NULL festgelegt ist. ISttine::GetLicenseToUse führt nicht zu einer Zugriffsverletzung.
- Rufen Sie IStaku::GenerateWordForms auf, wobei der pwcInBuf-Parameter auf NULL festgelegt ist. ISt dll::GenerateWordForms schlägt fehl (gibt E _ FAIL zurück) und führt nicht zu einer Zugriffsverletzung.
- Rufen Sie IStfang::GenerateWordForms auf, wobei der cwc-Parameter gleich 0 ist. ISt dll::GenerateWordForms gibt erfolgreich zurück (gibt S _ OK zurück) und führt nicht zu einer Zugriffsverletzung.
- Rufen Sie IStaku::GenerateWordForms auf, wobei der pwcInBuf-Parameter auf NULL und der cwc-Parameter gleich 0 festgelegt ist. ISt dll::GenerateWordForms schlägt fehl (gibt E _ FAIL zurück) und führt nicht zu einer Zugriffsverletzung.
Testen der Wörterbruchkonsistenz
Es wird empfohlen, sicherzustellen, dass die IWordBreaker-Implementierung unter den folgenden Bedingungen konsistent ausgeführt wird:
- Die Wörteraufforderung führt konsistent mehrere Aufrufe der IWordBreaker::Init-Methode aus. Die Wörterpause wird mit den gleichen Parametern wie in der vorherigen Initialisierung erneut initialisiert, ohne die Parameter freizugeben.
- Angesichts des gleichen Testkorpus und der Wiederholungen derselben Abfrage erzeugt die IWordBreaker::BreakText-Methode die identische Ausgabe und führt identische Aufrufe an die Methoden der IWordSink- und IPhraseSink-Objekte aus.
Testen auf ungültige Eingaben in der Wörterpause
Es wird empfohlen, sicherzustellen, dass die IWordBreaker-Methoden alle Fehler im Zusammenhang mit ungültigen Parametern behandeln. Darüber hinaus wird empfohlen, sicherzustellen, dass die Wörterbruchmethoden keine nicht behandelten Ausnahmen auslösen. Die Wörterpause sollte die folgenden Funktionen ausführen und die folgenden Fehler behandeln:
- Der Aufruf von IWordBreaker::Init muss entweder LANGUAGE _ E DATABASE NOT FOUND oder S OK _ _ _ _ zurückgeben.
- Der Aufruf von IWordBreaker::Init initialisiert den pfLicense-Parameter erfolgreich mit FALSE und ruft ISttine::GetLicenseToUse auf und führt nicht zu einer Zugriffsverletzung.
- Die Wörterpause liest nicht über das Ende des awcBuffer-Parameters in der IWordBreaker::BreakText-Methode hinaus.
- Rufen Sie IWordBreaker::BreakText auf, wobei pwcInBuf auf NULL festgelegt ist. IWordBreaker::BreakText schlägt fehl (gibt E _ FAIL zurück) und führt nicht zu einer Zugriffsverletzung.
- Rufen Sie IWordBreaker::BreakText auf, wobei der cwc-Parameter gleich 0 ist. IWordBreaker::BreakText gibt erfolgreich zurück (gibt S _ OK zurück) und führt nicht zu einer Zugriffsverletzung.
- Rufen Sie die IWordBreaker::BreakText-Methode auf, wobei der pwcInBuf-Parameter auf NULL und der cwc-Parameter gleich 0 festgelegt ist. IWordBreaker::BreakText schlägt fehl (gibt E _ FAIL zurück) und führt nicht zu einer Zugriffsverletzung.
- Ausdrücke, die während der Indexerstellung generiert werden, enthalten dieselbe Anzahl von Wörtern.
- Ausdrücke werden während der Indexerstellung durch aufeinander folgende Aufrufe der Methoden IWordFormSink::P utWord und IWordFormSink::P utAltWord generiert. Die Wörtertrennung verwendet während der Abfragezeit nur das IPhraseSink-Objekt.