存储和搜索自然语言句子结构树数据库的最佳方式是什么?
Using OpenNLP 的 http://incubator.apache.org/opennlp/英语树库解析器,我可以对任意句子进行相当可靠的句子结构解析。我想做的是创建一个工具,可以从源代码中提取所有文档字符串,为文档字符串中的所有句子生成这些树,将这些树及其关联的函数名称存储在数据库中,然后允许用户使用自然语言查询来搜索数据库。
所以,给出这个句子"This uploads files to a remote machine."
对于函数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 数据库中存储和查询这些树?
我编写了一个简单的概念验证脚本,可以使用正则表达式和网络图解析的组合来执行此搜索,但我不确定如何以可扩展的方式实现此搜索。
是的,我意识到使用简单的关键字搜索来检索我的示例是微不足道的。我试图测试的想法是如何利用语法结构,这样我就可以淘汰具有相似关键字但句子结构不同的条目。例如,对于上面的查询,我不想检索与该句子关联的条目"Checks a remote machine to find a user that uploads files."
它具有相似的关键字,但显然描述了完全不同的行为。
关系数据库不能以自然的方式存储知识,你真正需要的是知识库 or ontology(尽管它可以构建在关系数据库之上)。它以三元组形式保存数据<subject, predicate, object>
,所以你的短语将被存储为<upload_file(), upload, file>
。有很多工具和方法可以在此类知识库中进行搜索(例如,Prolog 就是一种专门用于执行此操作的语言)。所以,你所要做的就是将句子从自然语言翻译成KB 三元组/本体图,将用户查询翻译为不完整的三联体(你的问题看起来像<?, upload, file>
) or 连接查询然后搜索您的知识库。 OpenNLP 将帮助您进行翻译,其余的取决于您决定使用的具体技术和技术。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)