示例#1
0
        public static async Task MainAsync(string[] args)
        {
            Console.WriteLine("Starting...");

            Console.WriteLine("Initialising Songs Repo");
            DocumentDBRepository <SongRecord> .Initialize();

            Console.WriteLine("Getting songs out of db");
            var songs = await DocumentDBRepository <SongRecord> .GetItemsAsync(s => s.LyricsDownloaded == true, -1);

            Console.WriteLine("=============================================");
            Console.WriteLine("Processing All Songs");
            var allLyrics = GetLyrics(songs);

            var allMarkovChain = FirstOrderMarkov.CreateChain("MarkovChainOrder1", allLyrics);

            var allMarkovChain2 = SecondOrderMarkov.CreateChain("MarkovChainOrder2", allLyrics);

            var lineLengthDistribution = WordsPerline.GetLineLengthCount(allLyrics);

            var allCleanLyrics = GetLyrics(songs, null, allowProfanities: false);

            var allMarkovChainClean = FirstOrderMarkov.CreateChain("MarkovChainOrder1Clean", allCleanLyrics);

            var allMarkovChain2Clean = SecondOrderMarkov.CreateChain("MarkovChainOrder2Clean", allCleanLyrics);

            // Save to to blob storage
            Console.WriteLine("Saving order 1 to blob");
            await BlobRepository <MarkovChain> .Create(allMarkovChain.id, allMarkovChain);

            Console.WriteLine("Saving order 2 to blob");
            await BlobRepository <MarkovChain> .Create(allMarkovChain2.id, allMarkovChain2);

            Console.WriteLine("Saving line length distribution");
            await BlobRepository <LineLengthDistribution> .Create("LineLengthDistribution", lineLengthDistribution);

            Console.WriteLine("Saving clean order 1 to blob");
            await BlobRepository <MarkovChain> .Create(allMarkovChainClean.id, allMarkovChainClean);

            Console.WriteLine("Saving clean order 2 to blob");
            await BlobRepository <MarkovChain> .Create(allMarkovChain2Clean.id, allMarkovChain2Clean);

            /// Other Genres
            var genres = (Genre[])Enum.GetValues(typeof(Genre));

            foreach (var genre in genres)
            {
                Console.WriteLine("=============================================");
                Console.WriteLine($"Processing Genre: {genre.ToString()}");
                var genreLyrics    = GetLyrics(songs, genre);
                var chain1         = FirstOrderMarkov.CreateChain($"{genre.ToString()}MarkovChainOrder1", genreLyrics);
                var chain2         = SecondOrderMarkov.CreateChain($"{genre.ToString()}MarkovChainOrder2", genreLyrics);
                var lineLengthDist = WordsPerline.GetLineLengthCount(genreLyrics);

                var cleanGenreLyrics = GetLyrics(songs, genre, allowProfanities: false);
                var cleanChain1      = FirstOrderMarkov.CreateChain($"{genre.ToString()}MarkovChainOrder1Clean", cleanGenreLyrics);
                var cleanChain2      = SecondOrderMarkov.CreateChain($"{genre.ToString()}MarkovChainOrder2Clean", cleanGenreLyrics);

                Console.WriteLine("Saving order 1 to blob");
                await BlobRepository <MarkovChain> .Create(chain1.id, chain1);

                Console.WriteLine("Saving order 2 to blob");
                await BlobRepository <MarkovChain> .Create(chain2.id, chain2);

                Console.WriteLine("Saving line length distribution");
                await BlobRepository <LineLengthDistribution> .Create($"{genre.ToString()}LineLengthDistribution", lineLengthDist);

                Console.WriteLine("Saving clean order 1 to blob");
                await BlobRepository <MarkovChain> .Create(cleanChain1.id, cleanChain1);

                Console.WriteLine("Saving clean order 2 to blob");
                await BlobRepository <MarkovChain> .Create(cleanChain2.id, cleanChain2);
            }
        }