2011-05-16 51 views
6

我看到了使用Markov chains用于基于源数据随机单词的例子很多,但他们往往似乎有点过于机械和抽象给我。我正在努力开发一个更好的。建立一个更现实的随机单词生成器?

我认为问题的一部分是,他们完全依赖于对整体统计发生,而忽视词的倾向开始在某些方面结束。例如,如果您使用前1000名婴儿名称作为源数据,则字母J的整体比较少见,但它是起始与第二个最常用的字母。或者,如果您使用的是拉丁语源数据,那么类似-um和-us这样的单词结尾将是常见的结尾,但如果您认为所有对都相同,则不常见。

所以,我基本上是试图把一个马尔可夫链,基于单词发电机,考虑到在源数据字启动方式和结束。

从概念上讲,这是有道理的我,但我无法弄清楚如何从软件的角度实现这一点。我试图把一个小小的PHP工具放在一起,它允许你放入源数据(例如,一个1000字的列表),然后它将生成各种随机的单词,包括真实的开始,中间和结尾。 (相对于大多数基于马尔可夫字发生器,其只是基于对所述统计总体发生。)

我也想与由源数据确定字长,如果可能这样做;即随机生成的单词的长度分解应该与源数据的长度分解大致相同。

任何想法,将大规模感激!谢谢。

回答

3

如果你认为“词语之间的空间”是一个符号,那么关于不尊重共同的开始和结尾的部分实际上并不是真实的 - 常见的开始将具有“词之间的空格”之后的高频率,并且普通的结尾将具有高的“词之间的空间”之前的频率。正确的单词长度也会自然或多或少地平息 - 在转换为“单词之间的空格”符号之前,您输出的平均字母数应等于训练数据中每个单词的平均字母数,但我脑海中的后面告诉我分配可能会关闭。

+0

谢谢,霍布斯!这实际上是我终于找到的解决方案。我意识到一个词的开始和结尾本身可能是事物,所以我分配了一个角色来表示它们。之后事情很好地落到了地方。 :-) – 2011-05-17 04:05:25