001 package org.maltparser.parser;
002
003 import org.maltparser.core.exception.MaltChainedException;
004 import org.maltparser.core.syntaxgraph.LabelSet;
005 import org.maltparser.parser.guide.OracleGuide;
006 import org.maltparser.parser.history.GuideUserHistory;
007 import org.maltparser.parser.history.action.GuideUserAction;
008 import org.maltparser.parser.history.container.ActionContainer;
009 /**
010 * @author Johan Hall
011 *
012 */
013 public abstract class Oracle implements OracleGuide {
014 private DependencyParserConfig manager;
015 private GuideUserHistory history;
016 private String name;
017 protected ActionContainer[] actionContainers;
018 protected ActionContainer transActionContainer;
019 protected ActionContainer[] arcLabelActionContainers;
020
021 public Oracle(DependencyParserConfig manager, GuideUserHistory history) throws MaltChainedException {
022 this.manager = manager;
023 this.history = history;
024 initActionContainers();
025 }
026
027 public void setManager(DependencyParserConfig manager) {
028 this.manager = manager;
029 }
030
031 public GuideUserHistory getHistory() {
032 return history;
033 }
034
035 public void setHistory(GuideUserHistory history) {
036 this.history = history;
037 }
038
039 public DependencyParserConfig getConfiguration() {
040 return manager;
041 }
042
043 public String getGuideName() {
044 return name;
045 }
046
047 public void setGuideName(String guideName) {
048 this.name = guideName;
049 }
050
051 protected GuideUserAction updateActionContainers(int transition, LabelSet arcLabels) throws MaltChainedException {
052 transActionContainer.setAction(transition);
053
054 if (arcLabels == null) {
055 for (int i = 0; i < arcLabelActionContainers.length; i++) {
056 arcLabelActionContainers[i].setAction(-1);
057 }
058 } else {
059 for (int i = 0; i < arcLabelActionContainers.length; i++) {
060 arcLabelActionContainers[i].setAction(arcLabels.get(arcLabelActionContainers[i].getTable()).shortValue());
061 }
062 }
063 GuideUserAction oracleAction = history.getEmptyGuideUserAction();
064 oracleAction.addAction(actionContainers);
065 return oracleAction;
066 }
067
068 public void initActionContainers() throws MaltChainedException {
069 this.actionContainers = history.getActionContainerArray();
070 if (actionContainers.length < 1) {
071 throw new ParsingException("Problem when initialize the history (sequence of actions). There are no action containers. ");
072 }
073 int nLabels = 0;
074 for (int i = 0; i < actionContainers.length; i++) {
075 if (actionContainers[i].getTableContainerName().startsWith("A.")) {
076 nLabels++;
077 }
078 }
079 int j = 0;
080 for (int i = 0; i < actionContainers.length; i++) {
081 if (actionContainers[i].getTableContainerName().equals("T.TRANS")) {
082 transActionContainer = actionContainers[i];
083 } else if (actionContainers[i].getTableContainerName().startsWith("A.")) {
084 if (arcLabelActionContainers == null) {
085 arcLabelActionContainers = new ActionContainer[nLabels];
086 }
087 arcLabelActionContainers[j++] = actionContainers[i];
088 }
089 }
090 }
091 }