Интеллектуальный поиск по автору
Написал Administrator   
Форма, в которой читатель должен вводить сведения об авторе для поиска в ИРБИС должна точно соответствовать той, в которой они находятся в словаре. Если в словаре после фамилии ставится запятая, а после запятой пробел, то пользователь должен в точности повторить эту последовательность символов. В противном случае поиск будет неудачным.
Разумеется, нельзя рассчитывать, что читатель будет вводить данные в таком виде поэтому целесообразно разбивать их на отдельные слова, и, в том случае если хоть одно из введённых слов найдено в словаре(т. е. является фамилией), считать поиск удачным.(инициалы при этом, естественно, будут игнорироваться.). Но, разумеется, такой подход не может обеспечить достаточно точного поиска. И существует только один способ повысить его точность, преодолевая пороки формы – это алгоритмическая унификация введённых пользователем данных.
Её можно выполнять двумя средствами: ИРБИС Script'ом или Java Script'ом. ИРБИС Script неудобен в использовании и подключении, но достаточно надёжен. Java Script алгоритм ненадёжен, но при корректной работе обеспечивает максимальную эффективность. Тем не менее, динамически изменяя режим поиска, с помощью Java Script можно добиться вполне приемлемых результатов. Если содержимое поля опознаётся как "автор с инициалами", то оно может быть соответствующим образом отформатировано. Если же пользователь ввёл что-то несуразное, или браузер некорректно интерпретировал регулярные выражения, может быть применён поиск "хотя бы по одному из введённых слов".
В описанном решении обработка происходит при потере полем фокуса и при отправке формы. Благодаря этому пользователь в большинстве случаев может увидеть результат унификации введённых данных. Все нижеприведённые формы написания имени будут приведены к одной:
Иванов, А. В.

иванов а в
иванов а.в.
иванов, а.в.
иванов а. в.
иванов акакий васильевич
а.в. иванов
а. в. иванов

Будут корректно интерпретированы варианты с одним инициалом:
в. иванов
иванов а
иванов, а.
иванов акакий

Тем не менее, существуют ситуации, когда алгоритм может сработать неверно. Хорошим примером является имя корейского лидера - Ким Ир Сен. Алгоритмическое выделение инициалов в условиях, когда даже человеку трудно определить, где фамилия, а где имя невозможно. Но в таких случаях нельзя и предотвратить алгоритмическую обработку(для программы Иванов Иван Иванович и Чен Ир Ким - одно и то же), следовательно будут неизбежно возникать ошибки. Когда нельзя полагаться на правильность как обработанных, так и исходных данных, остаётся только одно – проверка тех и других по каталогу. После неё можно оставить именно ту форму, которая присутствует в каталоге и этим обеспечить успех поиска. Использованный алгоритм позволяет сделать это без перезагрузки страницы, путём динамической подкачки данных.
Общий принцип работы алгоритма унификации заключается в том, что данные об авторе в обработанной и исходной форме сопоставляются со словарём базы.
1. Средствами Java Script осуществляется унификация введённых пользователем данных;
2. Результаты работы скрипта, вместе с поисковыми данными в исходной форме отправляются на сервер;
а) Если алгоритмически обработанная форма найдена в каталоге, она считается верной и записывается в поле «Автор»;
б) Если в каталоге найдена только исходная форма данных(Николай I), результаты алгоритмической обработки(Николай, I.) игнорируются и в поле «Автор» остаётся исходное значение;
в) Если обе формы, как исходная, так и обработанная отсутствуют в каталоге:
* Выдаётся сообщение о том, что книги искомого автора отсутствуют. ОДНАКО
* Если при этом читателем были введены сложные данные(Ким Ир Сен, Иванов Иван Иванович) они разбиваются на части и осуществляется запрос к словарю авторов на наличие хотя бы одной из частей(фамилии). При успешном запросе, аналогичные правила будут использованы для параметрирования поиска в каталоге.

Необходимо заметить, что последнее решение(поиск с ИЛИ) обусловлено лишь тем, что в нашем каталоге не раскрываются инициалы. При описании книг Ким Ир Сена(если таковые вообще существуют в природе) наши каталогизаторы, скорее всего, признают Ким фамилией, а И.С. - инициалами(его ныне здравствующего сына зовут Ким Чен Ир). Поэтому искать КИМ & ИР & СЕН вместе в нашем словаре смысла не имеет. Если бы инициалы раскрывались, то конечно следовало бы сформировать из инициалов и фамилий отдельный словарь и осуществлять запрос совпадений уже не с оператором ИЛИ, а с оператором И, чтобы при его успешном выполнении соответствующим образом параметрировать поиск.

Разумеется, всё вышеперечисленное можно было бы целиком выполнять на стороне сервера. Но в этом случае нельзя было бы реализовать информирование читателя о результатах обработки. А ведь своевременно получить сообщение об опечатке очень приятно. В типичной ситуации, когда поиск осуществляется по автору и заглавию, подсказки важны. Читателю достаточно перевести курсор из поля Автор в любое другое поле. Он может увидеть или нормализованную форму данных об авторе(если нормализация удалась), или сообщение что введённый автор в каталоге не найден, или сведения о том, что полных совпадений с введёнными данными нет и поиск будет неточным. Всё это появляется без перезагрузки, прямо под полем «Автор».

Скрипт тестировался в Opera 7.5, Opera 9.02, Explorer 6.0.2800, Mozilla 1.0.7.