Exemple #1
0
        private void _tagger_AddTag(object sender, TaggerEventArgs e)
        {
            //Stopwatch.StartNew();
            if (SituationIndex.TagsetCounter.Count != 0)
            {
                SituationIndex.AddSituationToIndex(e.messages, e.Id, e.Tag);

                foreach (var id in e.messages)
                {
                    if (!MessageContainer.Messages[id].Situations.ContainsKey(e.Tag))
                    {
                        MessageContainer.Messages[id].Situations.Add(e.Tag, SituationIndex.TagsetCounter[e.Tag]);
                    }
                    else
                    {
                        //MessageContainer.Messages[id].Situations[e.Tag]
                        _tagger.DisplayTagErrorMessage();
                    }
                }
                _tagger.AddSituationIndexItem(e.Tag + " " + SituationIndex.TagsetCounter[e.Tag].ToString());
                var count = SituationIndex.Index[e.Tag].Count;
                SituationIndex.TagsetCounter[e.Tag]++;
            }
            else
            {
                foreach (var str in TagsetIndex.Index[_service.ProjectTagset])
                {
                    SituationIndex.TagsetCounter.Add(str, 0);
                    _tagger.AddSituationIndexItem(e.Tag + " " + SituationIndex.TagsetCounter[e.Tag].ToString());
                }
            }
            _tagger.UpdateSituationCount(SituationIndex.SituationCount());
        }
        private void SetSimpleCounts()
        {
            int        prev     = 0;                                                                //prev id
            List <int> windows  = new List <int>();                                                 // all windows lengths;
            int        count    = 0;                                                                //all messages in all situations
            int        symcount = 0;                                                                //all symbols in all situations
            int        sitcount = SituationIndex.SituationCount();                                  //the number of all situations

            HashSet <string>         usersInSituation             = new HashSet <string>();         //counts all unique users in a situation
            Dictionary <string, int> userPerSituationPerTagCounts = new Dictionary <string, int>(); //the sum of unique users in each tag

            foreach (var kvp in SituationIndex.TagsetCounter)
            {
                userPerSituationPerTagCounts.Add(kvp.Key, 0);
                this.AverageUsersInSituationPerTag.Add(kvp.Key, 0);
            }

            foreach (var kvp in SituationIndex.Index)
            {
                count += kvp.Value.Values.Count;
                foreach (var dict in kvp.Value)
                {
                    prev = dict.Value[0];
                    foreach (var index in dict.Value)
                    {
                        if (index - prev > 1)
                        {
                            count++;
                            windows.Add(index - prev);
                        }
                        prev      = index;
                        symcount += LuceneService.DirReader.Document(index).GetField(ProjectInfo.TextFieldKey).GetStringValue().Length;
                        usersInSituation.Add(LuceneService.DirReader.Document(index).GetField(ProjectInfo.SenderFieldKey).GetStringValue());
                    }

                    userPerSituationPerTagCounts[kvp.Key] += usersInSituation.Count;
                    usersInSituation.Clear();
                }
            }
            this.NumberOfDocs             = count;
            this.AverageMessagesPerUnit   = count / sitcount;
            this.NumberOfSymbols          = symcount;
            this.AverageLength            = symcount / count;
            this.AverageWindowLength      = windows.Sum() / windows.Count;
            this.AverageUsersPerSituation = userPerSituationPerTagCounts.Values.Sum() / sitcount;
            foreach (var kvp in userPerSituationPerTagCounts)
            {
                this.AverageUsersInSituationPerTag[kvp.Key] = kvp.Value / SituationIndex.Index[kvp.Key].Count;
                this.SituationsPerTag.Add(kvp.Key, SituationIndex.Index[kvp.Key].Count);
                this.AllFields.Add("Average number of users in " + kvp.Key, AverageUsersInSituationPerTag[kvp.Key]);
                this.AllFields.Add(kvp.Key, SituationIndex.Index[kvp.Key].Count);
            }

            this.AllFields.Add("Number of tagged messages", this.NumberOfDocs);
            this.AllFields.Add("Number of symbols", this.NumberOfSymbols);
            this.AllFields.Add("Average number of messages per situation", this.AverageUsersPerSituation);
            this.AllFields.Add("Average length of a tagged message", AverageLength);
            this.AllFields.Add("Average window length", AverageWindowLength);
            this.AllFields.Add("Number of windows", windows.Count);
        }
