| package org.maltparser.parser;
|
|
|
| import org.maltparser.core.exception.MaltChainedException;
|
| import org.maltparser.core.syntaxgraph.LabelSet;
|
| import org.maltparser.parser.guide.OracleGuide;
|
| import org.maltparser.parser.history.GuideUserHistory;
|
| import org.maltparser.parser.history.action.GuideUserAction;
|
| import org.maltparser.parser.history.container.ActionContainer;
|
| |
| |
| |
|
|
| public abstract class Oracle implements OracleGuide {
|
| private final DependencyParserConfig manager;
|
| private final GuideUserHistory history;
|
| private String name;
|
| protected final ActionContainer[] actionContainers;
|
| protected ActionContainer transActionContainer;
|
| protected final ActionContainer[] arcLabelActionContainers;
|
|
|
| public Oracle(DependencyParserConfig manager, GuideUserHistory history) throws MaltChainedException {
|
| this.manager = manager;
|
| this.history = history;
|
| this.actionContainers = history.getActionContainerArray();
|
|
|
| if (actionContainers.length < 1) {
|
| throw new ParsingException("Problem when initialize the history (sequence of actions). There are no action containers. ");
|
| }
|
| int nLabels = 0;
|
| for (int i = 0; i < actionContainers.length; i++) {
|
| if (actionContainers[i].getTableContainerName().startsWith("A.")) {
|
| nLabels++;
|
| }
|
| }
|
| int j = 0;
|
| this.arcLabelActionContainers = new ActionContainer[nLabels];
|
| for (int i = 0; i < actionContainers.length; i++) {
|
| if (actionContainers[i].getTableContainerName().equals("T.TRANS")) {
|
| transActionContainer = actionContainers[i];
|
| } else if (actionContainers[i].getTableContainerName().startsWith("A.")) {
|
| arcLabelActionContainers[j++] = actionContainers[i];
|
| }
|
| }
|
| }
|
|
|
| public GuideUserHistory getHistory() {
|
| return history;
|
| }
|
|
|
| public DependencyParserConfig getConfiguration() {
|
| return manager;
|
| }
|
|
|
| public String getGuideName() {
|
| return name;
|
| }
|
|
|
| public void setGuideName(String guideName) {
|
| this.name = guideName;
|
| }
|
|
|
| protected GuideUserAction updateActionContainers(int transition, LabelSet arcLabels) throws MaltChainedException {
|
| transActionContainer.setAction(transition);
|
|
|
| if (arcLabels == null) {
|
| for (int i = 0; i < arcLabelActionContainers.length; i++) {
|
| arcLabelActionContainers[i].setAction(-1);
|
| }
|
| } else {
|
| for (int i = 0; i < arcLabelActionContainers.length; i++) {
|
| arcLabelActionContainers[i].setAction(arcLabels.get(arcLabelActionContainers[i].getTable()).shortValue());
|
| }
|
| }
|
| GuideUserAction oracleAction = history.getEmptyGuideUserAction();
|
| oracleAction.addAction(actionContainers);
|
| return oracleAction;
|
| }
|
| }
|
|
|