Beispiel #1
0
        private static string MarkovResponse(int order, IEnumerable <string> lines)
        {
            var chain = new MarkovChain <string>(order);

            foreach (var line in lines)
            {
                chain.Add(line.Split());
            }

            var response = string.Join(" ", chain.Chain());

            if (response != "")
            {
                return(response);
            }
            var count = 0;

            while (response == "")
            {
                response = string.Join(" ", chain.Chain());
                if (count++ > 10)
                {
                    return("Chaining failed!");
                }
            }
            return(response);
        }
Beispiel #2
0
        static string GenerateQuote()
        {
            Random rand = new Random();

            int order = 1;

            if (rand.NextDouble() > 0.5)
            {
                // Add a small chance of a higher order chain. The higher order chains
                // produce output that is a lot closer to the source text. Too close
                // to have on all the time.
                order = 2;
            }

            Console.WriteLine("order " + order);

            MarkovChain <string> chain = GetChain(order);

            string generatedQuote = string.Join(" ", chain.Chain(rand));

            if (generatedQuote.Length > 280)
            {
                return(GenerateQuote());
            }
            else
            {
                return(generatedQuote);
            }
        }
Beispiel #3
0
        static void Main(string[] args)
        {
            var docs      = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            var dir       = new DirectoryInfo(docs);
            var chain     = new MarkovChain <string>(3);
            var nameChain = new MarkovChain <char>(3);

            foreach (var file in dir.EnumerateFiles())
            {
                chain.Add(File.ReadAllText(file.FullName).Split(' '));
                nameChain.Add(file.Name);
            }

            var rand = new Random();

            Directory.CreateDirectory(docs + "\\ImportantFiles");

            for (int i = 0; i < 10; i++)
            {
                var filePath = (docs + "\\ImportantFiles\\" + new String(nameChain.Chain(rand).ToArray()));

                Console.WriteLine(filePath);

                using (FileStream fs = File.Create(filePath))
                {
                    Byte[] info = new UTF8Encoding(true).GetBytes(chain.Chain(rand).Aggregate((a, b) => a + " " + b));
                    // Add some information to the file.
                    fs.Write(info, 0, info.Length);
                }
            }

            Console.WriteLine("Press any key to exit");
            Console.ReadKey();
        }
Beispiel #4
0
        public async Task TalkAsync([Summary("The user to make talk")] string user)
        {
            var messages = _messageRepository
                           .Where(x => x.User.ToLower() == user.ToLower())
                           .ToArray();

            if (messages.Length < 25)
            {
                await ReplyAsync($"{user} hasn't said enough to make them talk yet");

                return;
            }

            var chain = new MarkovChain <string>(1);

            foreach (var message in messages)
            {
                var split = message.Content.Split(' ');

                if (split.Length >= 5)
                {
                    chain.Add(split);
                }
            }

            await ReplyAsync(string.Join(" ", chain.Chain()));
        }
Beispiel #5
0
        public async Task InitTweetViewModel()
        {
            _auth = _linqToTwitterAuthorizer.GetAuthorizer(consumerKey, consumerSecret);
            await _auth.AuthorizeAsync();

            //ht--tps://github.com/JoeMayo/LinqToTwitter/wiki/Querying-the-User-Timeline
            using (var ctx = new TwitterContext(_auth))
            {
                List <Status> tweets =
                    await
                        (from tweet in ctx.Status
                        where tweet.Type == StatusType.User &&
                        tweet.ScreenName == "realDonaldTrump" &&
                        tweet.Count == 200 /*MaxTweetsToReturn*/ &&
                        tweet.SinceID == 1 /*sinceID*/ &&
                        tweet.TweetMode == TweetMode.Extended
                        select tweet)
                    .ToListAsync();

                Tweets =
                    (from tweet in tweets
                     select new Tweet
                {
                    StatusID = tweet.StatusID,
                    ScreenName = tweet.User.ScreenNameResponse,
                    Text = tweet.FullText,
                    ImageUrl = tweet.User.ProfileImageUrl
                })
                    .ToList();
            }
            var chain = new MarkovChain <string>(1);

            foreach (var t in Tweets)
            {
                chain.Add(t.Text.Split(' '), 1);
                //foreach(var s in t.Text.Split(' '))
                //{
                //    chain.Add(s, 1);
                //}
            }
            Tweets.Add(new Tweet()
            {
                Text = "--------------"
            });
            //String testOutput = String.Empty;
            var rand = new Random();

            for (int i = 0; i < 10; i++)
            {
                //var word = new string(chain.Chain(rand).ToArray());
                //testOutput += " " + word;
                var sentence = string.Join(" ", chain.Chain(rand));
                Tweets.Add(new Tweet()
                {
                    Text = sentence
                });
            }
            //Tweets.Add(new Tweet() { Text = testOutput });
        }
        static string GetName()
        {
            MarkovChain <char> chain = GetChain();

            string name = new string(chain.Chain().ToArray());

            return(name);
        }
