Как лучше всего хранить и искать в базе данных деревьев структур предложений естественного языка?
Используя 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?
Я написал простой проверочный сценарий, который может выполнять этот поиск, используя сочетание регулярных выражений и синтаксического анализа сетевого графа, но я не уверен, как бы реализовать это масштабируемым образом.
И да, я понимаю, что мой пример было бы тривиально получить, используя простой поиск по ключевым словам. Идея, которую я пытаюсь проверить, заключается в том, как я могу использовать преимущества грамматической структуры, чтобы отсеивать записи с похожими ключевыми словами, но с другой структурой предложений. Например, с указанным выше запросом я бы не Я хочу получить запись, связанную с предложением «Проверяет удаленную машину, чтобы найти пользователя, который загружает файлы».
, которое имеет похожие ключевые слова, но, очевидно, описывает совершенно другое поведение.