public MarkovTextModel(string text, int order) { Root = new MarkovNode(StartChar); // Currently building only an order 0 model foreach (char c in text) { ++Root.Count; Root.AddChild(c); } // Add the stop character Root.AddChild(EndChar); }
public void AddString(string s) { var input = s.Split(' '); // Naive method for (int iStart = 0; iStart < input.Length; ++iStart) { // Get the order 0 node MarkovNode parent = Root.AddChild(input[iStart]); // Now add N-grams starting with this node for (int i = 1; i <= ModelOrder && i + iStart < input.Length; ++i) { MarkovNode child = parent.AddChild(input[iStart + i]); parent = child; if (parent.word.Last() == '.') { parent.AddChild(EndChar.ToString()); } } } }
public void AddString(string s) { // Construct the string that will be added. StringBuilder sb = new StringBuilder(s.Length + 2 * (ModelOrder)); // Order+1 Start characters. The string to add. Order+1 Stop characters. sb.Append(StartChar, ModelOrder); sb.Append(s); sb.Append(EndChar, ModelOrder); // Naive method for (int iStart = 0; iStart < sb.Length; ++iStart) { // Get the order 0 node MarkovNode parent = Root.AddChild(sb[iStart]); // Now add N-grams starting with this node for (int i = 1; i <= ModelOrder && i + iStart < sb.Length; ++i) { MarkovNode child = parent.AddChild(sb[iStart + i]); parent = child; } } }