Beispiel #7
0
        public string GetRandomStatement(int minimumWords = 10)
        {
            var sb = new StringBuilder();

            while (sb.ToString().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Length < minimumWords)
            {
                sb.Append(string.Join(" ", _chain.Chain(_rand)) + " ");
            }

            return(sb.ToString().Trim());
        }
Beispiel #8
0
        static void Generate(MarkovChain <string> chain)
        {
            var rand = new Random();

            while (true)
            {
                var sentence = chain.Chain(rand);
                Console.WriteLine(string.Join(" ", sentence));
                Console.ReadLine();
            }
        }
Beispiel #9
0
        public void GenerateTweets(Int32 number)
        {
            var rand = new Random(DateTime.Now.Millisecond);

            GeneratedTweets = new List <String>();
            for (int i = 0; i < number; i++)
            {
                var sentence = string.Join(" ", _chain.Chain(rand));
                GeneratedTweets.Add(sentence);
            }
        }
Beispiel #10
0
        internal string Generate()
        {
            List <string> chainWords = _chain.Chain().ToList();
            /* BUG: Sometimes the chain would be "". Unsure if it should be fixed. */
            var chain = chainWords.Aggregate("", (current, word) => current + (word + " "));

            if (chain == "")
            {
                return(Generate()); // C# feels so yucky after writing Go for so long
            }
            return(chain);
        }
Beispiel #11
0
        public Task Execute(ITriggerArguments arguments, ISlackConnection connection, SlackChatHub chatHub, SlackerContext context)
        {
            if (arguments == null || arguments.Arguments.Length != 1)
            {
                connection.Say(new BotMessage
                {
                    ChatHub = chatHub,
                    Text    = "Usage: !talk <user>"
                });

                return(Task.CompletedTask);
            }

            var user     = arguments.Arguments[0];
            var messages = context.Messages.Where(x => x.User == user && x.Content.Length > 10);

            if (!messages.Any())
            {
                connection.Say(new BotMessage
                {
                    ChatHub = chatHub,
                    Text    = $"There aren't enough messages by {arguments.Arguments[0]} to go on"
                });

                return(Task.CompletedTask);
            }

            var chain = new MarkovChain <string>(1);

            foreach (var message in messages)
            {
                chain.Add(message.Content.Split(new[] { ' ' }), 1);
            }

            var random = new Random(DateTime.UtcNow.Millisecond);

            var stringBuilder = new StringBuilder(GetRandomMessageStart(user, random));

            stringBuilder.Append(">" + string.Join(" ", chain.Chain(random)));

            connection.Say(new BotMessage
            {
                ChatHub = chatHub,
                Text    = stringBuilder.ToString()
            });

            return(Task.CompletedTask);
        }
Beispiel #12
0
        // в ответе должно быть # + Hexagram + The Name + The Judgment (прямо из соотв колонок включая значок из колонки Hexagram)

        public static void generateRandomDailyPhraseUsingMarkov()
        {
            var json = File.ReadAllText("C:\\Files\\Dev\\Twittor\\Twittor\\Twittor\\dbSimple.json");

            Rootobject divination = JsonConvert.DeserializeObject <Rootobject>(json);

            var chain = new MarkovChain <string>(1);

            for (int i = 1; i < 4; i++)
            {
                chain.Add(new[] { divination.Divinations[i].Id, divination.Divinations[i].Hexagram }, 1);
            }

            var rand = new Random();

            for (int i = 0; i < 20; i++)
            {
                var sentence = string.Join(" ", chain.Chain(rand));
                Console.WriteLine("Sentence#" + i + " " + sentence);
            }
        }
Beispiel #13
0
        public IEnumerable <string> NextLines(int lineCount)
        {
            var sentences = new List <string>();

            for (var i = 0; i < lineCount; i++)
            {
                // Get a random-walk chain and turn into a valid sentence
                var wordChain = _markovChain.Chain(_random);
                var sentence  = ChainToSentence(wordChain);

                // Ensure first sentence does not start with conjunction
                if (sentence.FirstWord().IsConjunction())
                {
                    i--;
                    continue;
                }

                // Ensure last sentence ends with full stop
                if (i == 9 && !sentence.EndsWith("."))
                {
                    // If last character is a punctuation mark, convert to full stop, append otherwise
                    var lastIndex = sentence.Length - 1;
                    var lastChar  = sentence[lastIndex];

                    if (lastChar.IsPunctuation())
                    {
                        sentence = sentence.Remove(lastIndex) + '.';
                    }
                    else
                    {
                        sentence += '.';
                    }
                }

                sentences.Add(sentence);
            }

            return(sentences);
        }
