7

我正在尝试开发数据库的自然语言接口,我只是想知道是否有一个库或 API(Java)可以用来将问题(疑问句)转换为命令(祈使句)。

例如:来自“哪些员工出生于 1970 年之前?” 以“让 1970 年之前出生的员工”。

4

1 回答 1

2

这是一个相当复杂和不平凡的问题。但是,如果您的领域是有限的(员工数据库查询等),并且您只期望一组有限的话语作为输入,您可以构建一个简单的基于规则的系统。

最简单的解决方案是开发一套基于正则表达式的转换规则。例如,假设出现在 (was|were) 之后的词是动词。您可以保留所有常用动词及其到数据库字段的映射的字典。例如,这里的“born”将映射到一个可以称为 DATE_OF_BIRTH 的字段。

更复杂的基于规则的解决方案是为您选择的语言查找或构建解析器,并根据解析器输出和您的规则库执行转换。例如,解析器将输出句子谓词、主语等。您将拥有一组规则,这些规则将重新排列句子的这些部分以产生命令式结构。

如果您讨厌手动开发规则库的想法,您可以随时尝试机器学习方法并训练统计系统。在这里,您需要开发一个问题数据库,涵盖您可能期望的大多数问题类型)并在其上训练一个统计模型。

如果我要建议一个用于试验上述任何方法的库/工具,我会说 OpenNLP。

于 2014-10-22T13:14:52.897 回答