/// <summary>
        /// Creates a simple phrase with a given number of words.
        /// </summary>
        /// <param name="words">The words.</param>
        /// <param name="wordLengthDistribution">The word length distribution.</param>
        /// <returns></returns>
        public SimplePhrase CreateSimplePhrase(int words, Dictionary <int, double> wordLengthDistribution)
        {
            SimplePhrase sp = new SimplePhrase();

            for (int i = 0; i < words; i++)
            {
                SimpleWord sw = GetSimpleWord(wordLengthDistribution);
                sp.Parts.Add(sw);

                if (i < words - 1)
                {
                    int             iInnerPunctuation = _randomizerInnerPunctuation.Random();
                    PunctuationSign ps = new PunctuationSign();
                    ps.Value = _innerPunctuation.Keys.ToArray()[iInnerPunctuation];
                    sp.Parts.Add(ps);
                }
            }

            int             iFinalPunctuation = _randomizerFinalPunctuation.Random();
            PunctuationSign psFinal           = new PunctuationSign();

            psFinal.Value = _finalPunctuation.Keys.ToArray()[iFinalPunctuation];

            sp.Parts.Add(psFinal);

            return(sp);
        }
        public SimpleWord GetSimpleWord(Dictionary <int, double> dctLengthDistribution)
        {
            DiscreteRandomizer randomizer = new DiscreteRandomizer(dctLengthDistribution.Values.ToArray());
            int nIndex  = randomizer.Random();
            int nLength = dctLengthDistribution.Keys.ToArray()[nIndex];

            return(GetSimpleWord(nLength));
        }
        /// <summary>
        /// Creates a simple phrase.
        /// </summary>
        /// <param name="numberOfWordDistribution">The distribution of word number in a phrase.</param>
        /// <param name="wordLengthDistribution">The distribution of the length of a phrase.</param>
        /// <returns></returns>
        public SimplePhrase CreateSimplePhrase
        (
            Dictionary <int, int> numberOfWordDistribution,
            Dictionary <int, int> wordLengthDistribution
        )
        {
            DiscreteRandomizer randomizer = new DiscreteRandomizer(numberOfWordDistribution.Values.ToArray());
            int nIndex = randomizer.Random();
            int nWords = numberOfWordDistribution.Keys.ToArray()[nIndex];

            return(CreateSimplePhrase(nWords, wordLengthDistribution));
        }
        public Syllable GetSyllable()
        {
            int          iSyllable    = _randomizerSyllables.Random();
            SyllabicType syllabicType = (SyllabicType)iSyllable;

            switch (syllabicType)
            {
            case SyllabicType.V:
                return(new Syllable(syllabicType, GetVowel()));

            case SyllabicType.CV:
                return(new Syllable(syllabicType, GetConsonant() + GetVowel()));

            case SyllabicType.VC:
                return(new Syllable(syllabicType, GetVowel() + GetConsonant()));

            case SyllabicType.CVC:
                return(new Syllable(syllabicType, GetConsonant() + GetVowel() + GetConsonant()));

            case SyllabicType.Unknown:
            default:
                return(new Syllable());
            }
        }
        protected string GetConsonant()
        {
            int iRandom = _randomizerConsonants.Random();

            return(_consonants.Keys.ToArray()[iRandom]);
        }
        protected string GetVowel()
        {
            int iRandom = _randomizerVowels.Random();

            return(_vowels.Keys.ToArray()[iRandom]);
        }