Example #1
0
 public void Extend(MarkovChain otherChain)
 {
     foreach (var seg in otherChain.Segments)
     {
         if (Segments.ContainsKey(seg.Key))
         {
             MarkovChainSegment.Merge(Segments[seg.Key], seg.Value);
         }
         else
         {
             Segments.Add(seg.Key, seg.Value);
         }
     }
 }
Example #2
0
        public IEnumerable <MarkovChain> BuildSubChains()
        {
            var skip = 1;

            for (var length = this.MaxChainLength - 1; length >= 1; length--)
            {
                MarkovChain tempChain = new MarkovChain(length);
                var         grp       = this.Segments.GroupBy((kv) => new MarkovPrefix(kv.Key.Prefix.Skip(skip)));
                foreach (var SegmentGroup in grp)
                {
                    var prefix = new MarkovPrefix(SegmentGroup.First().Key.Prefix.Skip(skip));
                    MarkovChainSegment newSegment = new MarkovChainSegment("");
                    newSegment.Postfixes.Clear();
                    foreach (var Segment in SegmentGroup)
                    {
                        newSegment = MarkovChainSegment.Merge(newSegment, Segment.Value);
                    }
                    tempChain.Segments.Add(prefix, newSegment);
                }
                yield return(tempChain);

                skip++;
            }
        }