Python nltk语义协同分析
我正在尝试使用python的NLTK库和Neo-Davidsonian事件表示法构建语义解析器。我已经建立了语法,以包含正确解析的语义特征,但我正在努力解决协调成分的问题。例如,我的语法有:Python nltk语义协同分析,python,nltk,semantics,Python,Nltk,Semantics,我正在尝试使用python的NLTK库和Neo-Davidsonian事件表示法构建语义解析器。我已经建立了语法,以包含正确解析的语义特征,但我正在努力解决协调成分的问题。例如,我的语法有: PropN[SEM=<\P.P(Mary)>] -> 'Mary' PropN[SEM=<\P.P(John)>] -> 'John' IV[SEM=<\x.exists e.(drinks(e) & drinker(e, x))>] -> '
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]
但如果我添加一条规则,例如:
NP[SEM=<?p | ?q>] -> PropN[SEM=?p] CONJ PropN[SEM=?q]
与中一样,NP lambda没有被传递到动词的参数中。我试着四处看看,但是很少有关于nltk语义解析中的协调的信息,甚至很少有关于在lambdas中使用它的信息。我知道这是可能的,因为一个同学显然让他去工作,但我不确定这是什么把戏。为了防止人们稍后发现这一点,我能够设置规则,为协调结构传递正确的lambda值:
NP[SEM=<?conj(?p, ?q)>] -> N[SEM=?p] CONJ[SEM=?conj] N[SEM=?q]
CONJ[SEM=<\Q \P \x.(Q(x) | P(x))>] -> 'or'
NP[SEM=谢谢!这对我非常有帮助。
(\P.P(John) | \P.P(Mary))(\x.exists e.(drinks(e) & drinker(e,x)))
NP[SEM=<?conj(?p, ?q)>] -> N[SEM=?p] CONJ[SEM=?conj] N[SEM=?q]
CONJ[SEM=<\Q \P \x.(Q(x) | P(x))>] -> 'or'