/// <summary> /// Generates the related word lookup dictionary and saves it to EmojiData. /// </summary> private static void GenerateRelatedWordsToEmojiDictionaryKeysDictionary() { if (EmojiData.RelatedWordsToEmojiDictionaryKeysDictionary == null) { var relatedWordReverseLookup = new Dictionary <string, List <SimilarWord> >(); foreach (var relatedWordKey in EmojiData.RelatedWordsDictionary.Keys) { var relatedWords = EmojiData.RelatedWordsDictionary[relatedWordKey]; foreach (var relatedWord in relatedWords) { var reverseWordKey = relatedWord.Word; var reverseWordValue = relatedWordKey; if (relatedWordReverseLookup.ContainsKey(reverseWordKey)) { var existingRelatedWords = relatedWordReverseLookup[reverseWordKey]; if (existingRelatedWords == null) { existingRelatedWords = new List <SimilarWord>(); } if (!existingRelatedWords.Any(x => x.Word.Equals(reverseWordValue))) { existingRelatedWords.Add(new SimilarWord(reverseWordValue, relatedWord.Score)); relatedWordReverseLookup[reverseWordKey] = existingRelatedWords .OrderByDescending(x => x.Score) .ToList(); } } else { var wordToAdd = new SimilarWord(reverseWordValue, relatedWord.Score); relatedWordReverseLookup.TryAdd(reverseWordKey, new List <SimilarWord> { wordToAdd }); } } } EmojiData.relatedWordsToEmojiDictionaryKeysDictionary = relatedWordReverseLookup; } }
/// <summary> /// Get all words that are similar to a given word. /// </summary> /// <param name="str1"></param> /// <param name="str2"></param> /// <returns></returns> public List <string> GetSimilarWords(string word) { var similarWords = new List <SimilarWord>(); // Transverse dictionary looking for similar words foreach (var dictWord in Entries.Values.ToList()) { float similarity = Word.Compare(word, dictWord); if (similarity > 0.0f && dictWord != word) { var similarWord = new SimilarWord(); similarWord.Word = dictWord; similarWord.Similarity = similarity; similarWords.Add(similarWord); } } // Ranking by similarity similarWords = similarWords.OrderByDescending(w => w.Similarity).ToList(); return(similarWords.Select(w => w.Word).ToList()); }
public static string Serialize(SimilarWord model) { string json = JsonUtility.ToJson(model); return(json); }
public static SimilarWord Deserialize(string json) { SimilarWord model = JsonUtility.FromJson <SimilarWord>(json); return(model); }