public void SetAgentOpinion() { ICmAgent agent = m_fdoCache.LangProject.DefaultComputerAgent; IWfiWordform wf = new WfiWordform(m_fdoCache, WfiWordform.FindOrCreateWordform(m_fdoCache,"xxxyyyzzz12234", m_fdoCache.DefaultVernWs, true)); IWfiAnalysis wa = new WfiAnalysis(); wf.AnalysesOC.Add(wa); ICmObject target = wa; // can pick anything as target for evaluation! m_fdoCache.BeginUndoTask("doit", "undoit"); wa.SetAgentOpinion(agent, Opinions.approves); m_fdoCache.EndUndoTask(); Assert.AreEqual(Opinions.approves, wa.GetAgentOpinion(agent)); m_fdoCache.Undo(); Assert.AreEqual(Opinions.noopinion, wa.GetAgentOpinion(agent)); m_fdoCache.Redo(); Assert.AreEqual(Opinions.approves, wa.GetAgentOpinion(agent)); m_fdoCache.BeginUndoTask("changeit", "unchangeit"); wa.SetAgentOpinion(agent, Opinions.disapproves); m_fdoCache.EndUndoTask(); Assert.AreEqual(Opinions.disapproves, wa.GetAgentOpinion(agent)); m_fdoCache.Undo(); Assert.AreEqual(Opinions.approves, wa.GetAgentOpinion(agent)); m_fdoCache.Redo(); Assert.AreEqual(Opinions.disapproves, wa.GetAgentOpinion(agent)); m_fdoCache.BeginUndoTask("clearit", "unclearit"); wa.SetAgentOpinion(agent, Opinions.noopinion); m_fdoCache.EndUndoTask(); Assert.AreEqual(Opinions.noopinion, wa.GetAgentOpinion(agent)); m_fdoCache.Undo(); Assert.AreEqual(Opinions.disapproves, wa.GetAgentOpinion(agent)); m_fdoCache.Redo(); Assert.AreEqual(Opinions.noopinion, wa.GetAgentOpinion(agent)); }
private WfiAnalysis Make2BundleAnalysis(string form1, string form2, string gloss1, string gloss2) { WfiAnalysis result; ILexEntry entry1 = MakeEntry(form1, gloss1); ILexEntry entry2 = MakeEntry(form2, gloss2); result = new WfiAnalysis(); m_wfAxx.AnalysesOC.Add(result); IWfiMorphBundle bundle = result.MorphBundlesOS.Append(new WfiMorphBundle()); bundle.MorphRA = entry1.LexemeFormOA; bundle.SenseRA = entry1.SensesOS[0]; bundle = result.MorphBundlesOS.Append(new WfiMorphBundle()); bundle.MorphRA = entry2.LexemeFormOA; bundle.SenseRA = entry2.SensesOS[0]; WfiGloss gloss = new WfiGloss(); result.MeaningsOC.Add(gloss); gloss.Form.AnalysisDefaultWritingSystem = gloss1 + "." + gloss2; result.SetAgentOpinion(m_fdoCache.LangProject.DefaultUserAgent, Opinions.approves); m_cAnalyses++; return result; }
/// <summary> /// This goes through the collected list of WfiWordforms that do not have any analyses, and generates /// a guess for any whose forms exactly match a LexemeForm (or AlternateForm) of a stem/root entry. /// </summary> /// <param name="progress"></param> private void AddEntryGuesses(ProgressState progress) { if (m_rgEmptyWfis.Count == 0) return; MapEmptyWfToInfo(); progress.Breath(); if (m_mapEmptyWfInfo.Count == 0) return; foreach (EmptyWwfAnno ewa in m_rgEmptyWfis) { IWfiWordform ww = WfiWordform.CreateFromDBObject(m_cache, ewa.m_hvoWwf); EmptyWwfKey key = new EmptyWwfKey(ww.Hvo, ewa.m_ws); EmptyWwfInfo info; if (!m_mapEmptyWfInfo.TryGetValue(key, out info)) continue; IWfiAnalysis wa; if (ww.AnalysesOC.Count == 0) { ITsString tssName = null; int wsVern = 0; ILexEntryRef ler = SandboxBase.GetVariantRef(m_cache, info.m_hvoEntry, true); int hvoEntryToDisplay = info.m_hvoEntry; if (ler != null) { ICmObject coRef = ler.ComponentLexemesRS[0]; if (coRef is ILexSense) hvoEntryToDisplay = (coRef as ILexSense).EntryID; else hvoEntryToDisplay = coRef.Hvo; wsVern = StringUtils.GetWsAtOffset(m_tssPara, 0); tssName = InterlinDocChild.GetLexEntryTss(Cache, hvoEntryToDisplay, wsVern, ler); info.m_hvoSense = m_cache.MainCacheAccessor.get_VecItem(hvoEntryToDisplay, (int)LexEntry.LexEntryTags.kflidSenses, 0); info.m_hvoMsa = m_cache.MainCacheAccessor.get_ObjectProp(info.m_hvoSense, (int)LexSense.LexSenseTags.kflidMorphoSyntaxAnalysis); int clidMsa = m_cache.GetClassOfObject(info.m_hvoMsa); if (info.m_hvoPOS == 0) { info.m_hvoPOS = m_cache.MainCacheAccessor.get_ObjectProp(info.m_hvoMsa, (int)MoStemMsa.MoStemMsaTags.kflidPartOfSpeech); } } wa = new WfiAnalysis(); ww.AnalysesOC.Add(wa); wa.CategoryRAHvo = info.m_hvoPOS; WfiGloss wg = new WfiGloss(); wa.MeaningsOC.Add(wg); // Not all entries have senses. if (info.m_hvoSense != 0) { MultiUnicodeAccessor muaGloss = new MultiUnicodeAccessor(m_cache, info.m_hvoSense, /* ls.Id */ (int)LexSense.LexSenseTags.kflidGloss, "LexSense_Gloss"); wg.Form.MergeAlternatives(muaGloss); } WfiMorphBundle wmb = new WfiMorphBundle(); wa.MorphBundlesOS.Append(wmb); wmb.MorphRAHvo = info.m_hvoForm; if (tssName != null && wsVern != 0) wmb.Form.SetAlternative(tssName, wsVern); wmb.MsaRAHvo = info.m_hvoMsa; wmb.SenseRAHvo = info.m_hvoSense; // Now, set up an approved "Computer" evaluation of this generated analysis wa.SetAgentOpinion(m_cache.LangProject.DefaultComputerAgent, Opinions.approves); } else { // The same unanalyzed word may occur twice in a paragraph... wa = ww.AnalysesOC.ToArray()[0]; Debug.Assert(ww.AnalysesOC.Count == 1); Debug.Assert(wa.CategoryRAHvo == info.m_hvoPOS); Debug.Assert(wa.MorphBundlesOS.Count == 1); Debug.Assert(wa.MorphBundlesOS[0].MorphRAHvo == info.m_hvoForm); Debug.Assert(wa.MorphBundlesOS[0].MsaRAHvo == info.m_hvoMsa); Debug.Assert(wa.MorphBundlesOS[0].SenseRAHvo == info.m_hvoSense); } } progress.Breath(); }
/// <summary> /// Make (two) monomorphemic analyses on our favorite wordform, connected to two entries, one with two glosses. /// </summary> private void MakeMonoAnalyses() { string formLexEntry = "axx"; ITsString tssLexEntryForm = Cache.MakeVernTss(formLexEntry); int clsidForm; ILexEntry entry = LexEntry.CreateEntry(Cache, MoMorphType.FindMorphType(Cache, new MoMorphTypeCollection(Cache), ref formLexEntry, out clsidForm), tssLexEntryForm, "axe", null); ILexSense senseAxe = entry.SensesOS[0]; IMoForm form = entry.LexemeFormOA; m_wfaAxe = new WfiAnalysis(); m_wfAxx.AnalysesOC.Add(m_wfaAxe); IWfiMorphBundle bundle = m_wfaAxe.MorphBundlesOS.Append(new WfiMorphBundle()); bundle.MorphRA = form; bundle.SenseRA = senseAxe; m_wgAxe = new WfiGloss(); m_wfaAxe.MeaningsOC.Add(m_wgAxe); m_wgAxe.Form.AnalysisDefaultWritingSystem = "axe"; m_wgChopper = new WfiGloss(); m_wfaAxe.MeaningsOC.Add(m_wgChopper); m_wgChopper.Form.AnalysisDefaultWritingSystem = "chopper"; m_wfaAxe.SetAgentOpinion(m_fdoCache.LangProject.DefaultUserAgent, Opinions.approves); ILexEntry entryCut = LexEntry.CreateEntry(Cache, MoMorphType.FindMorphType(Cache, new MoMorphTypeCollection(Cache), ref formLexEntry, out clsidForm), tssLexEntryForm, "cut", null); m_wfaCut = new WfiAnalysis(); m_wfAxx.AnalysesOC.Add(m_wfaCut); bundle = m_wfaCut.MorphBundlesOS.Append(new WfiMorphBundle()); bundle.MorphRA = entryCut.LexemeFormOA; bundle.SenseRA = entryCut.SensesOS[0]; m_wgCut = new WfiGloss(); m_wfaCut.MeaningsOC.Add(m_wgCut); m_wgCut.Form.AnalysisDefaultWritingSystem = "cut"; m_wfaCut.SetAgentOpinion(m_fdoCache.LangProject.DefaultUserAgent, Opinions.approves); m_cAnalyses += 2; }