public void DisambiguateTextTest()
        {
            //myCache = Loader.CreateCache();
            Assert.IsNotNull(myCache);
            Assert.AreEqual(ProjId.UiName, myCache.ProjectId.UiName);
            Assert.AreEqual(26, myCache.LangProject.AllPartsOfSpeech.Count);
            Assert.AreEqual(323, myCache.LangProject.LexDbOA.Entries.Count());
            Assert.AreEqual(4, myCache.LangProject.InterlinearTexts.Count);

            var    text         = myCache.LangProject.InterlinearTexts.Where(t => t.Title.BestAnalysisAlternative.Text == "Part 4").First();
            var    itext        = text.Owner as IText;
            String AndFile      = Path.Combine(TestDataDir, "Text.and");
            var    textDisam    = new TextDisambiguation(itext, TextPart3, AndFile);
            var    defaultAgent = myCache.LanguageProject.DefaultUserAgent;

            // Before disambiguation
            Assert.AreEqual(18, text.ParagraphsOS.Count);
            var para = text.ParagraphsOS.ElementAtOrDefault(1) as IStTxtPara;

            Assert.NotNull(para);
            var segment = para.SegmentsOS.FirstOrDefault();

            Assert.NotNull(segment);
            var analysis = segment.AnalysesRS.ElementAt(0);             // we

            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(1);             // got
            Assert.IsNull(analysis.Analysis);
            analysis = segment.AnalysesRS.ElementAt(2);             // married
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(3);             // punctuation
            Assert.AreEqual(PunctuationFormTags.kClassId, analysis.ClassID);

            para = text.ParagraphsOS.ElementAtOrDefault(2) as IStTxtPara;
            Assert.NotNull(para);
            segment = para.SegmentsOS.FirstOrDefault();
            Assert.NotNull(segment);
            analysis = segment.AnalysesRS.ElementAt(0);             // are (ambiguous)
            Assert.AreEqual(WfiWordformTags.kClassId, analysis.ClassID);
            Assert.IsNull(analysis.Analysis);
            analysis = segment.AnalysesRS.ElementAt(1);             // they
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(2);             // married
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(3);             // punctuation
            Assert.AreEqual(PunctuationFormTags.kClassId, analysis.ClassID);

            para = text.ParagraphsOS.ElementAtOrDefault(4) as IStTxtPara;
            Assert.NotNull(para);
            segment = para.SegmentsOS.FirstOrDefault();
            Assert.NotNull(segment);
            analysis = segment.AnalysesRS.ElementAt(0);             // we
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(1);             // want
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(2);             // to (ambiguous)
            Assert.AreEqual(WfiWordformTags.kClassId, analysis.ClassID);
            Assert.IsNull(analysis.Analysis);
            analysis = segment.AnalysesRS.ElementAt(3);             // be (ambiguous)
            Assert.AreEqual(WfiWordformTags.kClassId, analysis.ClassID);
            Assert.IsNull(analysis.Analysis);
            analysis = segment.AnalysesRS.ElementAt(4);             // married
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(5);             // and
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(6);             // healthy
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(7);             // and
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(8);             // happy
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(9);             // punctuation
            Assert.AreEqual(PunctuationFormTags.kClassId, analysis.ClassID);

            para = text.ParagraphsOS.ElementAtOrDefault(16) as IStTxtPara;
            Assert.NotNull(para);
            segment = para.SegmentsOS.FirstOrDefault();
            Assert.NotNull(segment);
            analysis = segment.AnalysesRS.ElementAt(0);             // we
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(1);             // got (ambiguous)
            Assert.AreEqual(WfiWordformTags.kClassId, analysis.ClassID);
            Assert.IsNull(analysis.Analysis);
            analysis = segment.AnalysesRS.ElementAt(2);             // to (ambiguous)
            Assert.AreEqual(WfiWordformTags.kClassId, analysis.ClassID);
            Assert.IsNull(analysis.Analysis);
            analysis = segment.AnalysesRS.ElementAt(3);             // go
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(4);             // to (ambiguous)
            Assert.AreEqual(WfiWordformTags.kClassId, analysis.ClassID);
            Assert.IsNull(analysis.Analysis);
            analysis = segment.AnalysesRS.ElementAt(5);             // the
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(6);             // party
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(7);             // punctuation
            Assert.AreEqual(PunctuationFormTags.kClassId, analysis.ClassID);

            textDisam.Disambiguate(myCache);

            //After disambiguation
            para = text.ParagraphsOS.ElementAtOrDefault(1) as IStTxtPara;
            Assert.NotNull(para);
            segment = para.SegmentsOS.FirstOrDefault();
            Assert.NotNull(segment);
            analysis = segment.AnalysesRS.ElementAt(0);             // we
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(1);             // got
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(2);             // married
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(3);             // punctuation
            Assert.AreEqual(PunctuationFormTags.kClassId, analysis.ClassID);

            para = text.ParagraphsOS.ElementAtOrDefault(2) as IStTxtPara;
            Assert.NotNull(para);
            segment = para.SegmentsOS.FirstOrDefault();
            Assert.NotNull(segment);
            analysis = segment.AnalysesRS.ElementAt(0);             // are
            Assert.AreEqual(WfiAnalysisTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(1);             // they
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(2);             // married
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(3);             // punctuation
            Assert.AreEqual(PunctuationFormTags.kClassId, analysis.ClassID);

            para = text.ParagraphsOS.ElementAtOrDefault(4) as IStTxtPara;
            Assert.NotNull(para);
            segment = para.SegmentsOS.FirstOrDefault();
            Assert.NotNull(segment);
            analysis = segment.AnalysesRS.ElementAt(0);             // we
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(1);             // want
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(2);             // to
            Assert.AreEqual(WfiAnalysisTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(3);             // be
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(4);             // married
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(5);             // and
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(6);             // healthy
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(7);             // and
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(8);             // happy
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(9);             // punctuation
            Assert.AreEqual(PunctuationFormTags.kClassId, analysis.ClassID);

            para = text.ParagraphsOS.ElementAtOrDefault(16) as IStTxtPara;
            Assert.NotNull(para);
            segment = para.SegmentsOS.FirstOrDefault();
            Assert.NotNull(segment);
            analysis = segment.AnalysesRS.ElementAt(0);             // we
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(1);             // got
            Assert.AreEqual(WfiAnalysisTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(2);             // to
            Assert.AreEqual(WfiAnalysisTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(3);             // go
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(4);             // to
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(5);             // the
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(6);             // party
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(7);             // punctuation
            Assert.AreEqual(PunctuationFormTags.kClassId, analysis.ClassID);
        }
        public void DisambiguateText2Test()
        {
            //myCache = Loader.CreateCache();
            Assert.IsNotNull(myCache);
            Assert.AreEqual(ProjId.UiName, myCache.ProjectId.UiName);
            Assert.AreEqual(30, myCache.LangProject.AllPartsOfSpeech.Count);
            Assert.AreEqual(10912, myCache.LangProject.LexDbOA.Entries.Count());
            Assert.AreEqual(119, myCache.LangProject.InterlinearTexts.Count);

            var    text         = myCache.LangProject.InterlinearTexts.Where(t => t.Title.BestAnalysisAlternative.Text == "PCPATR 3 Ron's testing").First();
            var    itext        = text.Owner as IText;
            String AndFile      = Path.Combine(TestDataDir, "Text2.and");
            var    textDisam    = new TextDisambiguation(itext, Text2Testing, AndFile);
            var    defaultAgent = myCache.LanguageProject.DefaultUserAgent;

            // Before disambiguation
            Assert.AreEqual(2, text.ParagraphsOS.Count);
            var para = text.ParagraphsOS.ElementAtOrDefault(0) as IStTxtPara;

            Assert.NotNull(para);
            Assert.AreEqual(3, para.SegmentsOS.Count);

            var segment = para.SegmentsOS.FirstOrDefault();

            Assert.NotNull(segment);
            Assert.AreEqual(7, segment.AnalysesRS.Count);
            var analysis = segment.AnalysesRS.ElementAt(0);             // "

            Assert.AreEqual(PunctuationFormTags.kClassId, analysis.ClassID);
            analysis = segment.AnalysesRS.ElementAt(1);             // '
            Assert.AreEqual(PunctuationFormTags.kClassId, analysis.ClassID);
            analysis = segment.AnalysesRS.ElementAt(2);             // سلام
            Assert.AreEqual(WfiWordformTags.kClassId, analysis.ClassID);
            Assert.AreEqual("سلام", analysis.ShortName);
            analysis = segment.AnalysesRS.ElementAt(3);             // ،
            Assert.AreEqual(PunctuationFormTags.kClassId, analysis.ClassID);
            analysis = segment.AnalysesRS.ElementAt(4);             // گفتم
            Assert.AreEqual(WfiWordformTags.kClassId, analysis.ClassID);
            Assert.AreEqual("گفتم", analysis.ShortName);
            analysis = segment.AnalysesRS.ElementAt(5);             // '"
            Assert.AreEqual(PunctuationFormTags.kClassId, analysis.ClassID);
            analysis = segment.AnalysesRS.ElementAt(6);             // ..
            Assert.AreEqual(PunctuationFormTags.kClassId, analysis.ClassID);

            segment = para.SegmentsOS.ElementAtOrDefault(1);
            Assert.AreEqual(4, segment.AnalysesRS.Count);
            analysis = segment.AnalysesRS.ElementAt(0);             // :.
            Assert.AreEqual(PunctuationFormTags.kClassId, analysis.ClassID);
            analysis = segment.AnalysesRS.ElementAt(1);             // چطور
            Assert.AreEqual(WfiWordformTags.kClassId, analysis.ClassID);
            Assert.AreEqual("چطور", analysis.ShortName);
            analysis = segment.AnalysesRS.ElementAt(2);             // هستید
            Assert.AreEqual(WfiWordformTags.kClassId, analysis.ClassID);
            Assert.AreEqual("هستید", analysis.ShortName);
            analysis = segment.AnalysesRS.ElementAt(3);             // ؟
            Assert.AreEqual(PunctuationFormTags.kClassId, analysis.ClassID);
            // there is one more segment but no need to test for it

            para = text.ParagraphsOS.ElementAtOrDefault(1) as IStTxtPara;
            Assert.NotNull(para);
            segment = para.SegmentsOS.FirstOrDefault();
            Assert.NotNull(segment);
            Assert.AreEqual(3, segment.AnalysesRS.Count);
            analysis = segment.AnalysesRS.ElementAt(0);             // ،
            Assert.AreEqual(PunctuationFormTags.kClassId, analysis.ClassID);
            analysis = segment.AnalysesRS.ElementAt(1);             // باش
            Assert.AreEqual(WfiWordformTags.kClassId, analysis.ClassID);
            Assert.AreEqual("باش", analysis.ShortName);
            analysis = segment.AnalysesRS.ElementAt(2);             // !
            Assert.AreEqual(PunctuationFormTags.kClassId, analysis.ClassID);

            textDisam.Disambiguate(myCache);

            //After disambiguation
            para = text.ParagraphsOS.ElementAtOrDefault(0) as IStTxtPara;
            Assert.NotNull(para);
            Assert.AreEqual(3, para.SegmentsOS.Count);
            segment = para.SegmentsOS.FirstOrDefault();
            Assert.NotNull(segment);

            Assert.AreEqual(7, segment.AnalysesRS.Count);
            analysis = segment.AnalysesRS.ElementAt(0);             // "
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual("hello", analysis.ShortName);
            Assert.NotNull(analysis.Analysis);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(1);             // '
            Assert.AreEqual(WfiAnalysisTags.kClassId, analysis.ClassID);
            Assert.NotNull(analysis.Analysis);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(2);             // سلام
            Assert.AreEqual(WfiWordformTags.kClassId, analysis.ClassID);
            Assert.AreEqual("سلام", analysis.ShortName);
            IWfiWordform wfiWordform = analysis as IWfiWordform;

            Assert.IsNull(analysis.Analysis);
            Assert.AreEqual(18, wfiWordform.AnalysesOC.Count);
            analysis = segment.AnalysesRS.ElementAt(3);             // ،
            Assert.AreEqual(PunctuationFormTags.kClassId, analysis.ClassID);
            analysis = segment.AnalysesRS.ElementAt(4);             // گفتم
            Assert.AreEqual(WfiWordformTags.kClassId, analysis.ClassID);
            Assert.AreEqual("گفتم", analysis.ShortName);
            analysis = segment.AnalysesRS.ElementAt(5);             // '"
            Assert.AreEqual(PunctuationFormTags.kClassId, analysis.ClassID);
            analysis = segment.AnalysesRS.ElementAt(6);             // ..
            Assert.AreEqual(PunctuationFormTags.kClassId, analysis.ClassID);

            segment = para.SegmentsOS.ElementAtOrDefault(1);
            Assert.AreEqual(4, segment.AnalysesRS.Count);
            analysis = segment.AnalysesRS.ElementAt(0);             // :.
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.NotNull(analysis.Analysis);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(1);             // چطور
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual("you are", analysis.ShortName);
            Assert.NotNull(analysis.Analysis);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(2);             // هستید
            Assert.AreEqual(WfiWordformTags.kClassId, analysis.ClassID);
            Assert.AreEqual("هستید", analysis.ShortName);
            analysis = segment.AnalysesRS.ElementAt(3);             // ؟
            Assert.AreEqual(PunctuationFormTags.kClassId, analysis.ClassID);

            para = text.ParagraphsOS.ElementAtOrDefault(1) as IStTxtPara;
            Assert.NotNull(para);
            segment = para.SegmentsOS.FirstOrDefault();
            Assert.NotNull(segment);
            Assert.AreEqual(3, segment.AnalysesRS.Count);
            analysis = segment.AnalysesRS.ElementAt(0);             // ،
            Assert.AreEqual(WfiGlossTags.kClassId, analysis.ClassID);
            Assert.AreEqual("be!", analysis.ShortName);
            Assert.NotNull(analysis.Analysis);
            Assert.AreEqual(Opinions.approves, analysis.Analysis.GetAgentOpinion(defaultAgent));
            analysis = segment.AnalysesRS.ElementAt(1);             // باش
            Assert.AreEqual(WfiWordformTags.kClassId, analysis.ClassID);
            Assert.AreEqual("باش", analysis.ShortName);
            analysis = segment.AnalysesRS.ElementAt(2);             // !
            Assert.AreEqual(PunctuationFormTags.kClassId, analysis.ClassID);
        }