예제 #1
0
        public IEnumerable <TranslationResult> Translate(int n, IReadOnlyList <string> segment)
        {
            CheckDisposed();

            return(Thot.DoTranslateNBest(_decoderHandle, Thot.decoder_translateNBest, n, segment, false, segment,
                                         CreateResult));
        }
예제 #2
0
        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);
        }