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 }