私は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]
だから、 "ジョン・ドリンク" 結果は文章である場合:
NP[SEM=<?p | ?q>] -> PropN[SEM=?p] CONJ PropN[SEM=?q]
:
exists e.(drinks(e) & drinker(e,John)).
しかし、私は、次のようなルールを追加した場合「John or Mary」のように、私はこれを得ることになります:
(\P.P(John) | \P.P(Mary))(\x.exists e.(drinks(e) & drinker(e,x)))
と同様に、NPラムダは動詞の引数に渡されません。私は見てみましたが、nltkセマンティック解析のコーディネーションに関する情報はほとんどなく、ラムダでもそれを使用することはあまりありません。私はそれが可能であることを知っている、クラスメートは明らかに彼の仕事に持っていたので、私はそのトリックが何であるか分からない。
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とVPの両方のために働く必要があります。
ありがとうございます!これは私にとって非常に便利でした。 – erip