2017-02-12 61 views
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表达式时也更少。我知道这是可能的,因为一个同学显然有他的工作,但我不知道是什么诀窍。

回答

1

万一后来人们发现这一点,我是能够建立我的规则,正确的λ值传递的协调结构:

NP[SEM=<?conj(?p, ?q)>] -> N[SEM=?p] CONJ[SEM=?conj] N[SEM=?q] 
CONJ[SEM=<\Q \P \x.(Q(x) | P(x))>] -> 'or' 

这应该既NPS和副总裁与lambda表达式工作。

+0

谢谢!这对我来说非常有帮助。 – erip