Beispiel #14
0
        public async Task Hey([Remainder] string message = "hey")
        {
            var messages = new List <string>();

            // If sentences for fred do not exist for the server, generate them
            if (!File.Exists($@"{Context.Guild.Id}\{FredID}.txt"))
            {
                messages = await GenerateSentenceFile(FredID);
            }
            else
            {
                messages = File.ReadAllLines($@"{Context.Guild.Id}\{FredID}.txt").ToList();
            }

            var chain            = new MarkovChain <string>(3);
            var tokenizer        = new EnglishRuleBasedTokenizer(false);
            var sentenceDetector = new EnglishMaximumEntropySentenceDetector("EnglishSD.nbin");

            messages.ForEach(msg =>
            {
                var sentences = sentenceDetector.SentenceDetect(msg);
                foreach (var sentence in sentences)
                {
                    var tokens = tokenizer.Tokenize(sentence);
                    chain.Add(tokens, tokens.Length);
                }
            });

            var rand = new Random();

            var reply = string.Join(" ", chain.Chain(rand));

            if (string.IsNullOrWhiteSpace(reply))
            {
                return;
            }

            await Context.Channel.SendMessageAsync(reply);
        }
Beispiel #15
0
        public async Task ImpersonateMarkov(CommandContext ctx, DiscordMember member, string[] usertext)
        {
            // Start the markov chains
            var chain = new MarkovChain <string>(1);

            foreach (var entry in usertext)
            {
                var splitentry = entry.Split(" ");
                int currWeight = 1;
                for (double i = 0; i < splitentry.Length; i += 1)
                {
                    currWeight++;
                }
                if (currWeight > 10)
                {
                    currWeight = 10;
                }
                chain.Add(splitentry, currWeight);
            }
            var rand = new Random();

            string sentences = "";

            for (int i = 0; i < 5; i++)
            {
                sentences += "```\n" + string.Join(" ", chain.Chain(rand)).Replace('`', ' ').Replace('\n', ' ') + "```";
            }
            if (member == null)
            {
                await ctx.RespondAsync($"`These messages were generated by Markov Chains`\nHere are some examples of what all collected data sounds like ({usertext.Length} data points):\n{sentences}");
            }
            else
            {
                await ctx.RespondAsync($"`These messages were generated by Markov Chains`\nHere are some examples of what {member.Username} sounds like ({usertext.Length} data points):\n{sentences}");
            }
            return;
        }
Beispiel #16
0
        async Task HandleMessage(SocketMessage msg)
        {
            if (_chain == null)
            {
                return;
            }
            if (msg.Author.Id == _client.CurrentUser.Id)
            {
                return;
            }
            if (msg.Channel.Id != LimitedToChannel)
            {
                return;
            }
            if (string.IsNullOrWhiteSpace(msg.Content))
            {
                return;
            }

            Console.WriteLine($"{msg.Author.Username}: {msg.Content}");

            var sentence = string.Join(" ", _chain.Chain(_rand));
            await msg.Channel.SendMessageAsync(sentence);
        }
