示例#1
0
        public void DifferentAnalyses_AreNotMerged()
        {
            var wf        = MakeWordform("bank");
            var wa1       = MakeAnalysis(wf);
            var entryBank = MakeEntry("bank", "side of river");

            MakeBundle(wa1, entryBank.SensesOS[0]);

            var wa2       = MakeAnalysis(wf);
            var entryKick = MakeEntry("bank", "place for money");

            MakeBundle(wa2, entryKick.SensesOS[0]);

            var wa3 = MakeAnalysis(wf);

            MakeBundle(wa3, entryBank.SensesOS[0]);
            var verb = MakePartOfSpeech("verb");

            wa3.CategoryRA = verb;

            var wa4 = MakeAnalysis(wf);

            MakeBundle(wa4, "bank");             // analysis only to morpheme level
            var wa5 = MakeAnalysis(wf);

            MakeBundle(wa5, "bank0");             // analysis only to morpheme level

            var wa6     = MakeAnalysis(wf);
            var bundle6 = MakeBundle(wa6, "bank");

            bundle6.MsaRA = MakeMsa(entryBank);

            var wa7     = MakeAnalysis(wf);
            var bundle7 = MakeBundle(wa7, "bank0");

            bundle7.MorphRA = MorphServices.MakeMorph(entryBank, TsStringUtils.MakeString("bank", Cache.DefaultVernWs));

            var wa8 = MakeAnalysis(wf);

            MakeBundle(wa8, entryBank.SensesOS[0]);
            MakeBundle(wa8, entryBank.SensesOS[0]);             // makes sure it handles different number of bundles


            WfiWordformServices.MergeDuplicateAnalyses(Cache, m_progress);

            // We could try for something stronger; the basic idea is that it should change nothing.
            // But the kind of changes it makes is deleting objects, so this should cover it.
            Assert.That(wa1.IsValidObject);
            Assert.That(wa2.IsValidObject);
            Assert.That(wa3.IsValidObject);
            Assert.That(wa4.IsValidObject);
            Assert.That(wa5.IsValidObject);
            Assert.That(wa6.IsValidObject);
            Assert.That(wa7.IsValidObject);
            Assert.That(wa8.IsValidObject);
        }
示例#2
0
        /// <summary>
        /// This overload finds guesses for wordforms specified in a dictionary that maps a wordform to the
        /// string that we want to match (might be a different case form).
        /// </summary>
        /// <param name="wordsToMatch"></param>
        /// <returns></returns>
        private Dictionary <IWfiWordform, EmptyWwfInfo> MapWordsForComputerGuessesToBestMatchingEntry(Dictionary <IWfiWordform, ITsString> wordsToMatch)
        {
            var matchingMorphs = new Dictionary <ITsString, IMoStemAllomorph>(new TsStringEquator());

            foreach (var tssWord in wordsToMatch.Values)
            {
                matchingMorphs[tssWord] = null;
            }
            MorphServices.GetMatchingMonomorphemicMorphs(Cache, matchingMorphs);
            var mapEmptyWfInfo = new Dictionary <IWfiWordform, EmptyWwfInfo>();

            foreach (var kvp in wordsToMatch)
            {
                var word              = kvp.Key;
                var tssWord           = kvp.Value;
                var bestMatchingMorph = matchingMorphs[tssWord];
                if (bestMatchingMorph != null)
                {
                    var       entryOrVariant = bestMatchingMorph.OwnerOfClass <ILexEntry>();
                    ILexEntry mainEntry;
                    ILexSense sense;
                    GetMainEntryAndSense(entryOrVariant, out mainEntry, out sense);
                    if (sense == null && mainEntry.SensesOS.Count > 0)
                    {
                        sense = mainEntry.SensesOS.Where(s => s.MorphoSyntaxAnalysisRA is IMoStemMsa)
                                .FirstOrDefault();
                    }
                    IMoStemMsa    msa = null;
                    IPartOfSpeech pos = null;
                    if (sense != null)
                    {
                        msa = (IMoStemMsa)sense.MorphoSyntaxAnalysisRA;
                        pos = msa.PartOfSpeechRA;
                    }
                    // map the word to its best entry.
                    var entryInfo = new EmptyWwfInfo(bestMatchingMorph, msa, pos, sense);
                    mapEmptyWfInfo.Add(word, entryInfo);
                }
            }
            return(mapEmptyWfInfo);
        }
示例#3
0
        /// <summary>
        /// Confirm that we can break the specified string into the two parts needed for a circumfix.
        /// Return true (and the two parts, not stripped of affix markers) if successful.
        /// </summary>
        public static bool GetCircumfixLeftAndRightParts(LcmCache cache, ITsString tssLexemeForm,
                                                         out string sLeftMember, out string sRightMember)
        {
            // split citation form into left and right parts
            sLeftMember  = null;
            sRightMember = null;
            var aSpacePeriod = new[] { ' ', '.' };
            var lexemeForm   = tssLexemeForm.Text;
            var iLeftEnd     = lexemeForm.IndexOfAny(aSpacePeriod);

            if (iLeftEnd < 0)
            {
                return(false);
            }

            sLeftMember = lexemeForm.Substring(0, iLeftEnd);
            int iRightBegin = lexemeForm.LastIndexOfAny(aSpacePeriod);

            if (iRightBegin < 0)
            {
                return(false);
            }

            sRightMember = lexemeForm.Substring(iRightBegin + 1);
            int clsidForm;

            try
            {
                var temp = sLeftMember;
                MorphServices.FindMorphType(cache, ref temp, out clsidForm);
                temp = sRightMember;
                MorphServices.FindMorphType(cache, ref temp, out clsidForm);
            }
            catch (Exception)
            {
                return(false);
            }
            return(true);
        }