コード例 #1
0
        protected override void InnerRun()
        {
            var totalGroups = Writer.chat.Messages.GroupBy(p => p.Date.Hour).OrderBy(p => p.Key);

            Writer.WriteString();
            Writer.WriteString();

            var array1 = new List <string>();
            var array2 = new List <List <string> >();

            var specificGroups = Writer.chat.Messages.GroupBy(p => p.Date.Month).Select(p =>
                                                                                        new DataNode()
            {
                Month = p.Key, Messages = p.GroupBy(j => j.Date.Hour).OrderBy(j => j.Key).ToDictionary(j => j.Key, j => j.Count())
            })
                                 .ToList();

            specificGroups.Insert(0, new DataNode()
            {
                Month = -1, Messages = totalGroups.ToDictionary(j => j.Key, j => j.Count())
            });

            foreach (var item in specificGroups)
            {
                array1.AddRange(new string[]
                {
                    $"Час суток (за {item.Month} месяц)",
                    "Сообщений",
                    ""
                });
            }

            for (int i = 0; i < 24; i++)
            {
                var tmp = new List <string>();
                foreach (var a in specificGroups)
                {
                    tmp.AddRange(new string[]
                    {
                        i.ToString(),
                        a.Messages.ContainsKey(i) ? a.Messages[i].ToString() : "",
                        ""
                    });
                }
                array2.Add(tmp);
            }



            Writer.WriteString(array1.ToArray());
            foreach (var a in array2)
            {
                Writer.WriteString(a.ToArray());
            }

            InnerEnd();
        }
コード例 #2
0
        protected override void InnerRun()
        {
            var groups = Writer.chat.Messages.GroupBy(p => p.Date.DayOfWeek).OrderBy(p => p.Key);

            Writer.WriteString();
            Writer.WriteString();

            Writer.WriteString("День недели", "Сообщений");
            foreach (var a in groups)
            {
                Writer.WriteString(a.Key.ToString(), a.Count());
            }

            InnerEnd();
        }
コード例 #3
0
        protected override void InnerRun()
        {
            var links = new List <string>();

            Writer.chat.Messages.FindAll(p => p.HasLinks)
            .ForEach(p => links.AddRange(p.Links));

            var groups = links.GroupBy(p => GetHost(p)).OrderBy(p => p.Key).OrderByDescending(p => p.Count());

            Writer.WriteString();
            Writer.WriteString();

            Writer.WriteString("Домен", "Кол-во");
            foreach (var a in groups)
            {
                Writer.WriteString(a.Key.ToString(), a.Count());
            }

            InnerEnd();
        }
