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); } } }
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++; } }