我尝试使用python的NLTK库并遵循Neo-davidson事件表示法构建一个语义解析器。我已经建立了我的语法来包含正确解析的语义特征,但是我在协调成分方面很困难。例如,我的语法有:PropN[SEM=] -> 'Mary'
PropN[SEM=] -> 'John'
IV[SEM=] -> 'drinks'
NP[SEM=?np] -> PropN[SEM=?np]
VP[SEM=?v] -> IV[SEM=?v]
S[SEM=<?subj (?vp)>] -> NP[SEM=?subj] VP[SEM=?vp]
所以如果句子是“约翰喝酒”,结果是:
^{pr2}$
但是如果我添加一个规则,比如:NP[SEM=<?p | ?q>] -> PropN[SEM=?p] CONJ PropN[SEM=?q]
就像在《约翰或玛丽》中一样,我得到了这样的结论:(\P.P(John) | \P.P(Mary))(\x.exists e.(drinks(e) & drinker(e,x)))
和中一样,NP lambdas没有被传递到动词的参数中。我试着四处看看,但是关于nltk语义解析中的协调的信息非常少,更没有关于使用lambdas的信息。我知道这是有可能的,因为一个同学显然让他去工作了,但我不知道窍门是什么。在