Подсказки при вводе ФИО в отдельных полях

Команда по формированию подсказок при вводе дискретного ФИО предназначена для упрощения и ускорения процедуры заполнения формы с именем персоны в рамках приложения пользователя. При использовании данной функции сервиса полагается, что приложение пользователя содержит форму, имеющую поля, в которые должны вводиться компоненты ФИО персоны – фамилия, имя и отчество - в виде отдельных строк. Если форма содержит единое поле, куда должно вводиться ФИО в виде сплошной строки, для формирования подсказок следует использовать команду получения подсказок при вводе сплошного ФИО: suggest/person/solid.

Необходимость заполнения подобных форм возникает у пользователей при регистрации на сайтах интернет-магазинов и сервисов. Операторам банков и микрофинансовых организаций (МФО) приходится вводить ФИО при регистрации каждого нового клиента. Суммарное время, затрачиваемое на ввод этих данных, может быть значительным, кроме того, при вводе сложных имен возможны ошибки и опечатки.

Сделать ввод имени комфортным и быстрым позволяет функция формирования подсказок, которая предлагает пользователю список наиболее вероятных вариантов завершения компонента ФИО, вводимого им в настоящий момент. При наличии среди предложенных вариантов требуемого, пользователю нужно лишь выбрать его из списка и перейти к вводу следующего компонента ФИО в другое поле формы.

Приведенная ниже форма демонстрирует работу данной функции. Список подсказок отображается при вводе компонентов ФИО в соответствующие поля формы.

Варианты в списке ранжируются по уменьшению вероятности использования их пользователем. При поиске и ранжировании учитывается как самостоятельная популярность предлагаемого варианта завершения компонента ФИО, вводимого пользователем в настоящий момент, так и его сочетаемость с уже введенными компонентами. Сочетаемость компонентов имени подразумевает:

  • Соответствие пола (все компоненты имени должны относиться к одному и тому же полу).
  • Соответствие национальности (компоненты имени с высокой вероятностью относятся к одной и той же или близким национальностям).

Таким образом, если пользователь ввёл, например, армянское женское имя в поле Имя, то при вводе в поля Отчество и Фамилия ему будут предлагаться подсказки с армянскими женскими отчествами и фамилиями соответственно. При генерации подсказок учитывается, что слова, составляющие имя (как завершенные, так и вводимое в настоящий момент), могут содержать ошибки. При выполнении поиска осуществляется автоматическое исправление этих ошибок.

Для визуализации предлагаемых сервисом подсказок здесь используется популярный jQuery-плагин jQuery-Autocomplete, доступный по следующей ссылке: https://github.com/devbridge/jQuery-Autocomplete.

Для использования данного плагина с нашим сервисом следует использовать следующий инициализирующий JavaScript код.

//настраиваем плагин для работы с нашим сервисом

//общие опции для подсказок по всем полям ФИО
var CommonOptions =
{
  serviceUrl:'http://ahunter.ru/site/suggest/person',
  noCache: true,
  triggerSelectOnValidInput: false,
  params: { output: "json" },
  maxHeight: 500
};

//опции для подсказок по фамилии
var LastNameOptions =
{  
  paramName: "last_name", 
  params: 
  { 
    active: "last_name", 
    first_name: function() { return $("#js-FirstNameField").val(); },
    patronym: function() { return $("#js-PatronymField").val(); }
  }
};

//опции для подсказок по имени
var FirstNameOptions =
{  
  paramName: "first_name", 
  params: 
  {
    active: "first_name", 
    last_name: function() { return $("#js-LastNameField").val(); },
    patronym: function() { return $("#js-PatronymField").val(); }
  }
};

//опции для подсказок по отчеству
var PatronymOptions = 
{  
  paramName: "patronym", 
  params: 
  {
    active: "patronym", 
    last_name: function() { return $("#js-LastNameField").val(); },
    first_name: function() { return $("#js-FirstNameField").val(); }
  }
};

//запускаем плагин, 
//селекторы '#js-LastNameField', '#js-FirstNameField' и '#js-PatronymField'
//соответствуют полям, где вводятся фамилия, имя и отчество персоны

