/** * for testing only. doubles combined by addition. */ public List sampleUniformPathFromGraph() { List list = new ArrayList(); Object node = this.getStartNode(); Set endNodes = this.getEndNodes(); while (!endNodes.contains(node)) { List<Arc> arcs = new ArrayList<>(this.getArcsBySource(node)); TransducerGraph.Arc arc = arcs.get(r.nextInt(arcs.size())); list.add(arc.getInput()); node = arc.getTargetNode(); } return list; }
result.append(StringUtils.fileNameClean(arc.getSourceNode().toString())); result.append(" -> "); result.append(StringUtils.fileNameClean(arc.getTargetNode().toString())); result.append(" [ "); result.append("label=\"");
public boolean removeArc(Arc a) { Object source = a.getSourceNode(); Object target = a.getTargetNode(); Object input = a.getInput();
protected void addSplits(Block block) { Map symbolToTarget = new HashMap(); for (Object member : block.getMembers()) { for (Object o : getInverseArcs(member)) { TransducerGraph.Arc arc = (TransducerGraph.Arc) o; Object symbol = arc.getInput(); Object target = arc.getTargetNode(); Maps.putIntoValueArrayList(symbolToTarget, symbol, target); } } for (Object symbol : symbolToTarget.keySet()) { addSplit(new Split((List) symbolToTarget.get(symbol), symbol, block)); } }
@Override public Arc processArc(Arc a) { a = new Arc(a); a.setSourceNode(nodeProcessor.processNode(a.getSourceNode())); a.setTargetNode(nodeProcessor.processNode(a.getTargetNode())); return a; } }
@Override public Arc processArc(Arc a) { a = new Arc(a); a.setSourceNode(nodeProcessor.processNode(a.getSourceNode())); a.setTargetNode(nodeProcessor.processNode(a.getTargetNode())); return a; } }
public Arc processArc(Arc a) { a = new Arc(a); a.setSourceNode(nodeProcessor.processNode(a.getSourceNode())); a.setTargetNode(nodeProcessor.processNode(a.getTargetNode())); return a; } }
@Override public Arc processArc(Arc a) { a = new Arc(a); a.setSourceNode(nodeProcessor.processNode(a.getSourceNode())); a.setTargetNode(nodeProcessor.processNode(a.getTargetNode())); return a; } }
String target = arc.getTargetNode().toString(); Object input = arc.getInput(); String inputString = input.toString();
for (TransducerGraph.Arc arc : arcs) { double sourceLambda = lambda.getCount(arc.getSourceNode()); double targetLambda = lambda.getCount(arc.getTargetNode()); double oldOutput = ((Double) arc.getOutput()).doubleValue(); double newOutput = oldOutput + targetLambda - sourceLambda;
Object target = a.getTargetNode(); Object input = a.getInput(); if (source == null || target == null || input == null) {
b.append(" "); if (getEndNodes().contains(newArc.getTargetNode())) { b.append(newArc + " END\n"); } else { depthFirstSearchHelper(newArc.getTargetNode(), marked, level + 1, forward, b); } else { depthFirstSearchHelper(newArc.getSourceNode(), marked, level + 1, forward, b);
public static void addOnePathToGraph(List path, double count, int markovOrder, TransducerGraph graph) { Object source = graph.getStartNode(); for (int j = 0; j < path.size(); j++) { Object input = path.get(j); Arc a = graph.getArcBySourceAndInput(source, input); if (a != null) { // increment the arc weight a.output = new Double(((Double) a.output).doubleValue() + count); } else { Object target; if (input.equals(TransducerGraph.EPSILON_INPUT)) { target = "END"; // to ensure they all share the same end node } else if (markovOrder == 0) { // we all transition back to the same state target = source; } else if (markovOrder > 0) { // the state is described by the partial history target = path.subList((j < markovOrder ? 0 : j - markovOrder + 1), j + 1); } else { // the state is described by the full history target = path.subList(0, j + 1); } Double output = new Double(count); a = new Arc(source, target, input, output); graph.addArc(a); } source = a.getTargetNode(); } graph.setEndNode(source); }
/** * For testing only. Doubles combined by multiplication. */ private boolean canAddPath(List path) { Object node = this.getStartNode(); for (int j = 0; j < path.size() - 1; j++) { Object input = path.get(j); Arc arc = this.getArcBySourceAndInput(node, input); // next input in path if (arc == null) { return true; } node = arc.getTargetNode(); } Object input = path.get(path.size() - 1); // last element Arc arc = this.getArcBySourceAndInput(node, input); // next input in path if (arc == null) { return true; } else { return getEndNodes().contains(arc.getTargetNode()); } }
protected TransducerGraph buildMinimizedFA() { TransducerGraph minimizedFA = new TransducerGraph(); TransducerGraph unminimizedFA = getUnminimizedFA(); for (TransducerGraph.Arc arc : unminimizedFA.getArcs()) { Set<Arc> source = projectNode(arc.getSourceNode()); Set<Arc> target = projectNode(arc.getTargetNode()); try { if (minimizedFA.canAddArc(source, target, arc.getInput(), arc.getOutput())) { minimizedFA.addArc(source, target, arc.getInput(), arc.getOutput()); } } catch (Exception e) { //throw new IllegalArgumentException(); } } minimizedFA.setStartNode(projectNode(unminimizedFA.getStartNode())); for (Object o : unminimizedFA.getEndNodes()) { minimizedFA.setEndNode(projectNode(o)); } return minimizedFA; }
protected TransducerGraph buildMinimizedFA() { TransducerGraph minimizedFA = new TransducerGraph(); TransducerGraph unminimizedFA = getUnminimizedFA(); for (TransducerGraph.Arc arc : unminimizedFA.getArcs()) { Object source = projectNode(arc.getSourceNode()); Object target = projectNode(arc.getTargetNode()); try { if (minimizedFA.canAddArc(source, target, arc.getInput(), arc.getOutput())) { minimizedFA.addArc(source, target, arc.getInput(), arc.getOutput()); } } catch (Exception e) { //throw new IllegalArgumentException(); } } minimizedFA.setStartNode(projectNode(unminimizedFA.getStartNode())); for (Object o : unminimizedFA.getEndNodes()) { minimizedFA.setEndNode(projectNode(o)); } return minimizedFA; }
/** * For testing only. Doubles combined by addition. */ public double getOutputOfPathInGraph(List path) { double score = 0.0; Object node = getStartNode(); for (Object input : path) { Arc arc = getArcBySourceAndInput(node, input); // next input in path if (arc == null) { System.out.println(" NOT ACCEPTED :" + path); return Double.NEGATIVE_INFINITY; } score += ((Double) arc.getOutput()).doubleValue(); node = arc.getTargetNode(); } return score; }
protected void addSplits(Block block) { Map symbolToTarget = new HashMap(); for (Object member : block.getMembers()) { for (Object o : getInverseArcs(member)) { TransducerGraph.Arc arc = (TransducerGraph.Arc) o; Object symbol = arc.getInput(); Object target = arc.getTargetNode(); Maps.putIntoValueArrayList(symbolToTarget, symbol, target); } } for (Object symbol : symbolToTarget.keySet()) { addSplit(new Split((List) symbolToTarget.get(symbol), symbol, block)); } }
protected Arc(Arc<NODE,IN,OUT> a) { this(a.getSourceNode(), a.getTargetNode(), a.getInput(), a.getOutput()); }
@Override public Arc processArc(Arc a) { a = new Arc(a); a.setSourceNode(nodeProcessor.processNode(a.getSourceNode())); a.setTargetNode(nodeProcessor.processNode(a.getTargetNode())); return a; } }