Как Вы создаете слова, которые не являются частью английского языка, но звучат английскими? Например: janertice, bellagom
Рассмотрим этот алгоритм , что на самом деле является просто вырожденным случаем цепи Маркова .
Возьмите начало одного английского слова и конец другого и объедините.
Например,
Удача + Тотальность = Удача
Возможно, вы захотите добавить еще несколько правил, например только сокращение ваших слов на границах согласных и гласных и т. д.
Я думаю, эта история довольно хорошо ответит на ваш вопрос.
В ней довольно хорошо описывается разработка алгоритма цепи Маркова, включая возникающие подводные камни.
Вот пример того, как кто-то это делает . Они говорят о цепях Маркова и диссоциированной прессе .
Вот некоторый код, который я нашел . Вы можете запустить его онлайн с помощью кодовой панели.
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()
Возможно, вас заинтересует Как определить, звучит ли случайная строка как английский?
Примечание: лингвистика - это хобби, но я никоим образом не специалист в этом.
Сначала вам нужно получить «словарь», так сказать английских фонем.
Затем вы просто соединяете их вместе.
Хотя это не самое сложное и точное решение, оно должно привести вас к общеприемлемому результату.
Гораздо проще реализовать, если вы не понимаете сложности других упомянутых решений.
Один из относительно простых и эффективных подходов - запустить генератор цепей Маркова для каждого символа, а не для каждого слова, используя большой корпус английских слов в качестве исходного материала.
Как уже указывалось, использование цепей Маркова - простой способ. Только будьте осторожны, чтобы не получить Автоматический генератор проклятий .
Используйте n-граммы на основе английских корпусов с n> 3, чтобы получить приблизительное значение.
Распространенной практикой является построение цепи Маркова на основе переходов букв в «обучающем наборе», состоящем из нескольких слов (нумов?) из лексикона английского языка, и затем позволить этой цепочке производить для вас «случайные» слова.
Цепь Маркова - это то, что нужно, как уже писали другие. Вот обзор алгоритма:
Чтобы сделать ваш алгоритм более точным, вместо сопоставления одной буквы со следующими буквами, вы можете сопоставить две буквы со следующей буквой.
Я не могу придумать каких-либо сложных способов сделать это.
Если вы решили использовать простой подход, как предлагал Энди Уэст, Вы можете получить еще лучшие результаты, взвешивая частоты гласных и согласных, чтобы они соответствовали тем, которые обычно встречаются на английском языке: Википедия: Частота букв
Вы даже могли бы зайти так далеко, если бы посмотрели на частоты парных букв или последовательностей из трех букв, но в этот момент вы на самом деле реализуете ту же идею, что и цепочка Маркова, которую предлагали другие. Важнее ли то, что "фальшивые слова" выглядят потенциально аутентичными для человека, или важнее статистические свойства слов, например, в криптографических приложениях?
.