// 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); }
// 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); }
public CompanyRecordScore(CompanyRecord companyRecord, int score, CompanyScoreType companyScoreType) { this.companyRecord = companyRecord; this.Score = score; this.companyScoreType = companyScoreType; }
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); }
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); }