private void UpdateCorrectionFromArc(TranslationResultBuilder builder, WordGraphArc arc, bool isPrefix, int alignmentColsToAddCount) { for (int i = 0; i < arc.Words.Count; i++) { builder.AppendWord(arc.Words[i], arc.WordConfidences[i], !isPrefix && arc.IsUnknown); } WordAlignmentMatrix alignment = arc.Alignment; if (alignmentColsToAddCount > 0) { var newAlignment = new WordAlignmentMatrix(alignment.RowCount, alignment.ColumnCount + alignmentColsToAddCount); for (int j = 0; j < alignment.ColumnCount; j++) { for (int i = 0; i < alignment.RowCount; i++) { newAlignment[i, alignmentColsToAddCount + j] = alignment[i, j]; } } alignment = newAlignment; } builder.MarkPhrase(arc.SourceSegmentRange, alignment); }
private static TranslationResultBuilder CreateResultBuilder(string target, params int[] cuts) { var builder = new TranslationResultBuilder(); if (!string.IsNullOrEmpty(target)) { int i = 0; int k = 0; string[] words = target.Split(); for (int j = 0; j < words.Length; j++) { builder.AppendWord(words[j], 1); int cut = j + 1; if (k < cuts.Length && cuts[k] == cut) { int len = cut - i; builder.MarkPhrase(Range <int> .Create(i, cut), new WordAlignmentMatrix(len, len)); k++; i = cut; } } } return(builder); }