2017-02-12 57 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