Vocabulary sourceVocab = new Vocabulary();
int[] sourceWordsSentences = Vocabulary.initializeVocabulary(sourceFileName, sourceVocab, true);
numSourceWords = sourceWordsSentences[0];
numSourceSentences = sourceWordsSentences[1];
Corpus sourceCorpusArray = SuffixArrayFactory.createCorpusArray(sourceFileName, sourceVocab, numSourceWords, numSourceSentences);
Suffixes sourceSuffixArray = SuffixArrayFactory.createSuffixArray(sourceCorpusArray, maxCacheSize);
int numTargetWords, numTargetSentences;
Vocabulary targetVocab = new Vocabulary();
int[] targetWordsSentences = Vocabulary.initializeVocabulary(targetFileName, targetVocab, true);
numTargetWords = targetWordsSentences[0];
numTargetSentences = targetWordsSentences[1];
Corpus targetCorpusArray = SuffixArrayFactory.createCorpusArray(targetFileName, targetVocab, numTargetWords, numTargetSentences);
Suffixes targetSuffixArray = SuffixArrayFactory.createSuffixArray(targetCorpusArray, maxCacheSize);
int trainingSize = sourceCorpusArray.getNumSentences();
boolean requireTightSpans = true;
Alignments alignments = new AlignmentGrids(new Scanner(new File(alignmentFileName)), sourceCorpusArray, targetCorpusArray, trainingSize, requireTightSpans);