Package org.maltparserx.core.syntaxgraph

Source Code of org.maltparserx.core.syntaxgraph.GraphAnalyzerChartItem

package org.maltparserx.core.syntaxgraph;

import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

import org.maltparserx.core.config.ConfigurationDir;
import org.maltparserx.core.exception.MaltChainedException;
import org.maltparserx.core.flow.FlowChartInstance;
import org.maltparserx.core.flow.item.ChartItem;
import org.maltparserx.core.flow.spec.ChartItemSpecification;
import org.maltparserx.core.io.dataformat.DataFormatException;
import org.maltparserx.core.options.OptionManager;
import org.maltparserx.core.syntaxgraph.node.DependencyNode;

public class GraphAnalyzerChartItem extends ChartItem {
  private String idName;
  private String sourceName;
  private String task;
  private ConfigurationDir configDir;
  private DependencyStructure cachedSource = null;
  private BufferedWriter writer;
  private boolean closeStream = true;
  private int graphCounter = 1;
 
  public void initialize(FlowChartInstance flowChartinstance, ChartItemSpecification chartItemSpecification) throws MaltChainedException {
    super.initialize(flowChartinstance, chartItemSpecification);
    for (String key : chartItemSpecification.getChartItemAttributes().keySet()) {
      if (key.equals("id")) {
        idName = chartItemSpecification.getChartItemAttributes().get(key);
      } else if (key.equals("source")) {
        sourceName = chartItemSpecification.getChartItemAttributes().get(key);
      }
    }
    if (idName == null) {
      idName = getChartElement("analyzer").getAttributes().get("id").getDefaultValue();
    } else if (sourceName == null) {
      sourceName = getChartElement("analyzer").getAttributes().get("source").getDefaultValue();
    }
    task = OptionManager.instance().getOptionValue(getOptionContainerIndex(), "analyzer", "task").toString();
    configDir = (ConfigurationDir)flowChartinstance.getFlowChartRegistry(org.maltparserx.core.config.ConfigurationDir.class, idName);
    open(task+".dat",OptionManager.instance().getOptionValue(getOptionContainerIndex(), "input", "charset").toString());
  }

  public int preprocess(int signal) throws MaltChainedException {
    return signal;
  }
 
  public int process(int signal) throws MaltChainedException {
    if (task.equals("projectivity")) {
      if (cachedSource == null) {
        cachedSource = (DependencyStructure)flowChartinstance.getFlowChartRegistry(org.maltparserx.core.syntaxgraph.DependencyStructure.class, sourceName);
      }
      try {
        writer.append("graph # ");
        writer.append(Integer.toString(graphCounter));
        writer.append('\n');
        for (int index : cachedSource.getTokenIndices()) {
          DependencyNode node = cachedSource.getDependencyNode(index);
         
          writer.append(Integer.toString(node.getIndex()));
          writer.append('\t');
          writer.append(Integer.toString(node.getHead().getIndex()));
          writer.append('\t');
          writer.append('#');
          writer.append('\t');
          if (node.isProjective()) {
            writer.append("@P");
          } else {
            writer.append("@N");
          }
          writer.append('\n');
        }
        writer.append('\n');
      } catch (IOException e) {
        throw new MaltChainedException("", e);
      }
      graphCounter++;
    }
    return signal;
  }
 
  public int postprocess(int signal) throws MaltChainedException {
    return signal; 
  }

 
  public void terminate() throws MaltChainedException {
    cachedSource = null;
    close();
  }
 
  private void open(String fileName, String charsetName) throws MaltChainedException {
    try {
      open(new OutputStreamWriter(new FileOutputStream(fileName),charsetName));
    } catch (FileNotFoundException e) {
      throw new DataFormatException("The output file '"+fileName+"' cannot be found.", e);
    } catch (UnsupportedEncodingException e) {
      throw new DataFormatException("The character encoding set '"+charsetName+"' isn't supported.", e);
   
  }
 
  private void open(OutputStreamWriter osw) throws MaltChainedException {
    setWriter(new BufferedWriter(osw));
  }

  private void setWriter(BufferedWriter writer) throws MaltChainedException  {
    close();
    this.writer = writer;
  }
 
  private void close() throws MaltChainedException {
    try {
      if (writer != null) {
        writer.flush();
        if (closeStream) {
          writer.close();
        }
        writer = null;
      }
    }   catch (IOException e) {
      throw new DataFormatException("Could not close the output file. ", e);
    }

  }
}
TOP

Related Classes of org.maltparserx.core.syntaxgraph.GraphAnalyzerChartItem

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.