Поиск структуры предложений естественного языка

Как лучше всего хранить и искать в базе данных деревьев структур предложений естественного языка?

Используя OpenNLP English Treebank Parser, я могу получить довольно надежный синтаксический анализ структуры предложений для произвольных предложений. Я бы хотел создать инструмент, который может извлекать все строки документа из моего исходного кода, генерировать эти деревья для всех предложений в строках документа, хранить эти деревья и связанные с ними имена функций в базе данных, а затем разрешать пользователь для поиска в базе данных с помощью запросов на естественном языке.

Итак, учитывая предложение «Это загружает файлы на удаленный компьютер». для функции upload_files () , у меня будет дерево:

(TOP
  (S
    (NP (DT This))
    (VP
      (VBZ uploads)
      (NP (NNS files))
      (PP (TO to) (NP (DT a) (JJ remote) (NN machine))))
    (. .)))

Если бы кто-то ввел запрос «Как можно Я загружаю файлы? ", Что приравнивается к дереву:

(TOP
  (SBARQ
    (WHADVP (WRB How))
    (SQ (MD can) (NP (PRP I)) (VP (VB upload) (NP (NNS files))))
    (. ?)))

как мне хранить и запрашивать эти деревья в базе данных SQL?

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

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

5
задан Cerin 10 February 2011 в 16:19
поделиться