$('#js-LastNameField').autocomplete( 
  $.extend( true, LastNameOptions, CommonOptions ) );

$('#js-FirstNameField').autocomplete( 
  $.extend( true, FirstNameOptions, CommonOptions ) );

$('#js-PatronymField').autocomplete( 
  $.extend( true, PatronymOptions, CommonOptions ) );

API нашего сервиса не ограничивает пользователя в выборе средств визуализации подсказок. Вместо jQuery-Autocomplete может быть использован любой GUI фреймоворк, в составе которого присутствуют компоненты для организации автоматического дополнения при заполнении форм ввода.

Простота предлагаемого нами API в части формирования подсказок позволяет разрабатывать собственные средства визуализации с использованием имеющихся под рукой технологий проектирования и разработки пользовательских интерфейсов.

Принцип использования подсказок при вводе ФИО в отдельных полях

Данная команда полагает, что компоненты ФИО персоны вводятся пользователем в режиме реального времени. Каждый раз, когда пользователь вводит очередной символ целевого компонента ФИО, увеличивается количество информации, на основе которой сервис может сформировать подсказки для этого компонента.

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

Для организации такого взаимодействия приложение пользователя должно отслеживать события, возникающие при возникновении изменений в одном из полей формы, в которые вводятся компоненты ФИО. При возникновении такого события приложение для получения актуальных подсказок должно отсылать сервису запрос, содержащий текст, введенный к настоящему моменту в каждое из этих полей, с указанием того, в какое из полей сейчас вводится информация пользователем.

Пример простого запроса подсказок

Приведенный ниже запрос отсылает сервису информацию о том, что в поле Фамилия введен текст "Смирнов", а в поле Имя пользователь к настоящему моменту ввёл текст "А" и продолжает ввод. На основании этой информации сервис должен сформировать подсказки для завершения компонента, вводимого пользователем в настоящий момент (в данном случае этим компонентом является имя).

http://ahunter.ru/site/suggest/person?output=json;active=first_name;first_name=%D0%90;
last_name=%D0%A1%D0%BC%D0%B8%D1%80%D0%BD%D0%BE%D0%B2

В данном запросе используются следующие параметры.

  • output=json – сообщает сервису о том, что необходимо вернуть ответ в формате JSON.
  • last_name=%D0%A1%D0 ... %BE%D0%B2 – закодированная с использованием URL-encoding введенная пользователем фамилия "Смирнов" в кодировке UTF-8.
  • first_name=%D0%90 - закодированное с использованием URL-encoding введенное пользователем начало имени "А" в кодировке UTF-8, для которого необходимо получить подсказки.
  • active=first_name – сообщает сервису о том, что в настоящий момент пользователь вводит имя, и именно для него должны быть сформированы подсказки.

Рассмотрим более подробно все параметры, которые сервис может получать в рамках данной команды.

Параметры команды

Обязательные параметры для выполнения запроса.

  • http://ahunter.ru/site/suggest/person - URL-команды.
  • output=json или output=xml – формат, в котором требуется вернуть результат выполнения команды.
  • active=last_name или active=first_name или active=patronym – компонент ФИО, вводимый пользователем в настоящий момент. Для этого компонента сервис должен сформировать подсказки.