Beispiel #17
0
        public async Task Generate(IGuildUser user, int count = 1, string language = "eng", int depth = 2)
        {
            if (!File.Exists($"{user.Id}_{language}.txt"))
            {
                return;
            }

            var messages = File.ReadAllLines($"{user.Id}_{language}.txt").ToList();

            var chain            = new MarkovChain <string>(depth);
            var tokenizer        = new EnglishRuleBasedTokenizer(false);
            var sentenceDetector = new EnglishMaximumEntropySentenceDetector("EnglishSD.nbin");

            messages.ForEach(msg =>
            {
                var sentences = sentenceDetector.SentenceDetect(msg);
                foreach (var sentence in sentences)
                {
                    var tokens = tokenizer.Tokenize(sentence);
                    chain.Add(tokens, tokens.Length);
                }
            });
            var rand          = new Random();
            var messageString = "";

            for (int i = 0; i < count; i++)
            {
                var c = chain.Chain(rand);
                messageString += ">> " + string.Join(" ", c);
                if (count > 1 && i < count - 1)
                {
                    messageString += "\n";
                }
            }
            await Context.Channel.SendMessageAsync(messageString);
        }
        public async Task Markov(AdaCommandContext ctx)
        {
            var gld = ctx.Guild;
            var chn = ctx.Channel;
            var msg = ctx.Message;
            var usr = ctx.User;

            var chain = new MarkovChain <string>(1);
            var rnd   = new Random();
            var mnt   = (string)null;

            var xmu = msg.MentionedUserIds.Select(xid => gld.GetUserAsync(xid).GetAwaiter().GetResult());
            var xmr = msg.MentionedRoleIds.Select(xid => gld.GetRole(xid));
            var xmc = msg.MentionedChannelIds.Select(xid => gld.GetChannelAsync(xid).GetAwaiter().GetResult());

            if (xmu.Count() == 0 && xmr.Count() == 0 && xmc.Count() == 0)
            {
                throw new ArgumentException("Missing mention.");
            }
            else if (xmu.Count() > 0)
            {
                var mus = xmu.First();
                mnt = mus.Mention;
                var chs  = xmc;
                var maxm = 100;
                var lstm = -1;
                var msgs = new List <IMessage>(maxm);
                var msgt = (IEnumerable <IMessage>)null;
                while (msgs.Count < maxm && lstm != 0)
                {
                    foreach (var xch in chs)
                    {
                        var xcn = xch as SocketTextChannel;
                        if (msgs.Count == 0)
                        {
                            msgt = await xcn.GetMessagesAsync(100).Flatten();

                            msgs.AddRange(msgt.Where(xmsg => xmsg.Author != null && xmsg.Author.Id == mus.Id));
                        }
                        if ((await xcn.GetMessagesAsync(msgs.OrderByDescending(xm => xm != null ? xm.Timestamp : DateTimeOffset.MinValue).FirstOrDefault(), Direction.Before, Math.Min(100, maxm - msgs.Count)).Flatten()).Count() > 0)
                        {
                            lstm = Math.Max(msgt.Count(), lstm);
                            msgs.AddRange(msgt.Where(xmsg => xmsg.Author != null && xmsg.Author.Id == mus.Id));
                        }
                    }
                }
                foreach (var xmsg in msgs)
                {
                    chain.Add(xmsg.Content.Split(' '), 1);
                }
            }
            else if (xmr.Count() > 0)
            {
                var mrl = xmr.First();
                mnt = mrl.Mention;
                var chs  = xmc;
                var maxm = 100;
                var lstm = -1;
                var msgs = new List <IMessage>(maxm);
                var msgt = (IEnumerable <IMessage>)null;
                while (msgs.Count < maxm && lstm != 0)
                {
                    foreach (var xch in chs)
                    {
                        var xcn = xch as SocketTextChannel;
                        if (msgs.Count == 0)
                        {
                            msgt = await xcn.GetMessagesAsync(100).Flatten();

                            msgs.AddRange(msgt.Where(xmsg => xmsg.Author as SocketGuildUser != null && (xmsg.Author as SocketGuildUser).RoleIds.Contains(mrl.Id)));
                        }
                        if ((await xcn.GetMessagesAsync(msgs.OrderByDescending(xm => xm != null ? xm.Timestamp : DateTimeOffset.MinValue).FirstOrDefault(), Direction.Before, Math.Min(100, maxm - msgs.Count)).Flatten()).Count() > 0)
                        {
                            lstm = Math.Max(msgt.Count(), lstm);
                            msgs.AddRange(msgt.Where(xmsg => xmsg.Author as SocketGuildUser != null && (xmsg.Author as SocketGuildUser).RoleIds.Contains(mrl.Id)));
                        }
                    }
                }
                foreach (var xmsg in msgs)
                {
                    chain.Add(xmsg.Content.Split(' '), 1);
                }
            }
            else if (xmc.Count() > 0)
            {
                var mch = xmc.First() as SocketTextChannel;
                mnt = mch.Mention;
                var maxm = 500;
                var msgs = new IMessage[maxm];
                var msgi = 0;
                var msgt = (IEnumerable <IMessage>)null;
                msgt = await mch.GetMessagesAsync(100).Flatten();

                Array.Copy(msgt.ToArray(), 0, msgs, msgi, msgt.Count());
                while (msgi < maxm && (msgt = await mch.GetMessagesAsync(msgs.OrderByDescending(xm => xm != null ? xm.Timestamp : DateTimeOffset.MinValue).FirstOrDefault(), Direction.Before, Math.Min(100, maxm - msgi)).Flatten()).Count() > 0)
                {
                    Array.Copy(msgt.ToArray(), 0, msgs, msgi, msgt.Count());
                    msgi += msgt.Count();
                }
                foreach (var xmsg in msgs)
                {
                    chain.Add(xmsg.Content.Split(' '), 1);
                }
            }

            var sentence = string.Join(" ", chain.Chain(rnd));
            var embed    = this.PrepareEmbed("Markov Chain", string.Concat("Markov chain of ", mnt, ": ", sentence), EmbedType.Info);
            await chn.SendMessageAsync("", false, embed);
        }
 public String GenerateName()
 {
     return(new String(_chain.Chain(rand.Next()).ToArray()));
 }
Beispiel #20
0
        public static string ReturnMessage()
        {
            string Sentence = string.Join(" ", Chain.Chain(_random));

            return(Sentence);
        }