Пример #1
0
 public static IEnumerable <EquivalentTermEntity> Map(this SynonymGroup synonymGroup)
 {
     return(from s in synonymGroup.Terms
            select new EquivalentTermEntity {
         equivalentGroupId = synonymGroup.Id, searchTerm = s
     });
 }
Пример #2
0
        /// <summary>
        /// Adds the given synonyms to the thesaurus.
        /// </summary>
        /// <param name="synonyms">The synonyms to add.</param>
        public void AddSynonyms(IEnumerable <string> synonyms)
        {
            HashSet <int> foundSynonymGroupIDs = new HashSet <int>();
            List <string> unrecognizedWords    = new List <string>();

            foreach (string word in synonyms)
            {
                var wordsQuery = dbContext.Words.Where(w => w.Characters == word);
                if (wordsQuery.Any())
                {
                    foundSynonymGroupIDs.Add(wordsQuery.Select(p => p.SynonymGroupID).First());
                    continue;
                }
                else
                {
                    unrecognizedWords.Add(word);
                }
            }

            SynonymGroup synonymGroup = GetSynonymGroup(foundSynonymGroupIDs);

            foreach (string word in unrecognizedWords)
            {
                var newWord = new Word
                {
                    Characters   = word,
                    SynonymGroup = synonymGroup
                };

                dbContext.Words.Add(newWord);
            }

            dbContext.SaveChanges();
        }
Пример #3
0
        /// <summary>
        /// Change <see cref="Word.SynonymGroupID"/>'s in <see cref="ThesaurusContext.Words"/> to point to the same
        /// <see cref="SynonymGroup"/> in <see cref="ThesaurusContext.SynonymGroups"/> and deletes the unused
        /// <see cref="SynonymGroup"/>'s from <see cref="ThesaurusContext.SynonymGroups"/>.
        /// </summary>
        /// <param name="synonymGroupIDsToMerge">The synonym group id's to merge</param>
        /// <returns>A merged synonym group</returns>
        private SynonymGroup GetMergedSynonymGroup(HashSet <int> synonymGroupIDsToMerge)
        {
            int          targetID           = synonymGroupIDsToMerge.Min();
            SynonymGroup targetSynonymGroup = dbContext.SynonymGroups.Find(targetID);

            synonymGroupIDsToMerge.Remove(targetID);

            foreach (int groupId in synonymGroupIDsToMerge)
            {
                var words = dbContext.Words.Where(g => g.SynonymGroupID == groupId).ToList();

                SynonymGroup mergingSynonymGroup = dbContext.SynonymGroups.Find(groupId);

                foreach (Word word in words)
                {
                    word.SynonymGroup = targetSynonymGroup;
                    dbContext.SaveChanges();
                }

                dbContext.SynonymGroups.Remove(mergingSynonymGroup);
                dbContext.SaveChanges();
            }

            return(targetSynonymGroup);
        }
Пример #4
0
 void ISynonymsRepository.CreateSynonyms(SynonymGroup synonymGroup)
 {
     using (var dc = new SynonymsDataContext(_connectionFactory.CreateConnection()))
     {
         dc.EquivalentTermEntities.InsertAllOnSubmit(synonymGroup.Map());
         dc.SubmitChanges();
     }
 }
 public static SynonymWord SynWord(SynonymGroup synGroup, string word) // do I need to set the synonym group, or will id suffice?
 {
     return(new SynonymWord()
     {
         GroupId = synGroup.Id,
         Word = word
     });
 }
Пример #6
0
 public SynonymGroupDomain CreateSynonymGroup(SynonymGroup request)
 {
     try
     {
         Context.SynonymGroups.Add(request);
         SaveChanges();
     }
     catch (Exception e)
     {
         LoggingHandler.LogError(e.Message);
         LoggingHandler.LogError(e.StackTrace);
         throw;
     }
     return(_mapper.ToDomain(request));
 }
Пример #7
0
        /// <summary>
        /// Gets the <see cref="SynonymGroup"/> that the words should be added to.
        /// </summary>
        /// <param name="foundSynonymGroupIDs">the ids of possible groups</param>
        /// <returns>The <see cref="SynonymGroup"/> that the words should be added to</returns>
        private SynonymGroup GetSynonymGroup(HashSet <int> foundSynonymGroupIDs)
        {
            SynonymGroup synonymGroup;

            if (foundSynonymGroupIDs.Count == 0)
            {
                // No synonyms was found for the words entered, create a new synonym group
                synonymGroup = new SynonymGroup();
            }
            else if (foundSynonymGroupIDs.Count == 1)
            {
                // One synonym group was found.
                synonymGroup = dbContext.SynonymGroups.Find(foundSynonymGroupIDs.First());
            }
            else
            {
                // The words was members of multiple synonymgroups.
                synonymGroup = GetMergedSynonymGroup(foundSynonymGroupIDs);
            }

            return(synonymGroup);
        }
Пример #8
0
        IList <SynonymGroup> ISynonymsRepository.GetSynonyms()
        {
            using (var dc = new SynonymsDataContext(_connectionFactory.CreateConnection()).AsReadOnly())
            {
                var synonymGroupMap = new Dictionary <Guid, SynonymGroup>();

                foreach (var entity in GetEquivalentTermEntities(dc))
                {
                    SynonymGroup synonymGroup;
                    if (!synonymGroupMap.TryGetValue(entity.equivalentGroupId, out synonymGroup))
                    {
                        synonymGroup = new SynonymGroup {
                            Id = entity.equivalentGroupId, Terms = new List <string>()
                        };
                        synonymGroupMap.Add(entity.equivalentGroupId, synonymGroup);
                    }

                    synonymGroup.Terms.Add(entity.searchTerm);
                }

                return(synonymGroupMap.Values.ToList());
            }
        }
Пример #9
0
 public SynonymGroupDomain ToDomain(SynonymGroup synonymGroup)
 {
     return(_mapper.Map <SynonymGroupDomain>(synonymGroup));
 }