2009-12-13 5 views
1

Selon le livre de NLTK, j'applique d'abord la grammaire, et l'analyse.Comment utiliser cette information en Python? Je ne sais pas comment utiliser ce type de données

grammar = r""" 
      NP: {<DT|PP\$>?<JJ>*<NN>} 
       {<NNP>+} 
       """ 
cp = nltk.RegexpParser(grammar) 
chunked_sent = cp.parse(sentence) 

Quand je impression chunked_sent, je reçois ceci:

(S 
    i/PRP 
    use/VBP 
    to/TO 
    work/VB 
    with/IN 
    you/PRP 
    at/IN 
    (NP match/NN) 
    ./.) 

Je ne veux pas simplement de la regarder. Je veux vraiment sortir les expressions nominales "NP".

Comment imprimer "match" ... qui est le syntagme nominal? Je veux récupérer tous les "NP" de ce bloc.

for k in chunked_sents: 
    print k 

(u'i', 'PRP') 
(u'use', 'VBP') 
(u'to', 'TO') 
(u'work', 'VB') 
(u'with', 'IN') 
(u'you', 'PRP') 
(u'at', 'IN') 
(NP match/NN) 
(u'.', '.') 


for k in chunked_sents: 
    print k[0] 

i 
use 
to 
work 
with 
you 
at 
(u'match', 'NN') 

Voir, pour une raison quelconque, je perds le "NP".
Aussi, comment puis-je déterminer si k [0] est une chaîne ou un tuple (comme dans le cas ci-dessus)

+0

Note: (correspondance NP/NN) est TIMEX

+0

Avez-vous pu obtenir une liste des phrases Noun sans informations d'analyse? Qu'avez-vous finalement fait? – MyopicVisage

Répondre

0

Eh bien, vous pourriez déjà avoir trouvé la réponse. Je l'affiche pour les personnes qui pourraient faire face à ce scénario dans le futur.

for subtree in chunked_sent.subtrees(): 
    if subtree.node == 'NP': print subtree