Freigeben über


Problembehandlung für Sprachressourcen und bewährte Methoden

Dieses Thema enthält bewährte Methoden und Vorschläge für die Validierung und Problembehandlung Ihrer IWordBreaker - und IStemmer-Implementierungen .

Dieses Thema ist wie folgt organisiert:

Bewährte Methoden

  • Stellen Sie sicher, dass das Threadingmodell für Sprachressourcen in der Registrierung auf "beide" festgelegt ist.
  • Platzieren Sie Sprachdaten nach Möglichkeit in einer Ressource in Ihrer DLL und nicht in einer separaten Datei. Dadurch ist die DLL einfacher zu installieren und sicherer. Darüber hinaus führt das Platzieren von Sprachdaten in einer Ressource zu einer verbesserten Leistung für diese Sprachressourcenkomponente.
  • Minimieren Sie die Systemressourcen, die Sprachressourcenkomponenten verwenden. Wenn beispielsweise jede instance eines Sprachressourcenobjekts schreibgeschützten Zugriff auf ein Lexikon benötigt, sollten Sie das Lexikon für alle Instanzen freigeben.
  • Erwägen Sie, die neutrale Worttrennung zu verwenden, um Text zu behandeln, der sich nicht in der Sprache oder dem Gebietsschema für Ihre Worttrennungsimplementierung befindet. Dadurch wird sichergestellt, dass Text konsistent in allen Sprachen verarbeitet wird.
  • Überprüfen Sie alle Rückgabecodes, und geben Sie sie von Funktionen wie IStemmer::GenerateWordForms und IWordBreaker::BreakText zurück. Wenn die Indizierung fehlschlägt, ist es wichtig, den Fehler zu übergeben, damit der Benutzer benachrichtigt wird, welche Dokumente indiziert wurden.

Testen der Stemmerkonsistenz

Es wird empfohlen, die Leistung einer IStemmer-Implementierung unter den folgenden Bedingungen auf Konsistenz zu überwachen:

Testen auf ungültige Eingaben im Stemmer

Es wird empfohlen, zu überwachen, wie die IStemmer-Methoden alle Fehler im Zusammenhang mit ungültigen Parametern behandeln. Darüber hinaus wird empfohlen, sicherzustellen, dass die Stemmer-Methoden keine nicht behandelten Ausnahmen auslösen. Der Stemmer sollte die folgenden Fehler behandeln:

  • Rufen Sie IStemmer::Init auf, wobei pfLicense auf NULL festgelegt ist. Init schlägt fehl und führt nicht zu einer Zugriffsverletzung.
  • Rufen Sie IStemmer::GetLicenseToUse auf, wobei der ppwcsLicense-Parameter auf NULL festgelegt ist. IStemmer::GetLicenseToUse führt nicht zu einer Zugriffsverletzung.
  • Rufen Sie IStemmer::GenerateWordForms auf, wobei der pwcInBuf-Parameter auf NULL festgelegt ist. IStemmer::GenerateWordForms schlägt fehl (gibt E_FAIL zurück) und führt nicht zu einer Zugriffsverletzung.
  • Rufen Sie IStemmer::GenerateWordForms mit dem cwc-Parameter gleich 0 auf. IStemmer::GenerateWordForms gibt erfolgreich zurück (gibt S_OK zurück) und führt nicht zu einer Zugriffsverletzung.
  • Rufen Sie IStemmer::GenerateWordForms auf, wobei der pwcInBuf-Parameter auf NULL und der cwc-Parameter gleich 0 festgelegt ist. IStemmer::GenerateWordForms schlägt fehl (gibt E_FAIL zurück) und führt nicht zu einer Zugriffsverletzung.

Testen Word Breakerkonsistenz

Es wird empfohlen, sicherzustellen, dass die IWordBreaker-Implementierung unter den folgenden Bedingungen konsistent funktioniert:

  • Word-Breaker führt konsistent über mehrere Aufrufe der IWordBreaker::Init-Methode aus. Der Worttrenner wird mit den gleichen Parametern wie in der vorherigen Initialisierung neu initialisiert, ohne die Parameter freizugeben.
  • Aufgrund desselben Testkorpus und der Wiederholungen derselben Abfrage erzeugt die IWordBreaker::BreakText-Methode die identische Ausgabe und führt identische Aufrufe der Methoden des IWordSink - und IPhraseSink-Objekts aus.

Testen auf ungültige Eingaben im Word Breaker

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 Worttrennungsmethoden keine unbehandelten Ausnahmen auslösen. Die Worttrennung 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 auf FALSE und ruft IStemmer::GetLicenseToUse auf und führt nicht zu einer Zugriffsverletzung.
  • Word Breaker 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 mit dem cwc-Parameter gleich 0 auf. 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 die gleiche 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 Worttrennung verwendet während der Abfragezeit nur das IPhraseSink-Objekt .

Erweitern von Sprachressourcen

Grundlegendes zu Sprachressourcenkomponenten

Implementieren eines Word Breaker und Stemmer

Überlegungen zu Linguistik und Unicode