csharp 基于马尔可夫链的简单文本生成器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp 基于马尔可夫链的简单文本生成器相关的知识,希望对你有一定的参考价值。

using System;
using System.Collections.Generic;
using System.Linq;

static class Program
{
    static void Main(string[] args)
    {
        var input = "foo bar baz foo bar qux".Split();

        var table = input.Zip(input.Skip(1), Tuple.Create)
                         .Zip(input.Skip(2), Tuple.Create)
                         .ToLookup(p => p.Item1, p => p.Item2);

        Func<Tuple<string, string>, Random, IEnumerable<string>> generate = null;
        generate = (key, random) => new[] { key.Item1 }.Concat(key.Item2 == null ? new string[] { } : new[] { 0 }.SelectMany(_ => generate(Tuple.Create(key.Item2, table[key].ElementAtOrDefault(random.Next(table[key].Count()))), random)));

        Console.WriteLine(String.Join(" ", generate(table.First().Key, new Random()).Take(50)));
    }
}

以上是关于csharp 基于马尔可夫链的简单文本生成器的主要内容,如果未能解决你的问题,请参考以下文章

r 在R中生成带有马尔可夫链的文本

在 Swift 中使用马尔可夫链生成文本

蒙特卡罗方法生成指定状态空间下对应长度的马尔可夫链--MATLAB源程序

蒙特卡罗方法生成指定状态空间下对应长度的马尔可夫链--MATLAB源程序

应用随机过程03:马尔可夫链的状态

应用随机过程02:马尔可夫链及其概率分布