我正在尝试开发一个自然语言接口到数据库,我只是想知道是否有一个库或API(Java)可以用来将问题(疑问句)转换为命令(命令式)句)。
例如:“1970年以前哪些员工出生?” “让员工在1970年之前出生。”
答案 0 :(得分:1)
这是一个相当复杂且非平凡的问题。但是,如果您的域名有限(员工数据库查询等),并且您只希望将一组有限的话语作为输入,那么您可以构建一个简单的基于规则的系统。
最简单的解决方案是开发一组基于正则表达式的转换规则。 例如。假设出现在(was | are)之后的单词是动词。您可以将所有常用动词及其映射的字典保存到数据库字段中。在这里"出生"将被映射到一个可以被称为DATE_OF_BIRTH的字段。
更复杂的基于规则的解决方案是为您选择的语言查找或构建解析器,并根据解析器输出和规则库执行转换。例如。解析器将输出句子谓词,主语等内容。您将拥有一组规则,可以重新排列句子的这些部分以产生命令式结构。
如果您讨厌手动开发规则库,您可以随时尝试机器学习方法并培训统计系统。在这里,您需要开发一个涵盖您可能期望的大多数问题类型的问题数据库,并在其上训练统计模型。
如果我建议使用单个库/工具来尝试上述任何一种方法,我会说OpenNLP。