Exemple #3
0
        private void DeleteOrEditTag(TaggerEventArgs args, bool type)
        {
            foreach (var id in SituationIndex.Index[args.Tag][args.Id])
            {
                MessageContainer.Messages[id].Situations.Remove(args.Tag);
            }

            if (type)
            {
                _tagger.UpdateSituationCount(SituationIndex.SituationCount());
            }
            else
            {
                var tag = args.AdditionalInfo["Change"].ToString();

                var count  = SituationIndex.TagsetCounter[tag];
                var count2 = SituationIndex.Index[tag].Count;
                var list   = SituationIndex.Index[args.Tag][args.Id];

                SituationIndex.TagsetCounter[tag]++;
                SituationIndex.AddSituationToIndex(list, count, tag);
                foreach (var id in list)
                {
                    MessageContainer.Messages[id].Situations.Add(tag, count);
                }
                _tagger.AddSituationIndexItem(tag + " " + count);
            }

            SituationIndex.RemoveSituationFromIndex(args.Id, args.Tag);
            SituationIndex.TagsetCounter[args.Tag]--;

            _tagger.DeleteSituationIndexItem(args.Tag + " " + args.Id.ToString());



            if (args.Id < SituationIndex.Index[args.Tag].Count + 1)
            {
                for (int i = args.Id + 1; i <= SituationIndex.Index[args.Tag].Count; i++)
                {
                    var list = SituationIndex.Index[args.Tag][i];
                    foreach (var id in list)
                    {
                        MessageContainer.Messages[id].Situations[args.Tag]--;
                    }

                    SituationIndex.RemoveSituationFromIndex(i, args.Tag);
                    SituationIndex.AddSituationToIndex(list, i - 1, args.Tag);

                    _tagger.DeleteSituationIndexItem(args.Tag + " " + i.ToString());
                    _tagger.AddSituationIndexItem(args.Tag + " " + (i - 1).ToString());
                }
            }
        }
Exemple #4
0
        private void LoadTagged(object sender, EventArgs e)
        {
            if (_service.SituationContainer.Count == 0)
            {
                if (File.Exists(ProjectInfo.SavedTagsPath))
                {
                    using (StreamReader reader = new StreamReader(ProjectInfo.SavedTagsPath))
                    {
                        string line;
                        while ((line = reader.ReadLine()) != null)
                        {
                            var MessageIdAndSituations = line.Split(' ');
                            _service.SituationContainer.Add(Int32.Parse(MessageIdAndSituations[0]), MessageIdAndSituations[1]);

                            var situationsSet = MessageIdAndSituations[1].Split(new char[] { '+' }, StringSplitOptions.RemoveEmptyEntries);

                            foreach (var situation in situationsSet)
                            {
                                var splitSituation = situation.Split('-');
                                int sitId          = int.Parse(splitSituation[1]);
                                if (SituationIndex.Index.ContainsKey(splitSituation[0]))
                                {
                                    if (!SituationIndex.Index[splitSituation[0]].ContainsKey(sitId))
                                    {
                                        SituationIndex.Index[splitSituation[0]].Add(sitId, new List <int>());
                                        SituationIndex.Index[splitSituation[0]][sitId].Add(int.Parse(MessageIdAndSituations[0]));
                                    }
                                    else
                                    {
                                        SituationIndex.Index[splitSituation[0]][sitId].Add(int.Parse(MessageIdAndSituations[0]));
                                    }
                                }
                                else
                                {
                                    SituationIndex.Index.Add(splitSituation[0], new Dictionary <int, List <int> >());
                                    SituationIndex.Index[splitSituation[0]].Add(sitId, new List <int>());
                                    SituationIndex.Index[splitSituation[0]][sitId].Add(int.Parse(MessageIdAndSituations[0]));
                                }

                                //TODO: Revise and add a wrapper ASAP
                                _tagger.AddSituationIndexItem(splitSituation[0] + " " + splitSituation[1]);
                            }
                        }
                    }
                    _service.TaggedIds = _service.SituationContainer.Keys.ToList();
                    _service.TaggedIds.Sort();
                    _tagger.UpdateSituationCount(SituationIndex.SituationCount());
                }
            }
        }