ふと100均で買ったコップに書いてあるフランス語っぽい文章を見てたら、なんとなくランダムに文字繋げていったらそれっぽい文章になるのではないかと思い立ってスクリプト書いてためしてみた。どうせ英語以外の外国語わからないし。
各文字の出現率は下記URLにある、英単語で使用されている各文字の出現率から。ヨーロッパ系の言語なら大体同じになるでしょうということで。
文字頻度表
単に文字をランダムで繋げただけではかなり不自然になるので以下のルールを加える。
- 単語の長さは3文字-8文字の間。
- 母音のみ、子音のみの単語は無し。
- 母音は連続して2つまで、子音は3つまで。
- 同じ文字は連続しない。
ということで書いたのが以下のスクリプト。
#!/usr/bin/python
import random,re
c = {
'e' : 11.40962588, 'a' : 8.446499792, 't' : 8.184687661, 'i' : 7.130098608,
'o' : 7.051799653, 's' : 6.973500697, 'n' : 6.770412782, 'r' : 6.222320096,
'h' : 4.255058847, 'l' : 3.87335144 , 'd' : 3.870904598, 'c' : 3.195576109,
'u' : 2.953338716, 'm' : 2.671951846, 'p' : 2.023538623, 'f' : 1.984389146,
'g' : 1.820450708, 'y' : 1.793535443, 'w' : 1.698108591, 'b' : 1.644278059,
'v' : 0.998311679, 'k' : 0.8955443 , 'j' : 0.205534757, 'x' : 0.176172649,
'q' : 0.08319264 , 'z' : 0.078298955 }
max = 0.0;
_c = {};
for k in c:
min = max
max = max + c[k]
_c.update({k:{'min':min,'max':max}})
def make_word():
text = []
ret_text = '';
for j in range(0, random.randint(3, 8)):
rand = random.uniform(0, max * 1000) / 1000
for k in _c:
if _c[k]['min'] <= rand and rand <= _c[k]['max']:
text.append(k)
break
ret_text = ''.join(text)
if re.compile(r'^[^aeiou]+$').search(ret_text)\
or re.compile(r'^[aeiou]+$').search(ret_text)\
or re.compile(r'[aeiou]{3,}').search(ret_text)\
or re.compile(r'[^aeiou]{4,}').search(ret_text)\
or re.compile(r'([a-zA-Z])\1+').search(ret_text):
return make_word()
return ret_text
sentence = []
for i in range(0,random.randint(3,10)):
sentence.append(make_word())
print ' '.join(sentence)
そして実行した結果例を適当に。
tfua iaseya gie surtsih litlai thbi
nih onh neciyt
soete card cep odaebr wulst thtia scopwn hwun tovea
oruf wse nfno glfuofta kbyemdt cod hoen jreymtai eds gris
stie rewrmea nhti ofus gdcae weyh ekt
egnh geu husa uhewaip cewhyepn ytafn
tdre eteo eroec pnecedue feytranl deta iat sgedeh tcitoi etietw
ortlan eni tdehcr emoelwes rete icuha csamnm onewerhi raehadse
cerer hsret aliof asne uyawna tapibs ufrn nepbe
なんだかそれっぽい気がする。
こういった適当な文字列に対して「これポーランド語だよ!」とかマイナーな言語の名前言ってもきっとわからないと思う。
しかし新年度から何やってるのか。