Accessing a parse tree

Aaron Brady castironpi at gmail.com
Fri Apr 17 07:41:15 CEST 2009


On Apr 16, 10:16 pm, John Machin <sjmac... at lexicon.net> wrote:
> On Apr 17, 8:55 am, Clarendon <jine... at hotmail.com> wrote:
>
>
>
> > Hello!
>
> > I need a program that accesses a parse tree based on the designated
> > words (terminals) within the tree. For instance, in:
>
> > I came a long way in changing my habit.
>
> > (ROOT
> >   (S
> >     (NP (PRP I))
> >     (VP (VBD came)
> >       (NP (DT a) (JJ long) (NN way))
> >       (PP (IN in)
> >         (S
> >           (VP (VBG changing)
> >             (NP (PRP$ my) (NN habit))))))
>
> > the designated words are "a long way". I need the program to recognize
> > how many parentheses there are after them. Currently two: NN way)).
> > Then I need it to see how many parentheses there are before it.
> > Currently there are two as well: (NP (DT.
>
> Why is the answer not (S (VP (NP (DT ? You may need to explain what
> you mean by "before" and "after" ... also the parentheses are an
> artifact of this particular method of representing a parse tree. What
> in general terms are you trying to do?

It sounds like the OP wants a 'flatten' function: a tuple of tuple A,
where tuple A is ( category, word, ref to original, parent index,
depth ).  Unproduced:

>>> x= flatten( sentence_representation )
>>> x[ :9 ]
( 'ROOT', None, <object>, None, 0 )
( 'S', None, <object>, 0, 1 )
( 'NP', None, <object>, 1, 2 )
( 'PRP', 'I', <object>, 2, 3 )
( 'VP', None, <object>, 1, 2 )
( 'VBD', 'came', <object>, 4, 2 )
( 'NP', None, <object>, 4, 3 )
( 'DT', 'a', <object>, 6, 4 )
( 'JJ', 'long', <object>, 6, 4 )
( 'NN', 'way', <object>, 6, 4 )

I'm not certain it's accurate.  The depth field is redundant but may
be useful to have.




More information about the Python-list mailing list