Beispiel #1
0
        // Helper class to Add or Update CompanyRecords.
        public static bool InsertCompanyRecord(string companyName, CompanyRecord companyRecord)
        {
            bool result = false;

            if (companyName == null || companyName == string.Empty || companyName == "")
            {
                throw new ApplicationException("Invalid string for CompanyName {companyName}");
            }

            if (companyRecord == null)
            {
                throw new ApplicationException("Must assign CompanyRecord type value before use");
            }

            if (companyName.CompareTo(companyRecord.CompanyName) != 0)
            {
                companyRecord.CompanyName = companyName;
            }

            object lockit = new object();

            lock (lockit)
            {
                companyRecord.CleansedCompanyName      = NormalizeName.GetCleansedCompanyName(companyRecord.CompanyName);
                companyRecord.CleansedCompanyNameWords = companyRecord.CleansedCompanyName.Split(' ');
                List <TokenSound> tokenSoundList = SoundExHash.GetTokenSounds(new List <string>(companyRecord.CleansedCompanyNameWords));

                if (!CompanyDictionary.ContainsKey(companyName))
                {
                    CompanyDictionary.Add(companyName, companyRecord);
                }
                else
                {
                    CompanyDictionary[companyName] = companyRecord;
                }

                result = true;
            }

            return(result);
        }
Beispiel #2
0
        // All of these will get 100% of the allocated percentage.
        private Dictionary <string, CompanyRecordScore> GetCompanyNameExactMatchWithNormalization(string cleansedCompanyName, CompanyRecord companyRecord)
        {
            Dictionary <string, CompanyRecordScore> result = new Dictionary <string, CompanyRecordScore>();

            if (cleansedCompanyName == companyRecord.CleansedCompanyName)
            {
                result.Add(companyRecord.CompanyName, new CompanyRecordScore(companyRecord, (int)(nameSearchPercentage.ExactMatchWithNormalizationPercentage + 0.5), CompanyScoreType.ExactMatchWithNormalization));
            }

            return(result);
        }
Beispiel #3
0
 public CompanyRecordScore(CompanyRecord companyRecord, int score, CompanyScoreType companyScoreType)
 {
     this.companyRecord    = companyRecord;
     this.Score            = score;
     this.companyScoreType = companyScoreType;
 }
Beispiel #4
0
        private Dictionary <string, CompanyRecordScore> GetCompanyNameSoundsLike(string[] companyWords, CompanyRecord companyListRecord)
        {
            // Let's not consider in order.
            Dictionary <string, CompanyRecordScore> result = new Dictionary <string, CompanyRecordScore>();
            int matchCount = 0;
            int Score      = 0;

            List <TokenSound> tokenSoundList = SoundExHash.GetTokenSounds(companyWords.ToList());

            foreach (TokenSound tokenSound in tokenSoundList)
            {
                foreach (TokenSound companyListToken in companyListRecord.tokenSoundList)
                {
                    if (companyListToken.Sound.Contains(tokenSound.Sound))
                    {
                        matchCount++;
                    }
                }
            }

            int cleansedWordCount = companyListRecord.tokenSoundList.Count;
            int companyWordCount  = tokenSoundList.Count;

            float matchPercentage = GetMatchPercentage(matchCount, cleansedWordCount, companyWordCount);

            matchPercentage = (nameSearchPercentage.MatchSoundsLikePercentage * matchPercentage) / PercentageMultiplier;

            if (matchPercentage >= nameSearchPercentage.ExactMatchWithNormalizationOutOfOrderPercentage)
            {
                Score = (int)(matchPercentage + 0.5);
                result.Add(companyListRecord.CompanyName, new CompanyRecordScore(companyListRecord, Score, CompanyScoreType.MatchSoundsLike));
            }

            return(result);
        }
Beispiel #5
0
        private Dictionary <string, CompanyRecordScore> GetCompanyNameExactMatchWithNormalizationOutOfOrder(string[] companyWords, CompanyRecord companyRecord)
        {
            Dictionary <string, CompanyRecordScore> result = new Dictionary <string, CompanyRecordScore>();
            int matchCount = 0;
            int Score      = 0;

            for (int i = 0; i < companyWords.GetLength(0); i++)
            {
                if (companyRecord.CleansedCompanyNameWords.Contains(companyWords[i]))
                {
                    matchCount++;
                }
            }

            int cleansedWordCount = companyRecord.CleansedCompanyNameWords.GetLength(0);
            int companyWordCount  = companyWords.GetLength(0);

            float matchPercentage = GetMatchPercentage(matchCount, cleansedWordCount, companyWordCount);

            matchPercentage = (nameSearchPercentage.ExactMatchWithNormalizationOutOfOrderPercentage * matchPercentage) / PercentageMultiplier;

            if (matchPercentage >= nameSearchPercentage.ExactMatchWithNormalizationOutOfOrderPercentage)
            {
                Score = (int)(matchPercentage + 0.5);
                result.Add(companyRecord.CompanyName, new CompanyRecordScore(companyRecord, Score, CompanyScoreType.ExactMatchWithNormalizationOutOfOrder));
            }

            return(result);
        }