Поиск на естественном языке (поиск по намерениям пользователя)

Я пытаюсь создать поисковую систему, которая позволит моим пользователям выполнять поиск с помощью команд на естественном языке, как Google Now. За исключением того, что моя поисковая система немного более ограничена, поскольку она в основном будет использоваться на сайте электронной коммерции и позволяет пользователям выполнять поиск на определенных устройствах.

Некоторые из функций, которые я хочу предоставить:

1) Разрешить пользователям искать по бренду 2) По модели 3) по ценовому диапазону 4) По возможностям 3G/4G 5) По операционной системе

и т.д.

Я создал фиктивную версию, которая ищет определенные ключевые слова, такие как «цена», «стоимость», «iphone 5» и т. д.

Является ли создание собственного словаря/массива ключевых слов лучшим способом для достижения этой цели?

Или существуют существующие словари/API, которые помогут проанализировать поисковый запрос моего пользователя и вернуть соответствующую информацию.


person Nishant Roy    schedule 26.05.2015    source источник


Ответы (2)


См. следующий пример:

«Найдите мне телефон Android с 4 ГБ оперативной памяти и не менее 16 ГБ встроенной памяти».

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

"найдите мне телефон на базе Android с 4 ГБ оперативной памяти и не менее 16 ГБ встроенной памяти".

Далее на входе будут числа.

«Найдите мне телефон Android с 4 ГБ оперативной памяти и не менее 16 ГБ встроенной памяти».

Вы бы уже извлекли слова «андроид» и «телефон». Теперь вам нужно извлечь числа — вместе с 2 или 3 словами до и после них.

"найдите мне телефон Android с 4 ГБ оперативной памяти и не менее 16 ГБ встроенной памяти".

Следующим шагом будет выяснить, что означают эти цифры. Для этого вам понадобится таблица, подобная приведенной ниже: (Давайте назовем эту таблицу «Свойства»)

введите здесь описание изображения

Сравните приведенную выше таблицу с числами и словами вокруг чисел, которые вы извлекли из ввода:

4 --- телефон с ГБ,оперативной памятью 6 --- не менее,ГБ

Используя достойный алгоритм и таблицу свойств, вы могли бы легко понять, что означают числа. Просто сравните каждое число с каждым свойством - сначала проверьте, попадает ли число число в диапазон свойства, а затем проверьте, находятся ли слова вокруг числа во входных данных совпадают с тегами свойства. Теперь, когда вы знаете, что означает каждое из чисел (4 = оперативная память, 6 = хранилище), вам нужно проверить входные данные на наличие неравенств.

Проверка неравенства:

Если есть такие фразы, как «не менее», «не более чем», «не более» и т. д., то у вас есть неравенство . В нашем случае вы не найдете таких слов рядом с цифрой 4, но вы можете найти термин «по крайней мере» рядом с цифрой 6. Это означает, что пользователь хочет телефон с ровно 4 ГБ оперативной памяти (используйте == ), но внутреннее пространство для хранения может быть больше или равно 6 ГБ (используйте >=).

Также обратите внимание, что если вы не можете связать число со свойством, наиболее вероятно, что число является ценой.

Есть и другие функции, которые вы могли бы добавить... например, позволить пользователю сортировать результаты в порядке возрастания/убывания свойства. Например:

"найдите мне телефон Android с 4 ГБ оперативной памяти и не менее 16 ГБ встроенной памяти. Покажите дешевые сначала"

person farizrahman4u    schedule 28.05.2015

http://www.nltk.org/

Я полагаю, вы хотели бы что-то вроде этого.

person Justin    schedule 28.05.2015