Как узнать, является ли предложение вопросом (вопросительным)? - PullRequest
23 голосов
/ 26 августа 2010

Существует ли библиотека / алгоритм Java с открытым исходным кодом для определения, является ли конкретный фрагмент текста вопросом или нет?Я работаю над системой ответов на вопросы, которая должна анализировать, является ли вводимый пользователем текст вопросом.Я думаю, что проблему, вероятно, можно решить, используя библиотеки NLP с открытым исходным кодом, но это, очевидно, более сложная, чем простая часть речевого тегирования.Так что, если кто-то может вместо этого сказать алгоритм для этого с помощью существующей библиотеки NLP с открытым исходным кодом, это тоже было бы хорошо.Также дайте мне знать, если вы знаете библиотеку / инструментарий, который использует интеллектуальный анализ данных для решения этой проблемы.Несмотря на то, что будет трудно получить достаточные данные для целей обучения, я смогу использовать данные обмена стека для обучения.

Ответы [ 3 ]

12 голосов
/ 17 сентября 2010

В синтаксическом разборе вопроса правильная структура будет иметь вид:

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

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

, то есть:

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

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

1 голос
/ 21 декабря 2010

Взгляните на Анализатор грамматики ссылок Это многоязычный синтаксический анализатор, основанный на концепции пар ссылок связанных слов в предложении. Он написан на C, но также имеет интерфейс Java JNI.

1 голос
/ 31 августа 2010

Многие квази-вопросы / запросы на информацию изложены в грамматической форме утверждения;например, «Я хотел бы знать, кто украл мой велосипед».

Я бы отказался от всякой надежды на определение из его структуры, является ли ввод пользователя вопросом, и просто предположим, , что это вопрос, если только он не является однозначно,Вы можете использовать итеративный интерактивный подход, чтобы система могла улучшить свое «понимание» ввода пользователя:

     User: I would like to know how many angels fit on the head of a pin. 
     System: Do you have a question about angels?
     User: Yes.          
     System: Do you want to know if angels are fit?
     User: No.
     System: Do you want to know if angels have heads?
     User: Possibly.         
     System: Do you want to know if angels have pins?
     User: No.         
     System: Do you want to know if angels are numerous?
     User: No.
     System: Do you want to know the dimensions of an angel?
     User: Yes.
     System: Do you mean angels in paintings?
     User: No.
     System: Do you mean angels in myth and religious writing?
     User: Yes.
     System: Angels are metaphysical beings.


     User: I hear that Pennsylvania was founded by William Penn. Is that true?
     System: Do you have a question about hearing?
     User: No.
     System: Do you have a question about Pennsylvania?
     User: Yes.         
     System: Pennsylvania was founded by William Penn.
     User: When?         
     System: 1682.
     User: What does the name mean?
     System: What name?
     User: Pennsylvania!
     System: Do you want to know the meaning of Pennsylvania?
     User: Yes.
     System: Pennsylvania means Penn's Woods.
...