Опциональные параметры.

  • last_name=строка – строка, содержащая введенную пользователем фамилию персоны. Если этот параметр не задан, полагается, что поле Фамилия пусто.
  • first_name=строка – строка, содержащая введенное пользователем имя персоны. Если этот параметр не задан, полагается, что поле Имя пусто.
  • patronym=строка – строка, содержащая введенное пользователем отчество персоны. Если этот параметр не задан, полагается, что поле Отчество пусто.
  • output=pretty – опция, применимая только в случае использования JSON формата ответа сервиса. Данная опция требует, чтобы сервис выполнил "красивое" форматирование возвращаемого JSON-текста, расставив в нем переносы строк, отступы и пробельное прореживание. Опция может быть полезна при отладке взаимодействия пользовательского приложения с сервисом. Если этот параметр не задан, JSON-ответ будет возвращен в виде сплошной строки.
  • output=cp1251 – опция, применимая только в случае использования XML формата ответа сервиса. Данная опция требует, чтобы сервис вернул XML-ответ в кодировке windows-1251. Если этот параметр не задан, данные возвращаются в кодировке UTF-8.
  • input=utf8 или input=cp1251 – кодировка UTF-8 или windows-1251, в которой представлены входные данные в параметрах last_name, first_name и patronym. Если этот параметр не задан, полагается, что данные получены в кодировке UTF-8.
  • personlim=число - ограничение на число возвращаемых подсказок. Если данное значение превышает установленный администратором сервиса порог, равный 20 подсказкам, то данное значение будет принудительно уменьшено до этого допустимого порога. Если в запросе данный параметр не указан, то в качестве лимита будет выступать установленное администратором сервиса умолчальное значение, равное 10 подсказкам.

Пример запроса подсказок с дополнительными опциями

Приведенный ниже запрос отсылает сервису информацию о том, что в поле Имя введен текст "Фёдор", в поле Отчество - текст "Михайлович", а в поле Фамилия пользователь к настоящему моменту ввёл текст "Д" и продолжает ввод. На основании этой информации сервис должен сформировать подсказки для завершения компонента, вводимого пользователем в настоящий момент (в данном случае этим компонентом является фамилия).

http://ahunter.ru/site/suggest/person?input=utf8;output=json|pretty;active=last_name;
personlim=3;last_name=%D0%94;first_name=%D0%A4%D1%91%D0%B4%D0%BE%D1%80;
patronym=%D0%9C%D0%B8%D1%85%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%D0%B8%D1%87

В данном запросе используются следующие параметры.

  • input=utf8 – сообщает сервису о том, что обрабатываемая строка представлена в кодировке UTF-8.
  • output=json|pretty – сообщает сервису о том, что необходимо вернуть ответ в формате JSON, отформатировав его "красиво".
  • first_name=%D0%A4%D1 ... %BE%D1%80 – закодированное с использованием URL-encoding введенное пользователем имя "Фёдор" в кодировке UTF-8.
  • patronym=%D0%9C%D0 ... %B8%D1%87 - закодированное с использованием URL-encoding введенное пользователем отчество "Михайлович" в кодировке UTF-8.
  • last_name=%D0%94 - закодированное с использованием URL-encoding введенное пользователем начало фамилии "Д" в кодировке UTF-8, для которого необходимо получить подсказки.
  • active=last_name – сообщает сервису о том, что в настоящий момент пользователь вводит фамилию, и именно для неё должны быть сформированы подсказки.
  • personlim=3 – сообщает сервису, что следует вернуть только три наиболее подходящие подсказки для вводимого ФИО.

Результат запроса: подсказки в формате JSON

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

  • Имя: "Фёдор"
  • Отчество: "Михайлович"
  • Фамилия: "Д" (вводится в настоящий момент).

Результирующий JSON-ответ получен с использованием опции output=json|pretty, позволяющей выполнить "красивое" форматирование JSON-текста.

{
  "query" : "Фёдор Михайлович Д",
  "request_process_time" : 15,
  "suggestions" : [
    {
      "value" : "Дмитриев"
    },
    {
      "value" : "Давыдов"
    },
    {
      "value" : "Денисов"
    },
    {
      "value" : "Данилов"
    },
    {
      "value" : "Долгоруков"
    },
    {
      "value" : "Демидов"
    },
    {
      "value" : "Дьяконов"
    },
    {
      "value" : "Дёмин"
    },
    {
      "value" : "Дьяков"
    },
    {
      "value" : "Дементьев"
    }
  ]
}

Результатом формирования подсказок для вводимого ФИО является JSON-объект со следующими элементами.

  • suggestions – массив с вариантами подсказок для обработанного ФИО.
  • query – строка, содержащая все полностью или частично введенные пользователем компоненты ФИО.
  • request_process_time – время обработки всего запроса в целом в миллисекундах.

Ниже приведено детальное описание этих элементов.

JSON-массив suggestions

