Carlos,
I am not sure I totally understand your question, but I think you're asking how to get a tree structure from a Parse object? In which case the answer is that the Parse object is a tree structure (with a bunch of other stuff). You can use getChildCount(), getChildren(), getType(), etc. to navigate the tree. If you want to see an example look at this class from cTAKES:

https://svn.apache.org/repos/asf/ctakes/trunk/ctakes-constituency-parser/src/main/java/org/apache/ctakes/constituency/parser/util/TreeUtils.java

where in the recursivelyCreateStructure() method I translate from the Parse data structure into a tree in the ctakes typesystem.

Tim

On 02/05/2014 03:28 PM, Carlos Scheidecker wrote:
Hello all,

If you have something like this:

Statement : On Tuesday, John Smith bought a Honda Accord

(TOP (SBAR (IN On) (S (NP (NNP Tuesday,) (NNP John) (NNP Smith)) (VP (VBD
bought) (NP (DT a) (NNP Honda) (NNP Accord))))))

I have generated that from the Parse class Show() method as bellow:

  /**
    * Displays this parse using Penn Treebank-style formatting.
    */
   public void show() {
     StringBuffer sb = new StringBuffer(text.length()*4);
     show(sb);
     System.out.println(sb);
   }


My question is: How can I translate (TOP (SBAR (IN On) (S (NP (NNP
Tuesday,) (NNP John) (NNP Smith)) (VP (VBD bought) (NP (DT a) (NNP Honda)
(NNP Accord)))))) into a tree object?

I think I would parse that with ( -> new node, (-> new child, ) -> end node.

I was thinking on doing something like this, but instead of returning a
string buffer I would return a tree object:

/**
    * Appends the specified string buffer with a string representation of
this parse.
    *
    * @param sb A string buffer into which the parse string can be appended.
    */
   public void show(StringBuffer sb) {
     int start;
     start = span.getStart();
     if (!type.equals(AbstractBottomUpParser.TOK_NODE)) {
       sb.append("(");
       sb.append(type).append(" ");
       //System.out.print(label+" ");
       //System.out.print(head+" ");
       //System.out.print(df.format(prob)+" ");
     }
     for (Iterator<Parse> i = parts.iterator(); i.hasNext();) {
       Parse c = i.next();
       Span s = c.span;
       if (start < s.getStart()) {
         //System.out.println("pre "+start+" "+s.getStart());
         sb.append(encodeToken(text.substring(start, s.getStart())));
       }
       c.show(sb);
       start = s.getEnd();
     }
     if (start < span.getEnd()) {
       sb.append(encodeToken(text.substring(start, span.getEnd())));
     }
     if (!type.equals(AbstractBottomUpParser.TOK_NODE)) {
       sb.append(")");
     }
   }

But is there some example that someone might have already done and you
could refer to me?

Thanks,

Carlos.


Reply via email to