DataparkSearch Engine 4.53: Справочное руководство
Пред. | Глава 8. Поиск документов | След.

# 8.8. Нечёткий поиск

## 8.8.1. Ispell

Когда DataparkSearch используется с поддержкой `ispell`, для расширения поискового запроса нахождятся все грамматические формы введенных слов. При индексировании все найденные слова сохраняются в базе, а при поиске для каждого введенного слова находятся все его грамматические формы и уже с учетом всех этих форм производится поиск документов. Т.е., поисковик будет искать слово "test", если в качестве запроса введены слова "testing" или "tests".

### 8.8.1.1. Два типа файлов ispell

DataparkSearch понимает два типа файлов ispell: файлы аффиксов и файлы словарей. Файл аффиксов `Ispell` состоит из правил для слов и имеет примерно такой формат:

    Flag V:
           E   > -E, IVE      # As in create> creative
          [ˆE] > IVE          # As in prevent > preventive
    Flag *N:
           E   > -E, ION      # As in create > creation
           Y   > -Y, ICATION  # As in multiply > multiplication
         [ˆEY] > EN           # As in fall > fallen

Файл словаря `Ispell` содержит сами слова и имеет следующий формат:

    wop/S
    word/DGJMS
    wordage/S
    wordbook
    wordily
    wordless/P

### 8.8.1.2. Использование Ispell

Для использования `ispell` в DataparkSearch необходимо задать команды Affix и Spell в `search.htm`. Формат этих команд:

    Affix [язык] [кодировка] [имя файла аффиксов ispell]
    Spell [язык] [кодировка] [имя файла словаря ispell]

Первый параметр обоих команд - стандартный двуюуквенный код языка. Воторой - имя кодировки, при помощи которой закодированы файлы `ispell`. Третий параметр указывает имя файла, абсолютное, или отностительно поддиректории `etc/` корневой директории DataparkSearch

> Замечание: Поддерживает загрузка данных для нескольких языков, например:

>     Affix en iso-8859-1 en.aff
>     Spell en iso-8859-1 en.dict
>     Affix de iso-8859-1 de.aff
>     Spell de iso-8859-1 de.dict

> Будет загружена поддержка для английского и немецкого языков.

Если используется searchd, эти команды следует указывать в `searchd.conf`.

Если DataparkSearch используется с поддержкой `ispell`, рекомендуется исопльзовать searchd, особенно для поддержки нескольких языков. Иначе время запуска `search.cgi` увеличивается.

### 8.8.1.3. Настройка словарей

Возможно, на ваших страницах встретяться несколько редких слов, не включённых в словари `ispell`. В этом случае для построения всех форма слова выбирается запись с максимально совпадающим суффиксом.

Вы также можете создать список таких слов по одному на каждую строку:

    rare.dict:
    ----------
    webmaster
    intranet
    .......
    www
    http
    ---------

Вы также можете указать флаги `ispel` для этих слов (описание флагов `ispel` смотрите в документации `ISpell`) для поиска всех словоформ, например, "webmaster" и "webmasters". Попробуйте найти в словарях `ispel` слово с таким же способом образования различных форм и скопировать его флаги для нового слова. Например, словарь английского языка содержит такую строчку:

`postmaster/MS`

Таким образом, webmaster с флагом MS, возможно будет правильным:

`webmaster/MS`

Скопируйте составленный вами словарь в поддиректорию `/etc` корневой директории установки DataparkSearch и добавьте соответсвующие команды в файл конфигурации.

### 8.8.1.4. Где взять файлы Ispell

Вы можете найти файлы Ispell для многих языков на этой странице.

Для японского языка созданы квази-Ispell файлы, предназначенные для использования только с DataparkSearch. Вы можете скачать эти файлы с нашего веб-сервера или с одного из наших зеркал. См. Разд. 1.2>.

### 8.8.1.5. Модификация слов поисковых запросов

    Quffix [lang] [charset] [ispell-like suffix file name]

Команда Quffix похожа на команду Affix, описанную выше, за исключением того, что эти правила применяются к словам, указанным в запросе, а не к их нормальным формам, как это происходит для команды Affix. Загружаемый файл должен содержать только суффиксные правила (в терминах афиксных файлов ispell).

Эта команда предназначена, например, для указания правил перехода от одной части речи к другой в русском языке, когда это необходимо.

## 8.8.2. Aspell

