PythonでTypoglycemiaを作る
PythonでTypoglycemiaを作ってみた。
Typoglycemiaとは
Typoglycemiaとは文章中の単語で、最初と最後の文字以外が入れ替わっていても文章が読めてしまう現象です。多分、例を見たらわかるので、以下を読んでみてください。
こんちには みさなん おんげき ですか? わしたは げんき です。
この ぶんょしう は いりぎす の ケブンッリジ だがいく の けゅきんう の けっか
にんんげ は もじ を にしんき する とき その さしいょ と さいご の もさじえ あいてっれば
じばんゅん は めくちちゃゃ でも ちんゃと よめる という けゅきんう に もづいとて
わざと もじの じんばゅん を いかれえて あまりす。
どでうす? ちんゃと よゃちめう でしょ?
ちんゃと よためら はのんう よしろく
どうですか?ちゃんと読めてしまいますよね。
2ちゃんねるに投稿されたコピペで、実際にケンブリッジ大学で研究が行われた訳ではないみたいです。
Pythonで文字を入れ替えてみる
前後の文字だけを残して中身の文字順を変えるのは簡単にできます。
例えば、Helloという単語の場合、先頭と後方の単語をそれぞれ、HeaderとFooterとして固定します。
さらに内側のellをBodyとして、このBodyの語順を入れ替えればTypoglycemiaになります。
プログラムでは文字に先頭から番号をふり、文字と番号を結び付けその番号の順番をランダムに変えることで文字順を入れ替えています。この場合、入れ替えが起こるのは1,2,3番の文字だけで、先頭の0番と後方の4番は入れ替えが起こらないように固定するようにします。
Pythonで以上の仕組みを再現します。
import random
def shuffle(input_word):
input_word_length = len(input_word)
body = ""
header = str(input_word[0])
footer = str(input_word[input_word_length-1])
body_num = list(range(1,input_word_length-1))
random.shuffle(body_num)
old_word = ""
if input_word_length == 1:
return input_word
if input_word_length == 4:
body = input_word[2] + input_word[1]
shuffled_word = header + body + footer
return shuffled_word
for num_selector in range(0,input_word_length-2):
body = old_word + input_word[body_num[num_selector]]
old_word = body
shuffled_word = header + body + footer
return shuffled_word
input = input()
print("---> " + shuffle(input))
Helloと入力すると意図した動作をしてくれます。
Hello
---> Hlelo
これだと1単語しか変換できないので、スペースで区切られた文章を変換できるようにします。
PythonではString型の変数にsplit関数が用意されており、スペースで区切られた文章を単語に区切り、listにしてくれます。便利ですね!
以下のようにlistを作り1単語ごとshuffle関数に入れることで入れ替えた文章を作ります。
def make_typoglycemia(input_sentence):
if input_sentence == "":
typoglycemia = ""
return typoglycemia
word_split_list = input_sentence.split()
old_word = ""
for word_selector in range(len(word_split_list)):
word_split_list[word_selector] = shuffle(word_split_list[word_selector])
typoglycemia = old_word + word_split_list[word_selector]
old_word = typoglycemia + " "
return typoglycemia
GUIアプリケーションにする
これを元にGUIアプリケーションを作りました。日本語入力モードだと挙動が不安定な部分もありますが良かったら見てください!(漢字ひらがな変換にpykakasi、GUI構築にtkinterを使ったので実行する際はインストールしてください。)
PythonでGUIを作るのに意外とハマったところが多かったので記事にするかもです。
Author And Source
この問題について(PythonでTypoglycemiaを作る), 我々は、より多くの情報をここで見つけました https://qiita.com/ren_nomura/items/0ba3544a33d8722fd6f8著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .