Устранение неполадок языковых ресурсов и передового опыта
В этом разделе приведены лучшие методы и предложения по проверке и устранению неполадок в ваших внедрениях IWordBreaker и IStemmer.
Этот раздел организован следующим образом:
- Лучшие практики
- Тестирование согласованности стеммеров
- тестирование недопустимых входных данных в стеммер
- тестирование согласованности разбиения слов
- тестирование недопустимых входных данных в средстве Word Breaker
Лучшие практики
- Убедитесь, что модель многопоточности для языковых ресурсов установлена на "оба" в реестре.
- По возможности поместите языковые данные в ресурс вашей библиотеки DLL, а не в отдельный файл. Это упрощает установку и более безопасную установку библиотеки DLL. Кроме того, размещение языковых данных в ресурс приведет к повышению производительности этого компонента языковых ресурсов.
- Свести к минимуму системные ресурсы, используемые компонентами ресурсов языка. Например, если каждому экземпляру объекта ресурса языка требуется доступ только для чтения к лексиконе, рассмотрите возможность совместного использования лексикона во всех экземплярах.
- Рекомендуется использовать нейтральный средство разбиения слов для обработки текста, который не находится на языке или языковом стандарте для реализации средства разбиения слов. Это поможет обеспечить согласованное обработку текста на всех языках.
- Проверьте все коды возврата и верните их из таких функций, как IStemmer::GenerateWordForms и IWordBreaker::BreakText. Если индексирование завершается ошибкой, важно передать ошибку, чтобы оповестить пользователя, какие документы не были индексированы.
Проверка согласованности stemmer
Мы рекомендуем отслеживать производительность реализации IStemmer для обеспечения согласованности в следующих условиях:
- Стеммер стабильно работает при множественных вызовах для IStemmer::Init. Система стеммер повторно инициализируется с теми же параметрами, что и в предыдущей инициализации, без освобождения параметров.
- Учитывая тот же тестовый корпус и повторения одного и того же запроса, IStemmer::GenerateWordForms создает идентичные выходные данные и выполняет идентичные вызовы методов объекта IWordFormSink.
Тестирование некорректных входных данных у стеммера
Рекомендуется отслеживать, как методы IStemmer обрабатывают все ошибки, связанные с недопустимыми параметрами. Кроме того, рекомендуется убедиться, что методы stemmer не вызывают необработанных исключений. Стеммер должен обрабатывать следующие ошибки:
- Вызов IStemmer::Init с pfLicense, установленным значением NULL. Инициализация завершается ошибкой и не приводит к нарушению доступа.
- Вызов IStemmer::GetLicenseToUse с параметром ppwcsLicense, установленным в NULL. IStemmer::GetLicenseToUse не приводит к нарушению доступа.
- Вызов IStemmer::GenerateWordForms с параметром pwcInBuf, установленным в значение NULL. IStemmer::GenerateWordForms завершается ошибкой (возвращает E_FAIL) и не приводит к нарушению доступа.
- Вызов IStemmer::GenerateWordForms с параметром cwc, равным 0. IStemmer::GenerateWordForms возвращается успешно (возвращает S_OK) и не приводит к нарушению доступа.
- Вызов IStemmer::GenerateWordForms с параметром pwcInBuf имеет значение NULLи параметр cwc равным 0. IStemmer::GenerateWordForms завершается ошибкой (возвращает E_FAIL) и не приводит к нарушению доступа.
Тестирование согласованности разбиения по словам
Мы рекомендуем вам убедиться, что реализация IWordBreaker выполняется согласованно в следующих условиях:
- Средство разделения слов работает стабильно при нескольких вызовах метода IWordBreaker::Init. Средство разбиения слов повторно инициализируется с теми же параметрами, что и в предыдущей инициализации, без освобождения параметров.
- Учитывая тот же тестовый корпус и повторения одного и того же запроса, метод IWordBreaker::BreakText создает идентичные выходные данные и выполняет идентичные вызовы методов IWordSink и объектов IPhraseSink.
Тестирование некорректных входных данных в компоненте разбиения слов
Рекомендуется убедиться, что методы IWordBreaker обрабатывают все ошибки, связанные с недопустимыми параметрами. Кроме того, рекомендуется убедиться, что методы разбиения слов не вызывают необработанных исключений. Средство разбиения слов должно выполнять следующие функции и обрабатывать следующие ошибки:
- Вызов IWordBreaker::Init должен возвращать LANGUAGE_E_DATABASE_NOT_FOUND или S_OK.
- Вызов IWordBreaker::Init успешно инициализирует параметр pfLicense в значение FALSE и вызывает IStemmer::GetLicenseToUse, не приводит к нарушению доступа.
- Средство разделения слов не считывает данные после завершения параметра awcBuffer в методе IWordBreaker::BreakText.
- Вызов IWordBreaker::BreakText с pwcInBuf установленным на NULL. IWordBreaker::BreakText терпит неудачу (возвращает E_FAIL) и не приводит к нарушению доступа.
- Вызов IWordBreaker::BreakText с параметром cwc равным 0. IWordBreaker::BreakText успешно возвращает S_OK и не приводит к нарушению доступа.
- Вызов метода IWordBreaker::BreakText с параметром pwcInBuf, установленным в NULL, и параметром cwc, равным 0. IWordBreaker::BreakText завершается ошибкой (возвращает E_FAIL) и не приводит к нарушению доступа.
- Фразы, созданные во время создания индекса, содержат одинаковое количество слов.
- Фразы создаются во время создания индекса путем последовательных вызовов методов IWordFormSink::PutWord и IWordFormSink::PutAltWord. Средство разбиения слов использует только объект IPhraseSink во время запроса.
Связанные разделы