我想为数据仓库构建一个半自然语言接口。一个简单的例子数据模型如下所示:
Company- attribute 'name'- reference to 'Departments'Department- attribute 'type'- reference to 'Employees'Employee- attribute 'age'- attribute 'salary'
我希望能够进行如下查询:
ACME employees
, Bugs Bunny salary
, ACME department types
等。
对于不在语法内的输入,我会调用数据库并解决,例如将 ACME
解析为 Company
。
… 并将查询转换为我的数据库语言可以理解的路径:
[Company].departments.employees
, [Employee].salary
, [Company].departments.type
。
我记得以前用SWI-Prolog来解析英语句子并判断它们是否正确。在这种情况下,Prolog仍然是可行的选择吗?
谢谢
回答:
更好的是,我现在使用嵌入Prolog规则的DCG。
因此,对于具有如下类和属性的模型:
c(company, class(company)) --> [company].a(company, attribute(name)) --> [name].
我可以查询一个类中的类的属性:
q(q(A,C1,C2)) --> a(T1,A), [of], c(T1,C1) ,[of], c(T2,C2), {is_child(T1, T2)}.
并得到一个树形结构作为回答。