Package org.snu.ids.ha.sp

Source Code of org.snu.ids.ha.sp.ParseTreeNode

package org.snu.ids.ha.sp;


import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.snu.ids.ha.ma.Eojeol;
import org.snu.ids.ha.ma.Morpheme;
import org.snu.ids.ha.util.Util;


public class ParseTreeNode
{
  int              id  = 0;
  private Eojeol        eojeol;
  private ParseTreeNode    parentNode;
  private List<ParseTreeEdge>  childEdges;


  protected ParseTreeNode(Eojeol eojeol)
  {
    this.eojeol = eojeol;
  }


  public List<ParseTreeEdge> getChildEdges()
  {
    return childEdges;
  }


  public void addChildEdge(ParseTreeEdge arc)
  {
    if( childEdges == null ) childEdges = new ArrayList<ParseTreeEdge>();
    childEdges.add(arc);
  }


  /**
   * @return the id
   */
  public int getId()
  {
    return id;
  }


  public Eojeol getEojeol()
  {
    return eojeol;
  }


  /**
   * @return the parentNode
   */
  public ParseTreeNode getParentNode()
  {
    return parentNode;
  }


  /**
   * @param parentNode the parentNode to set
   */
  public void setParentNode(ParseTreeNode parentNode)
  {
    this.parentNode = parentNode;
  }


  /**
   * <pre>
   * child node로 연결되어 있는지 확인.
   * </pre>
   * @author  Dongjoo
   * @since  2009. 10. 26
   * @param node
   * @return
   */
  public boolean contains(ParseTreeNode node)
  {
    if( this.eojeol == node.eojeol ) return true;
    for( Iterator<ParseTreeEdge> iterChildEdge = childEdges.iterator(); iterChildEdge.hasNext(); ) {
      ParseTreeEdge edge = iterChildEdge.next();
      ParseTreeNode child = edge.getChildNode();

      if( child.contains(node) ) {
        return true;
      }
    }
    return false;
  }


  public void traverse(int depth, String relation, StringBuffer sb)
  {
    for( int i = 0; i < depth; i++ )
      sb.append("\t");
    if( relation != null ) sb.append("<=[" + relation + "]=| ");
    sb.append(id + "\t" + this.eojeol + "\n");
    for( int i = 0, size = childEdges == null ? 0 : childEdges.size(); i < size; i++ ) {
      ParseTreeEdge edge = childEdges.get(i);
      edge.getChildNode().traverse(depth + 1, edge.getRelation(), sb);
    }
  }


  /**
   * <pre>
   * traverse하면서 id를 설정해준다.
   * </pre>
   * @author  Dongjoo
   * @since  2009. 12. 04
   * @param id
   * @return
   */
  public int traverse(int id)
  {
    this.id = id;
    int ret = id;
    for( int i = 0, size = childEdges == null ? 0 : childEdges.size(); i < size; i++ ) {
      ParseTreeEdge edge = childEdges.get(i);
      ret = edge.getChildNode().traverse(ret + 1);
    }
    return ret;
  }


  /**
   * <pre>
   * nodeList에 node를 넣고, edgeList에는 모든 edge를 넣는다.
   * </pre>
   * @author  Dongjoo
   * @since  2009. 12. 04
   * @param nodeList
   * @param edgeList
   */
  public void traverse(List<ParseTreeNode> nodeList, List<ParseTreeEdge> edgeList)
  {
    nodeList.add(this);
    for( int i = 0, size = childEdges == null ? 0 : childEdges.size(); i < size; i++ ) {
      ParseTreeEdge edge = childEdges.get(i);
      edgeList.add(edge);
      edge.getChildNode().traverse(nodeList, edgeList);
    }
  }


  /**
   * <pre>
   * 어절 표층형을 반환한다.
   * </pre>
   * @author  Dongjoo
   * @since  2009. 12. 04
   * @return
   */
  public String getExp()
  {
    return eojeol == null ? "ROOT" : eojeol.getExp();
  }


  /**
   * <pre>
   * 형태소의 분석 결과를 xml에 출력할 수 있도록 반환한다.
   * </pre>
   * @author  Dongjoo
   * @since  2009. 12. 04
   * @return
   */
  public String getMorpXmlStr()
  {
    StringBuffer sb = new StringBuffer();
    for( int i = 0, size = (eojeol == null ? 0 : eojeol.size()); i < size; i++ ) {
      Morpheme morp = eojeol.get(i);
      if( i > 0 ) sb.append("+");
      sb.append(Util.rplcXMLSpclChar(morp.getString()) + "/" + morp.getTag());
    }
    return sb.toString();
  }
}
TOP

Related Classes of org.snu.ids.ha.sp.ParseTreeNode

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.