#概要
「コンニチハ->オンイイア」みたいに、カタカナ文字列を入力したら、その母音を返す関数を作りました。
#変換ルール
「ン」「ッ」はそのままにする(例:ルンパッパ -> ウンアッア)
「ー」(長音)は直前の母音と同一にする(例:コーラ -> オオア)
「ゥ」は直前のカナが「ト」「ド」の場合、それと合わせて一つの文字とみなし、大文字と同じく扱う(例:ドゥッキ -> ウッイ、ゥアア -> ウアア)
「ャ」「ェ」「ョ」は直前がカナがイ段の場合、直前のカナと合わせて一つの文字とみなし、それ以外の場合は大文字と同じく扱う。(例:キャタツ -> アアウ、キェェ -> エエ)
「ュ」は直前のカナがイ段、「テ」「デ」の場合、それと合わせて一つのカナとみなし、それ以外の場合は大文字と同じく扱う(例:チュール -> ウウウ、デュワー -> ウアア)
「ヮ」「ァ」「ェ」「ォ」は直前のカナがウ段の場合、それと合わせて一つのカナとみなし、それ以外の場合は大文字と同じく扱う。(例:ウェーイ -> エエイ)
「ィ」は直前のカナがウ段、「テ」「デ」の場合、それと合わせて一つのカナとみなし、それ以外の場合は大文字と同じく扱う(例:レモンティー -> エオンイイ、ィエア -> イエア)
カタカナ以外の文字はそのままにする。
#環境
Google Colaboratory(2020年3月27日時点)およびmacOS Catalina, Python3.8.0での実行を確認しています。
#コード
def kana2vowel(text):
#大文字とゥの変換リスト
large_tone = {
'ア' :'ア', 'イ' :'イ', 'ウ' :'ウ', 'エ' :'エ', 'オ' :'オ',
'ゥ': 'ウ', 'ヴ': 'ウ',
'カ' :'ア', 'キ' :'イ', 'ク' :'ウ', 'ケ' :'エ', 'コ' :'オ',
'サ' :'ア', 'シ' :'イ', 'ス' :'ウ', 'セ' :'エ', 'ソ' :'オ',
'タ' :'ア', 'チ' :'イ', 'ツ' :'ウ', 'テ' :'エ', 'ト' :'オ',
'ナ' :'ア', 'ニ' :'イ', 'ヌ' :'ウ', 'ネ' :'エ', 'ノ' :'オ',
'ハ' :'ア', 'ヒ' :'イ', 'フ' :'ウ', 'ヘ' :'エ', 'ホ' :'オ',
'マ' :'ア', 'ミ' :'イ', 'ム' :'ウ', 'メ' :'エ', 'モ' :'オ',
'ヤ' :'ア', 'ユ' :'ウ', 'ヨ' :'オ',
'ラ' :'ア', 'リ' :'イ', 'ル' :'ウ', 'レ' :'エ', 'ロ' :'オ',
'ワ' :'ア', 'ヲ' :'オ', 'ン' :'ン', 'ヴ' :'ウ',
'ガ' :'ア', 'ギ' :'イ', 'グ' :'ウ', 'ゲ' :'エ', 'ゴ' :'オ',
'ザ' :'ア', 'ジ' :'イ', 'ズ' :'ウ', 'ゼ' :'エ', 'ゾ' :'オ',
'ダ' :'ア', 'ヂ' :'イ', 'ヅ' :'ウ', 'デ' :'エ', 'ド' :'オ',
'バ' :'ア', 'ビ' :'イ', 'ブ' :'ウ', 'ベ' :'エ', 'ボ' :'オ',
'パ' :'ア', 'ピ' :'イ', 'プ' :'ウ', 'ペ' :'エ', 'ポ' :'オ'
}
#ト/ド+'ゥ'をウに変換
for k in 'トド':
while k+'ゥ' in text:
text = text.replace(k+'ゥ','ウ')
#テ/デ+ィ/ュをイ/ウに変換
for k in 'テデ':
for k2,v in zip('ィュ','イウ'):
while k+k2 in text:
text = text.replace(k+k2,v)
#大文字とゥを母音に変換
text = list(text)
for i, v in enumerate(text):
if v in large_tone:
text[i] = large_tone[v]
text = ''.join(text)
#ウーをウウに変換
while 'ウー' in text:
text = text.replace('ウー','ウウ')
#ウ+ヮ/ァ/ィ/ェ/ォを母音に変換
for k,v in zip('ヮァィェォ','アアイエオ'):
text = text.replace('ウ'+k,v)
#イー/ィーをイイ/ィイに変換
for k in 'イィ':
while k+'ー' in text:
text = text.replace(k+'ー',k+'イ')
#イ/ィ+ャ/ュ/ェ/ョを母音に変換
for k,v in zip('ャュェョ','アウエオ'):
text = text.replace('イ'+k, v).replace('ィ'+k, v)
#残った小文字を母音に変換
for k,v in zip('ヮァィェォャュョ','アアイエオアウオ'):
text = text.replace(k,v)
#ー(長音)を母音に変換する
for k in 'アイウエオ':
while k+'ー' in text:
text = text.replace(k+'ー',k+k)
return text