Exemple #1
0
        public string generateText(int length)
        {
            string text     = "";
            Random rand     = new Random();
            int    num      = rand.Next(0, ngrams.Count - 1);
            ngram  currGram = ngrams[num];

            if (usesWords)
            {
                text += string.Join(" ", currGram.gram);
                for (int i = 0; i < length - size; i++)
                {
                    num   = rand.Next(0, currGram.nextCount());
                    text += " " + currGram.nextGet(num);
                    string[]      words    = text.Split(new string[] { " " }, StringSplitOptions.None);
                    List <string> listGram = new List <string>();
                    for (int j = words.Length - size; j < words.Length; j++)
                    {
                        listGram.Add(words[j]);
                    }
                    string[] nextGram = listGram.ToArray();
                    currGram = ngrams.Find(x => Enumerable.SequenceEqual(nextGram, x.gram));
                    if (currGram == null)
                    {
                        num      = rand.Next(0, ngrams.Count - 1);
                        currGram = ngrams[num];
                    }
                }
            }
            else
            {
                text += string.Join("", currGram.gram);
                for (int i = 0; i < length - size; i++)
                {
                    num   = rand.Next(0, currGram.nextCount());
                    text += currGram.nextGet(num);
                    string        stringGram = text.Substring(text.Length - size);
                    List <string> listGram   = new List <string>();
                    for (int j = 0; j < stringGram.Length; j++)
                    {
                        listGram.Add(stringGram[j].ToString());
                    }
                    string[] nextGram = listGram.ToArray();
                    currGram = ngrams.Find(x => Enumerable.SequenceEqual(nextGram, x.gram));
                    if (currGram == null)
                    {
                        num      = rand.Next(0, ngrams.Count - 1);
                        currGram = ngrams[num];
                    }
                }
            }
            return(text);
        }
Exemple #2
0
        public void createNgrams(int size, string inputText)
        {
            inputText = inputText.ToLower();
            inputText = inputText.Replace("„", "");
            inputText = inputText.Replace("“", "");
            inputText = inputText.Replace("\n", "");
            List <string> gram = new List <string>();

            if (usesWords)
            {
                string[] words = inputText.Split(new string[] { " " }, StringSplitOptions.None);
                for (int i = 0; i < words.Length - size; i++)
                {
                    for (int j = 0; j < size; j++)
                    {
                        gram.Add(words[i + j]);
                    }
                    string   nextString = words[i + size];
                    string[] gramA      = gram.ToArray();
                    ngram    foundGram  = ngrams.Find(x => Enumerable.SequenceEqual(gramA, x.gram));
                    if (foundGram != null)
                    {
                        stringNum foundString = foundGram.nextStrings.Find(x => x.str.Equals(nextString));
                        if (foundString != null)
                        {
                            foundString.number += 1;
                        }
                        else
                        {
                            foundGram.nextStrings.Add(new stringNum(nextString));
                        }
                    }
                    else
                    {
                        ngrams.Add(new ngram(gramA, nextString));
                    }
                    gram.Clear();
                }
            }
            else
            {
                for (int i = 0; i < inputText.Length - size - 1; i++)
                {
                    string gramS      = inputText.Substring(i, size);
                    string nextString = inputText.Substring(i + size, 1);
                    for (int j = 0; j < gramS.Length; j++)
                    {
                        gram.Add(gramS[j].ToString());
                    }
                    string[] gramA     = gram.ToArray();
                    ngram    foundGram = ngrams.Find(x => Enumerable.SequenceEqual(gramA, x.gram));
                    if (foundGram != null)
                    {
                        stringNum foundString = foundGram.nextStrings.Find(x => x.str.Equals(nextString));
                        if (foundString != null)
                        {
                            foundString.number += 1;
                        }
                        else
                        {
                            foundGram.nextStrings.Add(new stringNum(nextString));
                        }
                    }
                    else
                    {
                        ngrams.Add(new ngram(gramA, nextString));
                    }
                    gram.Clear();
                }
            }
        }