コード例 #4
0
        protected override void InnerRun()
        {
            const int   count      = 200;
            List <char> splitChars = new List <char>();

            for (char c = '\0'; c < (char)255; c++)
            {
                if (!char.IsLetterOrDigit(c))
                {
                    splitChars.Add(c);
                }
            }

            var groups = Writer.chat.Messages.GroupBy(p => p.From).OrderByDescending(p => p.Count()).ToList();

            groups.InsertRange(0, Writer.chat.Messages.GroupBy(x => "TOTAL").ToList());

            var allText       = new List <string>();
            int globalCounter = 0;

            List <Dictionary <string, int> > result = new List <Dictionary <string, int> >();

            foreach (var a in groups)
            {
                int counter = 0;

                SubtaskName = a.Key;
                CurrentStep = (globalCounter++ / (float)groups.Count()) / 2f;
                allText     = new List <string>();

                foreach (var b in a)
                {
                    SubTaskCurrentStep = (counter++ / (float)a.Count()) / 2f;
                    allText.AddRange(
                        b.Text.Split(splitChars.ToArray())
                        .ToList()
                        .FindAll(p => !string.IsNullOrWhiteSpace(p))
                        .Select(p => p.ToLower()));
                }

                counter = 0;
                var groupedWords = new Dictionary <string, int>();
                foreach (var word in allText)
                {
                    SubTaskCurrentStep = .5f + (counter++ / (float)allText.Count()) / 2f;
                    if (groupedWords.ContainsKey(word))
                    {
                        groupedWords[word]++;
                    }
                    else
                    {
                        groupedWords.Add(word, 1);
                    }
                }

                groupedWords = groupedWords.OrderByDescending(p => p.Value).ToDictionary(p => p.Key, p => p.Value);
                result.Add(groupedWords);
            }

            SubtaskName = "Outputting results";

            Writer.WriteString();
            Writer.WriteString();

            const int rowsPerMember = 3;
            var       array1        = new List <string>();
            var       array2        = new List <string>();

            int chatCounter = 0;

            for (int i = 0; i < groups.Count(); i++)
            {
                array1.Add(groups.ElementAt(i).Key);
                array1.Add($"С-ний: {groups.ElementAt(i).Count()}");
                array1.Add($"Слов: {result[chatCounter].Sum(p => p.Value)} ({string.Format("{0:.##}", result[chatCounter++].Sum(p => p.Value)/(float)groups.ElementAt(i).Count())})");

                for (int j = 0; j < rowsPerMember - 2; j++)
                {
                    array1.Add("");
                }

                array2.AddRange(new List <string>
                {
                    "Слово",
                    "Кол-во",
                    "% от всех",
                    ""
                });
            }

            Writer.WriteString(array1.ToArray());
            Writer.WriteString(array2.ToArray());


            for (int i = 0; i < count; i++)
            {
                chatCounter        = 0;
                CurrentStep        = .5f + (i / (float)count) / 2;
                SubTaskCurrentStep = i / (float)count;

                List <string> listToAdd = new List <string>();
                foreach (var a in result)
                {
                    if (i >= a.Count())
                    {
                        listToAdd.AddRange(new List <string>
                        {
                            "",
                            "",
                            "",
                            ""
                        });
                    }
                    else
                    {
                        listToAdd.AddRange(new List <string>
                        {
                            a.ElementAt(i).Key,
                            a.ElementAt(i).Value.ToString(),
                            string.Format("{0:0.###}%", a.ElementAt(i).Value / (float)a.Sum(p => p.Value)),
                            ""
                        });
                    }
                    chatCounter++;
                }
                Writer.WriteString(listToAdd.ToArray());
            }

            InnerEnd();
        }
コード例 #5
0
        protected override void InnerRun()
        {
            /*
             * - кол-во сообщений
             * - кол-во медиа
             * - кол-во изм. сообщ
             *
             * - первое сообщение
             * - последнее сообщение
             */

            int count          = Writer.chat.Messages.Count;
            int countMedia     = Writer.chat.Messages.Count(p => p.MediaType != MediaType.Null);
            int countEdited    = Writer.chat.Messages.Count(p => p.IsEdited);
            int countForwarded = Writer.chat.Messages.Count(p => p.IsForwarded);

            DateTime first = Writer.chat.Messages.First().Date;
            DateTime last  = Writer.chat.Messages.Last().Date;

            var photos   = Writer.chat.Messages.FindAll(p => p.MediaType == MediaType.Photo);
            var voices   = Writer.chat.Messages.FindAll(p => p.MediaType == MediaType.Voice_message);
            var videos   = Writer.chat.Messages.FindAll(p => p.MediaType == MediaType.Video_file);
            var videoM   = Writer.chat.Messages.FindAll(p => p.MediaType == MediaType.Video_message);
            var animms   = Writer.chat.Messages.FindAll(p => p.MediaType == MediaType.Animation);
            var stickers = Writer.chat.Messages.FindAll(p => p.MediaType == MediaType.Sticker);

            IGrouping <string, Message> mostStricker = null;

            if (stickers.Count != 0)
            {
                mostStricker = stickers.GroupBy(p => (p.MediaInfo as StickerMediaData).Emoji).
                               OrderByDescending(p => p.Count()).First();
            }

            double widhtAv     = photos.Count == 0 ? 0 : photos.Average(p => (p.MediaInfo as PhotoMediaData).Width);
            double heightAv    = photos.Count == 0 ? 0 : photos.Average(p => (p.MediaInfo as PhotoMediaData).Height);
            double voiceAv     = voices.Count == 0 ? 0 : voices.Average(p => (p.MediaInfo as VoiceMediaData).Duration);
            double videoAv     = videos.Count == 0 ? 0 : videos.Average(p => (p.MediaInfo as VideoMediaData).Duration);
            double videoMessAv = videoM.Count == 0 ? 0 : videoM.Average(p => (p.MediaInfo as VideoMediaData).Duration);
            double animationAv = animms.Count == 0 ? 0 : animms.Average(p => (p.MediaInfo as VideoMediaData).Duration);

            Writer.WriteString("Количество сообщений", count);
            Writer.WriteString("Общее количество медиа", countMedia);
            Writer.WriteString("Количество измененных сообщений", countEdited);
            Writer.WriteString("Количество пересланных сообщений", countForwarded);
            Writer.WriteString("Первое сообщение", first.ToString());
            Writer.WriteString("Последние сообщение", last.ToString());

            Writer.WriteString("Средний рамер изображений", string.Format("W: {0:.0}.W:{1:0.}({2:0.} pixels)", widhtAv, heightAv, widhtAv * heightAv));
            Writer.WriteString("Средняя длина войсов", string.Format("{0:.00}s", voiceAv));
            Writer.WriteString("Средняя длина видео", string.Format("{0:.00}s", videoAv));
            Writer.WriteString("Средняя длина видео-сообщений", string.Format("{0:.00}s", videoMessAv));
            Writer.WriteString("Средняя длина гифок", string.Format("{0:.00}s", animationAv));
            Writer.WriteString("Самый популярный стикер (его смайлик)", string.Format("{0} ({1} раз)", mostStricker.Key, mostStricker.Count()) ?? "");

            InnerEnd();
        }
コード例 #6
0
        protected override void InnerRun()
        {
            InnerEnd();
            var users   = Writer.chat.Messages.GroupBy(p => p.From).OrderByDescending(p => p.Count() / (float)Writer.chat.Messages.Count());
            int counter = 0;

            Writer.WriteString();
            Writer.WidhtOffset = 2;

            var start = Writer.Offset;

            Writer.Width = 24;
            Writer.WriteString(
                fill: Color.White,
                font: new Font("Tahoma", 12, FontStyle.Bold),
                foreColor: Color.Black,
                widhts: new int[]
            {
                20,
                21,
                21,
                21,
                11,
                18,
                13,
                13,
                13,
                13,
                13,
                13,
                13,
                13,
                13,
                13,
                13,
                13,
            },
                values: new string[]
            {
                "Имя",
                "Первое с-ние",
                "Последние с-ние",
                "В чате",
                "Сообщений",
                "Измененных с-ний",
                "% всех с-ний",
                "Изображений",
                "Войсов",
                "Видосов",
                "Гифок",
                "Аудио",
                "Файлов",
                "Видео с-ний",
                "Стикеров",
                "Ссылок",
                "С-ний в день"
            });

            foreach (var item in users)
            {
                CurrentStep = counter++ / users.Count();

                DateTime first = item.First().Date;
                DateTime last  = item.Last().Date;

                Writer.WriteString(
                    string.IsNullOrEmpty(item.Key) ? "[SERVICE_MSG]" : item.Key,
                    first.ToString(),
                    last.ToString(),
                    ExcelWriter.ToPrettyFormat(last - first),
                    item.Count().ToString(),
                    item.Count(p => p.IsEdited).ToString(),
                    string.Format("{0:0.##}%", item.Count() / (float)Writer.chat.Messages.Count() * 100),
                    item.Count(p => p.IsPhoto).ToString(),
                    item.Count(p => p.IsVoice).ToString(),
                    item.Count(p => p.IsVideo).ToString(),
                    item.Count(p => p.IsGIF).ToString(),
                    item.Count(p => p.IsAudio).ToString(),
                    item.Count(p => p.IsFile).ToString(),
                    item.Count(p => p.IsVideoMessage).ToString(),
                    item.Count(p => p.IsSticker).ToString(),
                    item.Sum(p => p.HasLinks ? p.Links.Count : 0).ToString(),
                    string.Format("{0:0.##}", item.Count() / (last - first).TotalDays));
            }

            {
                CurrentStep = counter++ / users.Count();

                DateTime first = Writer.chat.Messages.First().Date;
                DateTime last  = Writer.chat.Messages.Last().Date;

                Writer.WriteString(
                    "TOTAL",
                    first.ToString(),
                    last.ToString(),
                    ExcelWriter.ToPrettyFormat(last - first),
                    Writer.chat.Messages.Count().ToString(),
                    Writer.chat.Messages.Count(p => p.IsEdited).ToString(),
                    string.Format("{0:0.##}%", Writer.chat.Messages.Count() / (float)Writer.chat.Messages.Count() * 100),
                    Writer.chat.Messages.Count(p => p.IsPhoto).ToString(),
                    Writer.chat.Messages.Count(p => p.IsVoice).ToString(),
                    Writer.chat.Messages.Count(p => p.IsVideo).ToString(),
                    Writer.chat.Messages.Count(p => p.IsGIF).ToString(),
                    Writer.chat.Messages.Count(p => p.IsAudio).ToString(),
                    Writer.chat.Messages.Count(p => p.IsFile).ToString(),
                    Writer.chat.Messages.Count(p => p.IsVideoMessage).ToString(),
                    Writer.chat.Messages.Count(p => p.IsSticker).ToString(),
                    Writer.chat.Messages.Sum(p => p.HasLinks ? p.Links.Count : 0).ToString(),
                    string.Format("{0:0.##}", Writer.chat.Messages.Count() / (last - first).TotalDays));
            }
        }