Когда DataparkSearch используется с поддержкой aspell, возможно автоматическое расширение поискового запроса вариантами слов с исправленым правописанием. Чтобы включить эту возможность, необходимо установить Aspell на вашу систему до сборки DataparkSearch. Чтобы включить эту возможность, необходимо добавить команду `AspellExtensions yes` в файлы конфигурации `indexer.conf` и `search.htm` (или `searchd.conf`, если используется searchd).

Автоматиская корректировка правописания при поиске происходит только при установке параметра поиска `sp`, см. Разд. 8.1.2>.

## 8.8.3. Синонимы

Файлы синонимов устанавливаются в поддиректорию `etc/synonym` относительно корневой директории установки DataparkSearch. Большие файлы синонимов для некоторых языков вы должны скачать отдельно с нашего сайта или с одного из наших зеркал, см. Разд. 1.2>.

Для включения поддержки синонимов, добавьте в шаблон поиска `search.htm` команды вида `Synonym <filename>`, например:

    Synonym synonym/english.syn
    Synonym synonym/russian.syn

Имена файлов могут быть абсолютными (если имена начинаются с /), либо относительными поддиректории `etc` установки DataparkSearch.

Если используется `searchd`, добавьте эти команды вместо шаблона поиска в `searchd.conf`.

Вы можете создавать свои собственные списки синонимов. В качестве примера вы можете взять файл синонимов английского языка. В начале файла укажите следующие две команды:

    Language: en
    Charset:  us-ascii

- `Language` - стандартный (ISO 639) двубуквенный код языка.

- `Charset` - любая кодировка, поддерживаемая DataparkSearch (see Разд. 7.1>). Список синонимов должен быть закодирован с использованием этой кодировки.

Дополнительно вы можете указать в списке синонимов команду:

    Thesaurus: yes

Эта команда включает режим тезауруса для списка синонимов. В этом режиме только слова, расположенные на одной строке считаются синонимами.

## 8.8.4. Поиск без учёта акцентов над буквами

Начиная с версии 4.17 DataparkSearch также поддерживает нечувствительный к акцентам над буквами поиск.

Чтобы включить поддержку этой возможности, используйте команду AccentExtensions в вашем шаблоне `search.htm` (или в файле конфигурации `searchd.conf`, если используется searchd) для автоматического построений копий слов из запроса без учёта акцентов над буквами, и в вашем файле конфигурации `indexer.conf` для автоматического добавления таких копий в базу.

    AccentExtensions yes

Если команда AccentExtensions в файле конфигурации указана перед командами Spell и Affix, то копия этих данных без учёта акцентов над буквами будет загружаться автоматически.

## 8.8.5. Акронимы и аббревиатуры

Начиная с версии 4.30 поддерживается нечёткий поиск на основе акронимов и аббревиатур.

Файлы акронимов и аббревиатур устанавливаются в поддиректорию `etc/acronym` относительно корневой директории установки DataparkSearch.

Для включения поддержки акронимов и аббревиатур, добавьте в шаблон поиска `search.htm` команды вида `Acronym <filename>`, например:

    Acronym acronym/en.fido.acr
    Acronym acronym/en.acr

Имена файлов могут быть абсолютными (если имена начинаются с /), либо относительными поддиректории `etc` установки DataparkSearch.

Если используется `searchd`, добавьте эти команды вместо шаблона поиска в `searchd.conf`.

Вы можете создавать свои собственные списки синонимов. В качестве примера вы можете взять файл синонимов английского языка. В начале файла укажите следующие две команды:

    Language: en
    Charset:  us-ascii

- `Language` - стандартный (ISO 639) двубуквенный код языка.

- `Charset` - любая кодировка, поддерживаемая DataparkSearch (see Разд. 7.1>). Список синонимов должен быть закодирован с использованием этой кодировки.

Также вы можете расширять поисковые запросы при помощи регулярных выражений, задаваемых специальными коментариями в файлах акронимов. Например:

    #* regex last "([0-9]{2})[- \.]?([0-9]{2})[- \.]?([0-9]{2})" "+78622$1$2$3"

Этот комментарий задает преобразование из широко используемого формата записи локалных телефонных номеров, 99-99-99, в канонический формат, +78622XXXXXX. Таким образом телефонные номера становится возможным искать независимо от формата, в котором они были записаны. Опция `last` здесь означает, что процесс применения регулярных выражений останавливается после применения этого правила.

Пожалуйста, присылайте ваши списки синонимаов на адрес `<maxime@maxime.net.ru>`.

Пред. | Начало | След.
Кэш результатов поиска | Уровень выше | Разное