2017-02-12 1 views
1

J'essaye de construire un analyseur sémantique en utilisant la bibliothèque NLTK de python et en suivant la représentation de l'événement néo-Davidsonien. J'ai construit ma grammaire pour inclure des caractéristiques sémantiques qui analysent correctement mais je suis aux prises avec des constituants coordonnés. Par exemple, ma grammaire a:nltk analyse sémantique avec coordination

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] 

Donc, si les phrases est "boissons John" le résultat est:

exists e.(drinks(e) & drinker(e,John)). 

Mais si j'ajoute une règle telle que:

NP[SEM=<?p | ?q>] -> PropN[SEM=?p] CONJ PropN[SEM=?q] 

comme dans "John ou Mary", je finis par obtenir ceci:

(\P.P(John) | \P.P(Mary))(\x.exists e.(drinks(e) & drinker(e,x))) 

Comme dans, les lambda NP ne sont pas passés dans l'argument pour le verbe. J'ai essayé de regarder autour mais il y a très peu d'informations sur la coordination dans l'analyse sémantique nltk, et encore moins sur l'utilisation de lambdas. Je sais que c'est possible, parce qu'un camarade de classe a apparemment eu le sien pour travailler mais je ne suis pas sûr de ce qu'est le truc.

Répondre

1

Juste au cas où les gens trouvent cela plus tard, j'ai pu mettre en place mes règles pour passer des valeurs lambda correctes pour les structures coordonnées:

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

Cela devrait fonctionner pour les IP et les vice-présidents avec lambdas.

+0

Merci! C'était super utile pour moi. – erip