Поскольку при формировании подсказок полагается, что ФИО введено не полностью, вариантов завершения написания компонента ФИО, вводимого пользователем в настоящий момент, в общем случае может быть несколько. Каждый из вариантов является подсказкой для пользователя, которую тот может выбрать в качестве целевого значения компонента. Каждому предлагаемому сервисом варианту соответствует отдельный элемент JSON-массива suggestions. Количество предлагаемых вариантов может лимитироваться с помощью опционального параметра personlim, передаваемого в рамках запроса.

Пример JSON-объекта, соответствующего одному варианту подсказок для вводимого ФИО, приведен ниже.

{
  "value" : "Дмитриев"
}

Каждый элемент массива suggestions представляет собой JSON-объект со следующими элементами.

  • value – строка, содержащая один из вариантов завершения компонента ФИО, вводимого пользователем в настоящий момент. Вариант компонента ФИО, предлагаемый сервисом в этой строке, приведён в стандартизованном виде с исправленными ошибками.

Поскольку формирование подсказок происходит в режиме реального времени, никакой дополнительной информации по каждой подсказке сервис не возвращает. Это обусловлено необходимостью минимизировать сетевой трафик и время отклика сервиса. Чтобы получить исчерпывающую информацию по итоговому ФИО, которое ввел или выбрал из предложенных подсказок пользователь, приложению пользователя следует использовать команду стандартизации ФИО: cleanse/person.

Результат запроса: подсказки в формате XML

Здесь и далее приводится описание ответа сервиса в случае использования формата XML. По существу, возвращаемые в XML-ответе элементы имеют аналогичное назначение JSON-элементам, описанным выше. Для получения ответа в формате XML необходимо в исходном запросе использовать значение параметра output=xml.

Ниже приведен XML-ответ сервиса в результате формирования подсказок по запросу со следующими исходными данными:

  • Имя: "Фёдор"
  • Отчество: "Михайлович"
  • Фамилия: "Д" (вводится в настоящий момент).
<ProcessSuggestResult>
  <Query val="Фёдор Михайлович Д"/>
  <Suggestion val="Дмитриев"/>
  <Suggestion val="Давыдов"/>
  <Suggestion val="Денисов"/>
  <Suggestion val="Данилов"/>
  <Suggestion val="Долгоруков"/>
  <Suggestion val="Демидов"/>
  <Suggestion val="Дьяконов"/>
  <Suggestion val="Дёмин"/>
  <Suggestion val="Дьяков"/>
  <Suggestion val="Дементьев"/>
</ProcessSuggestResult>

Результатом формирования подсказок для вводимого ФИО является XML-документ со следующими дочерними элементами.

  • Query – данный XML-элемент содержит строку, включающую все полностью или частично введенные пользователем компоненты ФИО. Эта строка передается с помощью атрибута val этого XML-элемента. Данный элемент является полным аналогом JSON-элемента query, возвращаемого в JSON-ответе сервиса.
  • Suggestion – данный XML-элемент соответствует одному из предложенных сервисом вариантов завершения написания компонента ФИО, вводимого пользователем в настоящий момент. Поскольку при формировании подсказок полагается, что ФИО введено не полностью, таких вариантов может быть несколько. В связи с этим в XML-ответе может присутствовать несколько элементов Suggestion. Список из всех XML-элементов Suggestion является аналогом JSON-массива suggestions, возвращаемого в JSON-ответе сервиса.

Ниже приведено детальное описание этих XML-элементов.

XML-элемент Suggestion

Элемент Suggestion содержит информацию об одной подсказке из предложенного сервисом списка подсказок по вводимому ФИО. Пример данного элемента приведен ниже.

<Suggestion val="Дмитриев"/>

Данный элемент содержит следующие атрибуты.

  • val - строка, содержащая один из вариантов завершения компонента ФИО, вводимого пользователем в настоящий момент. Вариант компонента ФИО, предлагаемый сервисом в этой строке, приведён в стандартизованном виде с исправленными ошибками.
версия сервиса:
© ixLab, 2007-2017, e-mail: info@ixlab.ru
обработано за 0 (мс)