擅长:python、mysql、java
<p>这里有一个想法</p>
<p>你可以利用<em>马尔可夫链</em>来获得“可发音的名字”。A<a href="https://en.wikipedia.org/wiki/Markov_chain" rel="nofollow noreferrer">Markov chain</a>对一个或多个状态(例如,单个字母或音节)进行建模,并存储从一个状态过渡到另一个状态的概率(例如,“b”到“e”的概率为20%,或“b”到“b”的概率为1%)。请注意,马尔可夫链被设计成除了当前状态之外,没有过去的记忆。(另见我关于<a href="https://peteroupc.github.io/randomfunc.html#Markov_Chains" rel="nofollow noreferrer">Markov chains</a>的一节。)</p>
<p>在您的例子中,状态由合理的音节组成(这是生成可发音单词的更好基础,而不是字母)</p>
<p>下面使用马尔可夫链实现了一个简单的音节生成器(您可以根据需要调整转换矩阵中的状态和权重)</p>
<pre><code>import random
transitions = {
"ka":[[20,"ga"],[30,"ma"],[30,"mu"],[30,"ba"],[5,"ka"]],
"ga":[[1,"ga"],[30,"ma"],[30,"mu"],[30,"ba"]],
"ma":[[20,"ga"],[30,"ma"],[30,"ka"],[30,"ba"]],
"ba":[[20,"ga"],[30,"ka"],[30,"mu"],[5,"ba"]],
"mu":[[20,"ka"],[30,"ma"],[1,"mu"],[30,"ba"]],
}
# First state
state=random.choice(list(transitions.keys()))
print(state)
# Next three states
for i in range(3):
tr=transitions[state]
w=[x[0] for x in tr]
state=random.choices(tr,weights=w)[0][1]
print(state)
</code></pre>