public IEnumerable <TranslationResult> Translate(int n, IReadOnlyList <string> segment) { CheckDisposed(); return(Thot.DoTranslateNBest(_decoderHandle, Thot.decoder_translateNBest, n, segment, false, segment, CreateResult)); }
private IEnumerable <IList <TranslationInfo> > GetNBestLists(ThotSmtParameters parameters, IReadOnlyList <IReadOnlyList <string> > sourceCorpus) { var results = new IList <TranslationInfo> [sourceCorpus.Count]; Parallel.ForEach(Partitioner.Create(0, sourceCorpus.Count), range => { IntPtr smtModelHandle = IntPtr.Zero, decoderHandle = IntPtr.Zero; try { smtModelHandle = Thot.LoadSmtModel(parameters); decoderHandle = Thot.LoadDecoder(smtModelHandle, parameters); for (int i = range.Item1; i < range.Item2; i++) { IReadOnlyList <string> sourceSegment = sourceCorpus[i]; results[i] = Thot.DoTranslateNBest(decoderHandle, Thot.decoder_translateNBest, K, sourceSegment, false, sourceSegment, CreateTranslationInfo).ToArray(); } } finally { if (decoderHandle != IntPtr.Zero) { Thot.decoder_close(decoderHandle); } if (smtModelHandle != IntPtr.Zero) { Thot.smtModel_close(smtModelHandle); } } }); return(results); }