Определите, является ли предложение запросом

Как определить, есть ли поисковый запрос в форме вопроса?

Например, клиент может выполнить поиск "как я могу отслеживать свой заказ" (обратите внимание на знак вопроса).

Я предполагаю, что большинство прямых вопросов будут соответствовать определенной грамматике.

Очень простой подход догадки:

START WORDS = [who, what, when, where, why, how, is, can, does, do]

isQuestion(sentence):
  sentence ends with '?'
  OR sentence starts with one of START WORDS

Список START WORDS может быть длиннее. Область действия - это окно поиска веб-сайта, поэтому я считаю, что в список не должно быть включено слишком много слов.

Есть ли библиотека, которая может сделать это лучше, чем мой простой подход? Любые улучшения в моем подходе?

Ответ 1

Смотрите также: Как узнать, является ли предложение вопросом (вопросительным)?

Мой ответ на этот вопрос:

В синтаксическом анализе вопроса (полученного с помощью инструментария типа nltk) правильная структура будет иметь вид:

(SBARQ (WH+ (W+) ...)
       (SQ ...*
           (V+) ...*)
       (?))

Таким образом, используя любой доступный синтаксический синтаксический анализатор, дерево с SBARQ node, имеющее встроенный SQ (необязательно), будет индикатором, представляющим собой вопрос. WH + node (WHNP/WHADVP/WHADJP) содержит вопросник (кто/что/когда/где/почему/как), а SQ содержит инвертированную фразу.

i.e.:

(SBARQ 
  (WHNP 
    (WP What)) 
  (SQ 
    (VBZ is) 
    (NP 
      (DT the) 
      (NN question)))
  (. ?))

Конечно, наличие большого количества предшествующих статей приведет к ошибкам в синтаксическом анализе (которые могут быть обработаны), так как это будет очень плохо написанные вопросы. Например, название этого сообщения "Как узнать, является ли предложение вопросом?" будет иметь SBARQ, но не SQ.

Ответ 2

Вам понадобится гораздо более сложная форма лингвистического анализа, чтобы снять это. Нужна проверка? Хорошо...

Является ли олень оленей.

Если есть завещание, есть способ.

Когда придет время, я буду прыгать!

Почему нет. У меня нет памперникеля.

Ответ 3

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

  • Ручное создание набора данных поезда: получите аннотацию - с информацией, если это вопрос или нет, - сбор текста или создать такой корпус по своему усмотрению (это должно быть более 100 документов, и многие вопросы не должны быть прямые вопросы)
  • Найдите наиболее важные функции - извлеките часть речей, 5W1H (что, что,..., как), получите позицию глагола в каждом из предложений и другие вещи, которые могут быть полезны при распознавании вопрос
  • Создайте вектор для каждого из предложений функций (вам нужны оба, положительные и отрицательные примеры) на основе извлеченного informaiton, например,

    | Есть? | Глагол на второй позиции | Имеет 5W1H | Является 5W1H на 1-й позиции в предложении |... | длительность предложения | Возникает вопрос |

  • Используйте векторы для подготовить алгоритм машинного обучения, например MaximumEntropy, SVM (вы можете использовать Wekka или Knime)

  • Используйте обучаемый алгоритм для распознавания вопроса.

  • Если необходимо (новые примеры вопросов), повторите шаги.

Ответ 4

Чтобы определить начальные слова в предложениях вопросов, вы должны пройти через большой текстовый корпус, который ищет предложения, заканчивающиеся на ?, и выясните наиболее часто встречающиеся стартовые слова, которые вы найдете в них.

Несколько вы пропустили, что приходит на ум, включая WHICH, AM, ARE, WAS, WERE, МОЖЕТ, МОЖЕТ, МОЖЕТ, МОЖЕТ, БУДЕТ, БУДЕТ, ДОЛЖЕН, ДОЛЖЕН БЫТЬ, ИМЕЛ, ДЕЛАТЬ И ДИД. Возможно, ИФ, чтобы пойти с КОГДА. Также рассмотрите IN, AT, TO, FROM и ON, плюс, возможно, UNDER и OVER. Все зависит от типа вашей системы запросов и от того, какая широта в запросах на естественном языке вы надеетесь предоставить своим пользователям.

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

Это должно найти много вопросительных знаков; Возможны также императивы?

В зависимости от того, насколько вы хотите получить удовольствие, вы можете использовать что-то вроде Wordnet как начало тегов частичной речи. Его главным образом для наборов синонимов, включая гиперним, hyponym, holonym и информацию о мерониме, но я верю, что у вас будет другая информация, которую вы ищете.

В Википедии есть несколько статей о ответе на вопрос и поисковые системы на естественном языке. У обоих есть ссылки, которые вы, возможно, захотите продолжить. Вы также можете взглянуть на эти документы в формате PDF:

Наконец, кажется, интересен START Natural Language Question Answering System из MIT.

Ответ 5

В ответ на ответ JohnFx это становится еще хуже. Ниже четко задаются вопросы:

  • У вас есть вопросы.
  • Будет ли этот ответ достаточным
  • Вопрос, что это за

И тогда вы обнаружите, что пользователи начинают вводить следующие запросы:

  • Я хотел бы знать, какие вопросы.

Это даже вопрос? Синтаксически нет, но он заслуживает ответа, который легко можно было бы назвать ответом. (Эти типы запросов могут быть довольно распространенными, в зависимости от вашей популяции пользователей.)

Нижняя строка: если вы не будете обрабатывать вопросы специальным, лингвистически сложным способом (например, построить прямой ответ с использованием естественного языка), распознавание их может даже не быть интересным. Выбор правильных ключевых слов из запроса может быть гораздо более полезным.