1
我试图建立一个语义解析器使用python的NLTK库和遵循新戴维森事件表示。我已经构建了我的语法,以包含正确解析的语义特征,但我正在与协调的组成部分努力。例如,我的语法有:nltk与协调的语义解析
PropN[SEM=<\P.P(Mary)>] -> 'Mary'
PropN[SEM=<\P.P(John)>] -> 'John'
IV[SEM=<\x.exists e.(drinks(e) & drinker(e, x))>] -> 'drinks'
NP[SEM=?np] -> PropN[SEM=?np]
VP[SEM=?v] -> IV[SEM=?v]
S[SEM=<?subj(?vp)>] -> NP[SEM=?subj] VP[SEM=?vp]
因此,如果句子是 “约翰饮料” 的结果是:
exists e.(drinks(e) & drinker(e,John)).
但是,如果我添加一条规则,例如:
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中,lambda没有被传递给动词的参数。我试着四处看看,但在nltk语义分析中很少有关于协调的信息,甚至在使用lambda表达式时也更少。我知道这是可能的,因为一个同学显然有他的工作,但我不知道是什么诀窍。
谢谢!这对我来说非常有帮助。 – erip