构建一个更逼真的随机单词生成器


Building a more realistic random word generator?

我见过很多使用马尔可夫链根据源数据生成随机单词的例子,但对我来说,它们往往显得有点过于机械和抽象。我正在尝试开发一个更好的。

我认为部分问题在于它们完全依赖于对的整体统计出现,而忽略了单词以某些方式开始和结束的趋势。 例如,如果您使用前 1000 个婴儿名字作为源数据,则字母 J 总体上相对较少,但它是名字开头的第二常用字母。 或者,如果您使用的是拉丁语源数据,则像 -um 和 -us 这样的词尾将是常见的结尾,但如果您认为所有对都相同,则不会那么常见。

所以,我基本上是在尝试建立一个基于马尔可夫链的单词生成器,它考虑了单词在源数据中的开始和结束方式。

概念上讲,这对我来说是有意义的,但我无法弄清楚如何从软件角度实现这一点。我正在尝试将一个小的PHP工具放在一起,该工具允许您放入源数据(例如,1000个单词的列表),然后它将从中生成各种具有现实开头,中间和结尾的随机单词。(与大多数基于马尔可夫的词生成器相反,后者仅基于整体对的统计出现。

如果可能的话,我还想用由源数据确定的字长来做这件事;即,随机生成的单词的长度细分应该与源数据的长度细分大致相同。

任何想法将不胜感激!谢谢。

如果你认为"单词之间的空间"是一个符号,那么关于不尊重共同开头和结尾的部分实际上并不成立 - 公共开头在"单词之间的空间"之后会有高频,公共结尾在"单词之间的空间"之前会有高频。正确的单词长度也或多或少自然地解决了这个问题——在过渡到"单词之间的空间"符号之前,你输出的平均字母数应该等于训练数据中每个单词的平均字母数,尽管我脑海中的某个东西告诉我分布可能是错误的。