Problembehandlung von Sprachressourcen und Best Practices

Dieses Thema enthält bewährte Methoden und Vorschläge für die Überprüfung 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 Registry auf "beide" eingestellt ist.
  • Platzieren Sie nach Möglichkeit Sprachdaten in einer Ressource in Ihrer DLL und nicht in einer separaten Datei. Dadurch wird die DLL einfacher zu installieren und sicherer. Darüber hinaus führt das Einfügen von Sprachdaten in eine Ressource zu einer verbesserten Leistung für diese Sprachressourcenkomponente.
  • Minimieren Sie die Systemressourcen, die Von Sprachressourcenkomponenten verwendet werden. Wenn z. B. jede Instanz eines Sprachressourcenobjekts schreibgeschützten Zugriff auf ein Lexicon benötigt, sollten Sie das Lexika für alle Instanzen freigeben.
  • Erwägen Sie die Verwendung eines neutralen Worttrennprogramms, um Text zu verarbeiten, der nicht in der Sprache oder dem Gebietsschema Ihrer Worttrennprogramm-Implementierung verfasst ist. Dadurch wird sichergestellt, dass Text in allen Sprachen konsistent verarbeitet wird.
  • Überprüfen Sie alle Rückgabecodes, und geben Sie sie aus 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:

  • Der Stemmer arbeitet konsistent bei mehrfachen Aufrufen von IStemmer::Init. Der Stemmer wird mit denselben Parametern wie in der vorherigen Initialisierung neu initialisiert, ohne die Parameter freizugeben.
  • Aufgrund des gleichen Testkorpus und Wiederholungen derselben Abfrage erzeugt IStemmer::GenerateWordForms die identische Ausgabe und führt identische Aufrufe an die Methoden des IWordFormSink-Objekts aus.

Test 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 empfehlen wir, sicherzustellen, dass die Stemmer-Methoden keine unbehandelten Ausnahmen verursachen. Der Stemmer sollte die folgenden Fehler behandeln:

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

Konsistenzprüfung des Wort-Trenners

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

  • Der Word-Breaker führt seine Init-Methode von IWordBreaker konsistent bei mehreren Aufrufen aus. Die Worttrennung wird mit denselben Parametern wie in der vorherigen Initialisierung neu initialisiert, ohne die Parameter freizugeben.
  • Aufgrund desselben Testkorpus und 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.

Prüfung auf ungültige Eingaben im Wortteiler

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örtertrennungsmethoden keine unbehandelten Ausnahmen auslösen. Der Worttrenner sollte die folgenden Funktionen ausführen und die folgenden Fehler behandeln:

  • Aufruf von IWordBreaker::Init muss entweder LANGUAGE_E_DATABASE_NOT_FOUND oder S_OK zurückgeben.
  • Aufruf von IWordBreaker::Init initialisiert den pfLicense-Parameter erfolgreich in FALSE und ruft IStemmer::GetLicenseToUse auf und führt nicht zu einer Zugriffsverletzung.
  • Der Word-Breaker liest nicht über das Ende des awcBuffer-Parameters in der IWordBreaker::BreakText-Methode hinaus.
  • Aufrufen von IWordBreaker::BreakText, wobei pwcInBuf auf NULL festgelegt ist. IWordBreaker::BreakText schlägt fehl (gibt E_FAIL zurück) und führt nicht zu einer Zugriffsverletzung.
  • Aufrufen von IWordBreaker::BreakText mit dem cwc-Parameter gleich 0. IWordBreaker::BreakText gibt erfolgreich zurück (gibt S_OK) zurück und führt nicht zu einer Zugriffsverletzung.
  • Rufen Sie die IWordBreaker::BreakText-Methode mit dem pwcInBuf-Parameter auf, der auf NULL gesetzt ist, und setzen Sie den cwc-Parameter auf 0 fest. IWordBreaker::BreakText schlägt fehl (gibt E_FAIL zurück) und führt nicht zu einer Zugriffsverletzung.
  • Während der Indexerstellung generierte Ausdrücke enthalten dieselbe Anzahl von Wörtern.
  • Ausdrücke werden während der Indexerstellung durch aufeinanderfolgende Aufrufe der Methoden IWordFormSink::PutWord und IWordFormSink::PutAltWord generiert. Der Worttrennungsvorgang verwendet nur das IPhraseSink-Objekt während der Abfragezeit.

Erweitern von Sprachressourcen

Grundlegendes zu Sprachressourcenkomponenten

Implementierung eines Worttrenners und Stammers

Überlegungen zu Linguistik und Unicode