Поиск на естественном языке (пользовательский поиск)
Я пытаюсь создать поисковую систему, которая позволит моим пользователям выполнять поиск с помощью команд на естественном языке, как в Google Now. Кроме того, моя поисковая система немного более ограничена, так как она в основном будет использоваться на сайте электронной коммерции и позволит пользователям искать определенные устройства.
Некоторые из функций, которые я хочу предоставить:
1) Разрешить пользователям поиск по бренду 2) По модели 3) по ценовому диапазону 4) По возможности 3 г /4 г 5) По операционной системе
и т. д.
Я создал фиктивную версию, используя поиск по определенным ключевым словам, таким как "цена", "стоимость", "iphone 5" и т. Д.
Является ли создание моего собственного словаря / массива ключевых слов лучшим способом для достижения этой цели?
Или существуют существующие словари /API, которые помогут разобрать поисковый запрос моего пользователя и вернуть соответствующую информацию.
2 ответа
Смотрите следующий пример:
"найди мне телефон на Android с 4 ГБ оперативной памяти и объемом памяти не менее 16 ГБ".
Прежде всего вам нужен список слов, которые вы можете непосредственно извлечь из ввода и вставить в ваш поисковый запрос. Это самая простая часть.
"найди мне телефон на Android с 4 ГБ оперативной памяти и объемом памяти не менее 16 ГБ".
Далее будут цифры на входе.
"найди мне телефон на Android с 4 ГБ оперативной памяти и объемом памяти не менее 16 ГБ".
Вы бы уже извлекли слова "android" и "phone" к настоящему времени. Теперь вам нужно извлечь цифры - вместе с 2 или 3 словами до и после них.
"найди мне телефон на Android с 4 ГБ оперативной памяти и объемом памяти не менее 16 ГБ ".
Ваш следующий шаг - выяснить, что означают эти цифры. Для этого вам понадобится таблица, подобная приведенной ниже: (Давайте назовем эту таблицу "Свойства")
Сравните приведенную выше таблицу с числами и словами вокруг чисел, которые вы извлекли из ввода:
4 --- телефон, с, ГБ, оперативной памяти 6--- по крайней мере, ГБ, память
Используя приличный алгоритм и таблицу свойств, вы можете легко выяснить, что означают числа. Просто сравните каждое число с каждым свойством - сначала проверьте, попадает ли число в диапазон свойства, а затем проверьте, совпадают ли слова вокруг числа. во входных совпадают с тегами свойства. Теперь, когда вы знаете, что означает каждое из чисел (4= оперативная память,6= хранилище), вы должны проверить неравенства во входных данных.
Проверка неравенства:
Если есть какие-либо фразы, такие как " по крайней мере ", " не более чем ", " самое большее " и т. Д., То у вас есть неравенство. В нашем случае вы не можете найти таких слов рядом с номером 4, но вы можете найти термин "по крайней мере" рядом с номером 6. Это означает, что пользователь хочет телефон с 4 ГБ оперативной памяти (используйте ==), но объем внутреннего хранилища может быть больше или равен 6 ГБ (используйте>=).
Также обратите внимание, что, если вы не можете связать число со свойством, наиболее вероятно, что число является ценой.
Вы можете добавить больше возможностей, например, позволить пользователю сортировать результаты в порядке увеличения / уменьшения свойства. Например:
"найди мне телефон на Android с 4 ГБ оперативной памяти и объемом памяти не менее 16 ГБ. Сначала покажи дешевые "
Я полагаю, что вы хотите что-то вроде этого.