Часто задаваемые вопросы

1. Зачем нужен нечеткий поиск?
2. Как избавиться от шума при нечетком поиске?
3. Какой длины может быть запрос?
4. Существует ли модуль автоматического аннотирования?
5. Возможно ли искать конкретные словоформы без использования морфологии?
6. Возможно ли одновременно искать слово в нескольких морфологических модулях?
7. Как именно работают в RetrievalWare настройки нечеткого поиска?


Зачем нужен нечеткий поиск?

Нечеткий поиск - режим поиска, в котором термины из строки запроса расширяются до слов, схожих по написанию и присутствующих в документах библиотеки.
Нечеткий поиск нужен, когда у нас есть "грязный" текст после распознавания документа, или же нужно найти слова с различным либо сложным написанием.

Как избавиться от шума при нечетком поиске?

Нужно:
  • задать меньшее количество слов, расширяющих нечетким образом заданное (параметр "Макс число расширений для нечеткого поиска");
  • задать высокий порог ранга расширяемых слов (параметр "Граница нечеткого поиска");
  • задать высокий порог ранга документов, получаемых по запросу (параметр "Порог ранга" в окне "Сохранение запроса, профиля или категории");
  • выбрать нужные расширения слова из запроса в режимах "Расширенный" и "Уточнение";
  • заключить в кавычки фразу, в которой нам нужно только точное написание;
  • использовать поля как фильтры.

Какой длины может быть запрос?

Запрос может быть любой длины.

Существует ли модуль автоматического аннотирования?

Есть две возможности получать некоторую информацию о документе в виде отдельного поля - используя поле top_lines (в котором будут храниться несколько первых строк документа) и поле doc_vector (где хранятся ключевые слова документа, извлеченные при индексировании). Для активации этих полей следует в Administration Wizards поставить, соответственно, галочки "Enable top line summary?" и "Create weighted keyword vector?".

Внимание! Индексирование с извлечением ключевых слов длится примерно в 15 раз медленнее обычного индексирования!

Существуют также сторонние модули автоматического аннотирования, которые при желании могут быть интегрированы с RetrievalWare.

Возможно ли искать конкретные словоформы без использования морфологии?

В английском языке это возможно реализовать средствами SDK. Для этого следует функцией cqhl_set_property() задать EXACT_MATCH_PROPERTY=TRUE. После этого в файле rware.cfg в секции INDEXES следует задать флаг RECORD_MORPH_RULES. При этом, если задано свойство SINGLE_QUOTE_PHRASE_PROPERTY, то морфологически не расширяются слова в апострофах, входящие во фразы, заключенные в кавычки. Если такое свойство не задано, то морфологически не расширяются все слова, входящие во фразы, заключенные в кавычки.

К сожалению, в русском языке это реализовать невозможно, так как количество правил словообразования в нем существенно превышает 8 (не больше 8 должно быть для корректной работы флага RECORD_MORPH_RULES).

Возможно ли одновременно искать слово в нескольких морфологических модулях?

Если вы используете стандартный морфологический модуль lpi_morph.dll с разными наборами словоформ и правил словообразования, то в файле lang.cfg следует указать:

MORPHOLOGY = "..\..\bin\lpi_morph"
morph_lexicon = ".\rw_english.mlx"
morph_lexicon = ".\rw_french.mlx"
morph_rules = ".\rw_english.mrl"
morph_rules = ".\rw_french.mrl";

Но для русского языка используется модуль erusmorph.dll. Несколько модулей в файле lang.cfg указывать нельзя, поэтому невозможно индексировать смешанные документы на русском и английском, не указывая предварительно, какой именно фрагмент текста написан на каком языке.

Однако компанией "Одеон-АСТ" разработан единый русско-английский модуль eruenmrph.dll, который работает именно с такими смешанными текстами. Работу данного модуля можно увидеть на нашем стенде в библиотеке "Русский - Английский".

Как именно работают в RetrievalWare настройки нечеткого поиска?

В SmartSearch cуществуют 4 настройки для нечеткого поиска.
  1. "Макс число расширений для нечеткого поиска" (параметр MAX_FUZZY_SPELL_PROPERTY) задает максимальное число слов, которыми RetrievalWare расширяет слово из строки запроса при нечетком поиске.

  2. "Граница нечеткого поиска" (параметр FUZZY_SPELL_THRESHOLD) определяет минимальный вес нечеткого расширения слова в процентах. RW не будет искать те слова-расширения, вес которых меньше этого параметра. 0 соответствует включению в поиск всех слов (количество лимитируется только параметром MAX_FUZZY_SPELL_PROPERTY). 100 означает абсолютно четкий поиск.

  3. "Поиск по половине слова" (параметр FUZZY_SPELL_HALF_WORDS) делит слова, которые длиннее 7 символов, на 2 части и ищет нечеткие расширения каждой из этих частей.

  4. "Использовать символы-пропуски для нечеткого поиска" (параметр USE_SKIP_CHAR_PAIRS_PROPERTY). При нечетком поиске RetrievalWare ищет в списках последовательностей букв слов из индексов те последовательности, которые соответствуют словам в запросе. Один из таких списков последовательностей - это список "пар пропущенных символов". Это список последовательностей, где между двумя известными буквами находится одна неизвестная. При данной выключенной настройке RetrievalWare не будет искать в списке "пар пропущенных символов". Это улучшит точность поиска, но приведет к потере различных расширений с низким рангом.

  5. Помимо перечисленных настроек средствами SDK можно задать еще 3:

  6. APRP_FUZZY_SPELL. Указывает, какой алгоритм нечеткого поиска использовать - APRP (Adaptive Pattern Recognition Processing) или NPRP (N-gram Pattern Recognition Processing). Первый хорош для работы с текстами, имеющими ошибки при распознавании. Второй предназначен для текстов с опечатками или неправильной грамматикой.

  7. FUZZY_SPELL_WORD_LENGTH. Указывает, будет ли при нечетком поиске учитываться такой фактор, как длина слова.

  8. MAX_FUZZY_HALF_WORDS. Задает число слов, которые добавляются в число слов-расширений при установленном флажке FUZZY_SPELL_HALF_WORDS. По умолчанию это число больше 2 (очевидно 2 слова - это точно те 2 слова, которые получаются при разбиении пополам исходного).