Пример #1
0
        public void TrainSegment(IReadOnlyList <string> sourceSegment,
                                 IReadOnlyList <string> targetSegment)
        {
            CheckDisposed();

            SmtEngine.TrainSegment(sourceSegment, targetSegment);
        }
Пример #2
0
        public HybridInteractiveTranslationResult TranslateInteractively(IReadOnlyList <string> segment)
        {
            WordGraph         smtWordGraph = SmtEngine.GetWordGraph(segment);
            TranslationResult ruleResult   = RuleEngine?.Translate(segment);

            return(new HybridInteractiveTranslationResult(smtWordGraph, ruleResult));
        }
Пример #3
0
 protected override void DisposeManagedResources()
 {
     foreach (HybridInteractiveTranslationSession session in _sessions.ToArray())
     {
         session.Dispose();
     }
     SmtEngine.Dispose();
     RuleEngine?.Dispose();
 }
Пример #4
0
        public HybridInteractiveTranslationSession TranslateInteractively(int n, IReadOnlyList <string> segment)
        {
            CheckDisposed();

            IInteractiveTranslationSession smtSession = SmtEngine.TranslateInteractively(n, segment);
            TranslationResult ruleResult = RuleEngine?.Translate(segment);
            var session = new HybridInteractiveTranslationSession(this, smtSession, ruleResult);

            _sessions.Add(session);
            return(session);
        }
Пример #5
0
        public WordAlignmentMatrix TrainSegment(IReadOnlyList <string> sourceSegment,
                                                IReadOnlyList <string> targetSegment)
        {
            CheckDisposed();

            TranslationResult ruleResult = RuleEngine?.Translate(sourceSegment);

            WordAlignmentMatrix matrix = GetHintMatrix(sourceSegment, targetSegment, ruleResult);

            SmtEngine.TrainSegment(sourceSegment, targetSegment, matrix);
            return(matrix);
        }
Пример #6
0
        internal WordAlignmentMatrix GetHintMatrix(IReadOnlyList <string> sourceSegment,
                                                   IReadOnlyList <string> targetSegment, TranslationResult ruleResult)
        {
            TranslationResult smtResult    = SmtEngine.GetBestPhraseAlignment(sourceSegment, targetSegment);
            TranslationResult hybridResult = ruleResult == null ? smtResult : smtResult.Merge(targetSegment.Count,
                                                                                              RuleEngineThreshold, ruleResult);

            var matrix   = new WordAlignmentMatrix(sourceSegment.Count, targetSegment.Count, AlignmentType.Unknown);
            var iAligned = new HashSet <int>();

            for (int j = 0; j < targetSegment.Count; j++)
            {
                bool jAligned = false;
                if (j < hybridResult.WordSources.Count &&
                    (hybridResult.WordSources[j] & TranslationSources.Transfer) != 0)
                {
                    foreach (int i in hybridResult.Alignment.GetColumnAlignedIndices(j))
                    {
                        matrix[i, j] = AlignmentType.Aligned;
                        iAligned.Add(i);
                        jAligned = true;
                    }
                }

                if (jAligned)
                {
                    for (int i = 0; i < sourceSegment.Count; i++)
                    {
                        if (matrix[i, j] == AlignmentType.Unknown)
                        {
                            matrix[i, j] = AlignmentType.NotAligned;
                        }
                    }
                }
            }

            foreach (int i in iAligned)
            {
                for (int j = 0; j < targetSegment.Count; j++)
                {
                    if (matrix[i, j] == AlignmentType.Unknown)
                    {
                        matrix[i, j] = AlignmentType.NotAligned;
                    }
                }
            }

            return(matrix);
        }
Пример #7
0
        public TranslationResult Translate(IReadOnlyList <string> segment)
        {
            CheckDisposed();

            TranslationResult smtResult = SmtEngine.Translate(segment);

            if (RuleEngine == null)
            {
                return(smtResult);
            }

            TranslationResult ruleResult = RuleEngine.Translate(segment);

            return(smtResult.Merge(0, RuleEngineThreshold, ruleResult));
        }
Пример #8
0
        public IEnumerable <TranslationResult> Translate(int n, IReadOnlyList <string> segment)
        {
            CheckDisposed();

            TranslationResult ruleResult = null;

            foreach (TranslationResult smtResult in SmtEngine.Translate(n, segment))
            {
                if (RuleEngine == null)
                {
                    yield return(smtResult);
                }
                else
                {
                    if (ruleResult == null)
                    {
                        ruleResult = RuleEngine.Translate(segment);
                    }
                    yield return(smtResult.Merge(0, RuleEngineThreshold, ruleResult));
                }
            }
        }