我只是想了解Fei Li (2014)提出的关系数据库的自然语言界面(可用github project)。具体来说,我不理解他们为数据库的自然语言查询的ParseTree定义的语法。这个问题有点像this one,但语法更复杂。
背景:自然语言句子可以解析为ParseTree(公共库是Stanford Parser),它描述了句子中单词的语法关系。
有效ParseTree的语法是:
Q - > (SClause)(ComplexCondition)*
SClause - > SELECT + GNP
ComplexCondition - > ON +(leftSubtree * rightSubtree)
leftSubtree - > GNP
rightSubtree - > GNP | VN | MIN | MAX
GNP - > (FN + GNP)| NP
NP - > NN +(NN)*(条件)*
条件 - > VN | (ON + VN)
其中
Q
代表整个查询树+
亲子关系*
兄弟关系SN
是SELECT节点ON
是一个OPERATOR节点(例如=
,<=
)FN
是一个FUNCTION节点(例如AVG
)NN
是NAME节点(例如db表中的列)VN
是VALUE节点(即db表中列中的值)ComplexCondition
必须有一个ON
,leftSubtree
和rightSubtree
NP
是一个NN
,其子女有多个NN
和条件。我的问题:
为什么condition
定义为VN
或(ON
+ VN
)?这意味着像5
这样的东西本身就是一个条件。只会对后者有所了解,即(ON
+ VN
)是一个条件(例如>5
)
rightSubtree
如何成为一个函数(例如MIN
)。顺便说一下,我将管道|
理解为逻辑或。
我知道GNP
是递归定义的,但在终端节点上GNP
节点必须只是NP
节点吗?但是NP
被定义为有孩子的东西......怎么样?!?!?!
上面引用的github项目的作者说:“以一个值节点(VN
)为例,根据语法,当且仅当它有孩子时它是无效的。我不知道我知道如何从语法中推断出这一点
感谢您的帮助