2010-07-30 11 views
4

我知道有几个关于基于大型词典或网页查找的随机词生成的文章。然而,我正在寻找一个可以用来创建没有符号的强密码的单词生成器。我正在寻找的是一种可靠的机制来生成一个给定长度的随机,不可识别的英语单词。如何在.Net中生成随机英语“sounding”字?

字的类型的一个例子是“ratanta”等

是否存在兼容理解音节和因此产生pronouncable输出串的任何算法?我知道某些验证码样式控件会生成这些类型的单词,但我不确定它们是使用算法还是来自大集合。

如果有这种类型的功能的.Net实现,我会很感兴趣知道。

+1

这让我想起了自动化的诅咒生成器。请参阅http://thedailywtf.com/Articles/The-Automated-Curse-Generator.aspx – Jens 2010-07-30 13:26:21

+0

他们是否需要听起来“英语”,还是他们只能说英语? – FrustratedWithFormsDesigner 2010-07-30 13:29:11

+0

@FrustratedWithFormsDesigner,只要这个单词可以发音,并且比真正的随机字符更难忘,任何一种方法都可以。 – 2010-07-30 13:54:40

回答

2

有几件事情可以做:

1)研究英语音节结构,并产生以下这些规则

2)采用马尔可夫链来获得英语语音的统计模型音节。

马尔可夫链上有大量资源,但主要想法是记录在某个特定序列之后存在任何特定字母的概率。例如,在“q”之后,“u”非常有可能;在“k”之后,“q”非常不可能(这使用1长度的马尔可夫链)。或者在“th”之后,“e”很可能(这使用2长度马尔可夫链)。

如果你去音节模型路线,你可以使用像this这样的资源来帮助你阐明你对你的语言的直觉。

UPDATE

3)你可以把它倍受不是模拟全英简单,但是,比如说,日本,或意大利文,其中规定要容易得多,如果这是一个废话单词它是作为容易记住作为一个无意义的英语单词。例如,日语只有94个有效音节(47个短,47个长),你可以很容易地列出所有这些音节并随机挑选。

+0

马尔可夫链似乎实现了我在寻找的东西。我会等到有更多的建议出现时,才会有更好的解决方案,但会在几天内标记出答案。与此同时,我遇到了一个很好的示例c#类的实现,以防万一有人感兴趣。 http://www.siliconcommandergames.com/MarkovNameGenerator.htm – 2010-07-30 13:47:10

3

我会用这个Markov chain算法。

总结:

  1. 构建一个字典。在一段英文文本中遍历字母。构建映射字母对的数据结构。对每一对记录第一个字母出现在第一个字母后的概率。
  2. 生成您的文本。使用你在(1)中建立的地图,选择一系列随机字母。在决定接下来写什么字母时,看看你最近写的那封信,然后用那封信来确定下一封信的可能性。
+0

良好的联系。读者可能会跳到马尔科夫文本生成器部分,在页面的下方。 – kbrimington 2010-07-30 13:31:44