public GraphvizFormatter(ConnectionCosts costs) { this.costs = costs; this.bestPathMap = new HashMap<>(); sb.append(formatHeader()); sb.append(" init [style=invis]\n"); sb.append(" init -> 0.0 [label=\"" + BOS_LABEL + "\"]\n"); }
void onBacktrace(JapaneseTokenizer tok, WrappedPositionArray positions, int lastBackTracePos, Position endPosData, int fromIDX, char[] fragment, boolean isEnd) { setBestPathMap(positions, lastBackTracePos, endPosData, fromIDX); sb.append(formatNodes(tok, positions, lastBackTracePos, endPosData, fragment)); if (isEnd) { sb.append(" fini [style=invis]\n"); sb.append(" "); sb.append(getNodeID(endPosData.pos, fromIDX)); sb.append(" -> fini [label=\"" + EOS_LABEL + "\"]"); } }
public String finish() { sb.append(formatTrailer()); return sb.toString(); }
private void setBestPathMap(WrappedPositionArray positions, int startPos, Position endPosData, int fromIDX) { bestPathMap.clear(); int pos = endPosData.pos; int bestIDX = fromIDX; while (pos > startPos) { final Position posData = positions.get(pos); final int backPos = posData.backPos[bestIDX]; final int backIDX = posData.backIndex[bestIDX]; final String toNodeID = getNodeID(pos, bestIDX); final String fromNodeID = getNodeID(backPos, backIDX); assert !bestPathMap.containsKey(fromNodeID); assert !bestPathMap.containsValue(toNodeID); bestPathMap.put(fromNodeID, toNodeID); pos = backPos; bestIDX = backIDX; } }
dotOut.onBacktrace(this, positions, lastBackTracePos, endPosData, fromIDX, fragment, end);
for(int idx=0;idx<posData.count;idx++) { sb.append(" "); sb.append(getNodeID(pos, idx)); sb.append(" [label=\""); sb.append(pos); for(int idx=0;idx<posData.count;idx++) { final Position backPosData = positions.get(posData.backPos[idx]); final String toNodeID = getNodeID(pos, idx); final String fromNodeID = getNodeID(posData.backPos[idx], posData.backIndex[idx]);