你如何创建像英语一样的单词?

时间:2009-12-11 22:52:15

标签: c# algorithm

你如何创造不属于英语的单词,但是英语听起来不错?例如:janertice,bellagom

13 个答案:

答案 0 :(得分:14)

考虑this algorithm,这实际上只是Markov chain的堕落情况。

答案 1 :(得分:14)

从一个英语单词的开头和另一个单词的结尾开始连接。

E.g。

Fortune + totality = fortality

您可能想要添加更多规则,例如只在辅音元音边界上剪切您的文字等等。

答案 2 :(得分:3)

这是一个example of somebody doing it。他们谈论Markov chainsdissociated press

这里有一些code I found。你可以在键盘上run it online

import random

vowels = ["a", "e", "i", "o", "u"]
consonants = ['b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 
              'r', 's', 't', 'v', 'w', 'x', 'y', 'z']

def _vowel():
    return random.choice(vowels)

def _consonant():
    return random.choice(consonants)

def _cv():
    return _consonant() + _vowel()

def _cvc():
    return _cv() + _consonant()

def _syllable():
    return random.choice([_vowel, _cv, _cvc])()

def create_fake_word():
    """ This function generates a fake word by creating between two and three
        random syllables and then joining them together.
    """
    syllables = []
    for x in range(random.randint(2,3)):
        syllables.append(_syllable())
    return "".join(syllables)

if __name__ == "__main__":
    print create_fake_word()

答案 3 :(得分:3)

我认为this story会很好地回答你的问题。

它很好地描述了马尔可夫链算法的发展,包括出现的陷阱。

答案 4 :(得分:2)

答案 5 :(得分:2)

一种相对简单有效的方法是使用大量英语单词作为源材料,以每个单词Markov chain generator而不是每个单词运行。

答案 6 :(得分:2)

注意:语言学是一种爱好,但我绝不是专家。

首先你需要一本“字典”,以便谈到英语音素。

然后你只需将它们串在一起。

虽然不是最复杂和最准确的解决方案,但它应该引导您获得普遍接受的结果。

如果您不了解所提及的其他解决方案的复杂性,那么实施起来会更加简单。

答案 7 :(得分:2)

正如已经指出的那样,使用马尔可夫链是一种简单的方法。请注意,不要使用Automated Curse Generator

答案 8 :(得分:2)

使用基于英语语料库的n-gram,其中n> 3,这会让你近似。

答案 9 :(得分:2)

我无法想到这样做的任何方式。

答案 10 :(得分:0)

一种常见的做法是根据来自英语词典的几个单词(noums?)组成的“训练集”中的字母过渡来构建Markov Chain,然后让这个链产生“随机”单词对你而言。

答案 11 :(得分:0)

马尔可夫链是其他方式已经发布的方式。以下是该算法的概述:

  • 设H是一个字典,将字母映射到另一个字典,将字母映射到它们出现的频率。
  • 通过扫描文本语料库(例如,圣经或Stack Overflow公共数据)来初始化H.这是一个简单的频率计数。一个示例条目可能是H ['t'] = {'t':23,'h':300,'a':50}。还要创建一个特殊的“开始”符号,表示单词的开头,以及结尾的“结束”符号。
  • 以“开始”符号开头生成一个单词,然后根据频率计数随机选择下一个单词。根据最后一个字母生成每个附加字母。例如,如果最后一个字母是't',那么你将选择概率为300/373的'h',概率为23/373的't'和概率为50/373的'a'。点击“结束”符号时停止。

为了使您的算法更准确,您可以将两个字母映射到下一个字母,而不是将一个字母映射到下一个字母。

答案 12 :(得分:0)

如果您决定采用Andy West建议的简单方法,您可以通过对元音和辅音的频率进行加权来与通常用英语发生的频率进行加权,从而获得更好的结果:Wikipedia: Letter Frequency < / p>

你甚至可以看到成对的字母或三个字母的序列的频率,但在那时你实际上实现了与其他人建议的马尔可夫链相同的想法。更重要的是,“假词”看起来对人类是否真实可信,或者这些词的统计属性更重要,例如在加密应用程序中?