예제 #1
0
        /// <summary>
        /// Merge duplicate analyses on all wordforms. (Also merges duplicate WfiGlosses.)
        /// </summary>
        /// <returns></returns>
        public static void MergeDuplicateAnalyses(LcmCache cache, IProgress progressBar)
        {
            var wfiWordforms = cache.ServiceLocator.GetInstance <IWfiWordformRepository>().AllInstances().ToList();

            progressBar.Minimum  = 0;
            progressBar.Maximum  = wfiWordforms.Count;
            progressBar.StepSize = 1;
            foreach (var wf in wfiWordforms)
            {
                progressBar.Step(1);
                var analyses = wf.AnalysesOC.ToList();
                for (int i = 0; i < analyses.Count; i++)
                {
                    var waKeep = analyses[i];
                    for (int j = analyses.Count - 1; j > i; j--)
                    {
                        var waDup = analyses[j];
                        if (DuplicateAnalyses(waKeep, waDup))
                        {
                            foreach (var wg in waDup.MeaningsOC)
                            {
                                waKeep.MeaningsOC.Add(wg);
                            }
                            CmObject.ReplaceReferences(waDup, waKeep);
                            waDup.Delete();
                            analyses.RemoveAt(j);
                        }
                    }
                    MergeDuplicateGlosses(waKeep);
                }
            }
        }
예제 #2
0
        private static void MergeDuplicateGlosses(IWfiAnalysis wa)
        {
            var glosses = wa.MeaningsOC.ToList();

            for (int i = 0; i < glosses.Count; i++)
            {
                var wgKeep = glosses[i];
                for (int j = glosses.Count - 1; j > i; j--)
                {
                    var wgDup = glosses[j];
                    if (DuplicateGlosses(wgKeep, wgDup))
                    {
                        CmObject.ReplaceReferences(wgDup, wgKeep);
                        wgDup.Delete();
                        glosses.RemoveAt(j);
                    }
                }
            }
        }