Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten temat zawiera najlepsze praktyki i sugestie dotyczące sprawdzania poprawności oraz rozwiązywania problemów związanych z implementacjami IWordBreaker i IStemmer.
Ten temat jest zorganizowany w następujący sposób:
- najlepsze rozwiązania
- Testowanie spójności stemmera
- Testowanie nieprawidłowych danych wejściowych w analizatorze
- testowanie spójności podziału wyrazów
- Testowanie nieprawidłowych danych wejściowych w programie Word Breaker
Najlepsze rozwiązania
- Upewnij się, że model wątków dla zasobów językowych jest ustawiony na wartość "oba" w rejestrze.
- Jeśli to możliwe, umieść dane językowe w zasobie w pliku DLL, a nie w osobnym pliku. Dzięki temu biblioteka DLL jest łatwiejsza do zainstalowania i bezpieczniejsza. Ponadto umieszczenie danych językowych w zasobie spowoduje zwiększenie wydajności tego składnika zasobów języka.
- Zminimalizuj zasoby systemowe używane przez składniki zasobów językowych. Jeśli na przykład każde wystąpienie obiektu zasobu języka wymaga dostępu tylko do odczytu do leksykonu, rozważ udostępnienie leksykonu we wszystkich wystąpieniach.
- Rozważ użycie neutralnego wyłącznika wyrazów do obsługi tekstu, który nie znajduje się w języku lub ustawieniach regionalnych dla implementacji wyłącznika wyrazów. Pomoże to zapewnić spójne przetwarzanie tekstu we wszystkich językach.
- Sprawdź wszystkie kody powrotne i zwróć je z funkcji, takich jak IStemmer::GenerateWordForms i IWordBreaker::BreakText. Jeśli indeksowanie nie powiedzie się, ważne jest przekazanie błędu, aby użytkownik był powiadamiany o indeksowanych dokumentach.
Testowanie spójności stemmerów
Zalecamy monitorowanie wydajności implementacji IStemmer pod kątem spójności w następujących warunkach:
- Stemmer działa konsekwentnie przy wielokrotnych wywołaniach do IStemmer::Init. Stemmer ponownie inicjalizuje się z tymi samymi parametrami, co w poprzedniej inicjalizacji, bez resetowania parametrów.
- Biorąc pod uwagę ten sam korpus testowy i powtórzenia tego samego zapytania, IStemmer::GenerateWordForms generuje identyczne dane wyjściowe i wykonuje identyczne wywołania metod IWordFormSink obiektu.
Testowanie nieprawidłowych danych wejściowych w narzędziu stemmer
Zalecamy monitorowanie sposobu, w jaki metody IStemmer obsługują wszystkie błędy związane z nieprawidłowymi parametrami. Ponadto zalecamy upewnienie się, że metody stemmera nie zgłaszają nieobsługiwanych wyjątków. Stemmer powinien obsługiwać następujące błędy:
- Wywołaj metodę IStemmer::Init z pfLicense ustawioną na null. Inicjowanie kończy się niepowodzeniem i nie powoduje naruszenia dostępu.
- Wywołaj metodę IStemmer::GetLicenseToUse za pomocą parametru ppwcsLicense ustawionego na wartość NULL. IStemmer::GetLicenseToUse nie powoduje naruszenia dostępu.
- Wywołaj metodę IStemmer::GenerateWordForms przy użyciu parametru pwcInBuf ustawionego na NULL. IStemmer::GenerateWordForms kończy się niepowodzeniem (zwraca E_FAIL) i nie powoduje naruszenia dostępu.
- Wywołaj metodę IStemmer::GenerateWordForms z parametrem cwc równym 0. IStemmer::GenerateWordForms zwraca pomyślne (zwraca S_OK) i nie powoduje naruszenia dostępu.
- Wywołaj metodę IStemmer::GenerateWordForms przy użyciu parametru pwcInBuf ustawionego na wartość NULL oraz parametru cwc równego 0. IStemmer::GenerateWordForms kończy się niepowodzeniem (zwraca E_FAIL) i nie powoduje naruszenia dostępu.
Testowanie spójności łamacza tekstu
Zalecamy upewnienie się, że implementacja IWordBreaker działa spójnie w następujących warunkach:
- Wyłącznik wyrazów działa spójnie przy wielu wywołaniach metody IWordBreaker::Init. Wyraz breaker ponownie inicjuje z tymi samymi parametrami co w poprzedniej inicjalizacji, bez zwalniania parametrów.
- Biorąc pod uwagę te same korpusy testowe i powtórzenia tego samego zapytania, metoda IWordBreaker::BreakText generuje identyczne dane wyjściowe i wykonuje identyczne wywołania metod IWordSink i obiektów IPhraseSink.
Testowanie nieprawidłowych danych wejściowych w wyłączniku programu Word
Zalecamy upewnienie się, że metody IWordBreaker obsługują wszystkie błędy związane z nieprawidłowymi parametrami. Ponadto zalecamy upewnienie się, że metody dzielenia wyrazów nie zgłaszają nieobsługiwanych wyjątków. Moduł dzielenia wyrazów powinien wykonywać następujące funkcje i obsługiwać następujące błędy:
- Wywołanie metody IWordBreaker::Init musi zwrócić wartość LANGUAGE_E_DATABASE_NOT_FOUND lub S_OK.
- Wywołanie metody IWordBreaker::Init pomyślnie inicjuje parametr pfLicense na wartość FALSE oraz wywołuje IStemmer::GetLicenseToUse i nie powoduje naruszenia dostępu.
- Dzielnik słów nie odczytuje dalej niż do końca parametru awcBuffer w metodzie IWordBreaker::BreakText.
- Wywołaj metodę IWordBreaker::BreakText z pwcInBuf ustawioną na NULL. IWordBreaker::BreakText kończy się niepowodzeniem (zwraca E_FAIL) i nie powoduje naruszenia dostępu.
- Wywołaj metodę IWordBreaker::BreakText z parametrem cwc równym 0. IWordBreaker::BreakText zwraca pomyślnie (zwraca S_OK) i nie powoduje naruszenia dostępu.
- Wywołaj metodę IWordBreaker::BreakText z parametrem pwcInBuf ustawionym na null i parametr cwc równy 0. IWordBreaker::BreakText kończy się niepowodzeniem (zwraca E_FAIL) i nie powoduje naruszenia dostępu.
- Frazy generowane podczas tworzenia indeksu zawierają taką samą liczbę wyrazów.
- Frazy są generowane podczas tworzenia indeksu za pomocą kolejnych wywołań metod IWordFormSink::PutWord i IWordFormSink::PutAltWord. Wyraz breaker używa tylko obiektu IPhraseSink w czasie zapytania.
Tematy pokrewne