🌊
日本語をなんでも猫語に変換するスクリプト
ひらがなで入力された日本語をなんでも猫語に変換して出力するスクリプトです。
chmod +x catlang.pyで実行権を付け、./catlang.py ことばで実行してください。
#!/usr/bin/env python3
import sys
"""
kana_list に基づき、各列の母音を
あ -> にゃ
い -> に
う -> にゅ
え -> にぇ
お -> にょ
に変換するスクリプト。
onbin に含まれる文字(例: 'ん','ー','っ')は無変換でそのまま残します。
最長一致でマッチするため、拗音(きゃ、ふぁ など)にも対応します。
"""
kana_list = [
'あ','い','う','え','お',
'か','き','く','け','こ',
'が','ぎ','ぐ','げ','ご',
'さ','し','す','せ','そ',
'ざ','じ','ず','ぜ','ぞ',
'た','ち','つ','て','と',
'だ','ぢ','づ','で','ど',
'な','に','ぬ','ね','の',
'は','ひ','ふ','へ','ほ',
'ば','び','ぶ','べ','ぼ',
'ぱ','ぴ','ぷ','ぺ','ぽ',
'ま','み','む','め','も',
'や','ゐ','ゆ','ゑ','よ',
'ら','り','る','れ','ろ',
'わ','@','@','@','を',
'ふぁ','ふぃ','ふぅ','ふぇ','ふぉ',
'ゔぁ','ゔぃ','ゔ','ゔぇ','ゔぉ',
'うぁ','うぃ','うぅ','うぇ','うぉ',
'てぁ','てぃ','てぅ','てぇ','てぉ',
'きゃ','きぃ','きゅ','きぇ','きょ',
'しゃ','しぃ','しゅ','しぇ','しょ',
'ちゃ','ちぃ','ちゅ','ちぇ','ちょ',
'にゃ','にぃ','にゅ','にぇ','にょ',
'ひゃ','ひぃ','ひゅ','ひぇ','ひょ',
'みゃ','みぃ','みゅ','みぇ','みょ',
'りゃ','りぃ','りゅ','りぇ','りょ',
'ぎゃ','ぎぃ','ぎゅ','ぎぇ','ぎょ',
'じゃ','じぃ','じゅ','じぇ','じょ',
'ぢゃ','ぢぃ','ぢゅ','ぢぇ','ぢょ',
'びゃ','びぃ','びゅ','びぇ','びょ',
'ぴゃ','ぴぃ','ぴゅ','ぴぇ','ぴょ',
]
onbin = ['ん', 'ー', 'っ'] # 無変換でそのまま出力する文字
vowel_to_cat = ['にゃ', 'に', 'にゅ', 'にぇ', 'にょ']
mapping = {}
for i in range(0, len(kana_list), 5):
row = kana_list[i:i+5]
for j, syl in enumerate(row):
if syl == '@' or syl == '' or syl is None:
continue
if j < len(vowel_to_cat):
mapping[syl] = vowel_to_cat[j]
if mapping:
max_key_len = max(len(k) for k in mapping.keys())
else:
max_key_len = 0
def to_cat(text: str) -> str:
i = 0
out = []
L = len(text)
while i < L:
c = text[i]
if c in onbin:
out.append(c)
i += 1
continue
matched = False
limit = min(max_key_len, L - i)
for l in range(limit, 0, -1):
piece = text[i:i+l]
if piece in mapping:
out.append(mapping[piece])
i += l
matched = True
break
if matched:
continue
out.append(c)
i += 1
return ''.join(out)
if __name__ == '__main__':
s=sys.argv[1]
t=to_cat(s)
print(f"元:{s}")
print(f"猫語:{t}")
実行例
% catlang.py こんにちは
元:こんにちは
猫語:にょんにににゃ
%
Discussion