Exemple #1
0
        /// <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);
    }