targetSegmentList.size());
int x = 0;
int y = 0;
while (x < sourceSegmentList.size() || y < targetSegmentList.size()) {
float bestScore = Float.POSITIVE_INFINITY;
Category bestCategory = null;
for (Category category : categoryMap.keySet()) {
int newX = x + category.getSourceSegmentCount();
int newY = y + category.getTargetSegmentCount();
if (newX <= sourceSegmentList.size() &&
newY <= targetSegmentList.size()) {
if (forwardMatrix.get(newX, newY) != null &&
backwardMatrix.get(newX, newY) != null) {
float forwardScore = forwardMatrix.get(newX, newY);
float backwardScore = backwardMatrix.get(newX, newY);
float score = forwardScore + backwardScore - totalScore;
if (score < bestScore) {
bestScore = score;
bestCategory = category;
}
}
}
}
List<String> sourceList = createSubList(sourceSegmentList,
x, x + bestCategory.getSourceSegmentCount());
List<String> targetList = createSubList(targetSegmentList,
y, y + bestCategory.getTargetSegmentCount());
Alignment alignment =
new Alignment(sourceList, targetList, bestScore);
alignmentList.add(alignment);
x += bestCategory.getSourceSegmentCount();
y += bestCategory.getTargetSegmentCount();
log.trace("(" + x + ", " + y + ") - s: " + bestScore + " (" + Math.exp(-bestScore) + ")");
}
/*
int previousX = 0;