ここでは日本語文字列の中に含まれるカタカナをひらがなに変換する方法を説明し,その関数を実装します.その後,ひらがなからカタカナに変換する関数も実装します.
まず,カタカナの「アイウエオ」だけをひらがなの「あいうえお」に変換することを考えます.そのためには「ア」は「あ」に,「イ」は「い」にといった変換ルールを記した辞書を作成します.
katakana2hiragana_map = {
'ア': 'あ',
'イ': 'い',
'ウ': 'う',
'エ': 'え',
'オ': 'お',
}
print(katakana2hiragana_map)
{'ア': 'あ', 'イ': 'い', 'ウ': 'う', 'エ': 'え', 'オ': 'お'}
この辞書に str.translate()
と str.maketrans()
を利用すると,「アイウエオ」だけが「あいうえお」に変換できました.
katakana_text = 'アルバイト'
hiragana_text = katakana_text.translate(str.maketrans(katakana2hiragana_map))
print(katakana_text)
print(hiragana_text)
アルバイト あルバいト
katakana_text = 'エイリアン'
hiragana_text = katakana_text.translate(str.maketrans(katakana2hiragana_map))
print(katakana_text)
print(hiragana_text)
エイリアン えいリあン
なお,str.maketrans()
では次のような結果が得られます.
print(katakana2hiragana_map)
print(str.maketrans(katakana2hiragana_map))
{'ア': 'あ', 'イ': 'い', 'ウ': 'う', 'エ': 'え', 'オ': 'お'} {12450: 'あ', 12452: 'い', 12454: 'う', 12456: 'え', 12458: 'お'}
つまり,「ア」が「12450」という数値に置き換えられています.Unicode の文字コード表 を参照すると「ア」の文字コードは「0x30A2」であることがわかります.これは16進数であるので,10進数に変換すると「12450」であることがわかりました.
a = 0x30A2
print(a)
12450
なお,文字から文字コードに変換する ord()
,文字コードから文字に変換する chr()
の利用方法も確認しておきます.
print(ord('ア'))
print(chr(0x30A2))
print(chr(12450))
12450 ア ア
上では「アイウエオ」を「あいうえお」に変換する辞書を利用しました.すべてのカタカナとひらがなを対応付ける辞書を作成できればカタカナからひらがなへの変換ができそうです.つまり,Unicode のカタカナ部分の文字コード表 とUnicode のひらがな部分の文字コード表 を参照すると「ァ:0x30A1」から「ヶ:0x30F6」までの範囲を「ぁ:0x3041」から「ゖ:0x3096」の範囲に置き換える辞書を作成すればよいことになります.内包表記と,文字から文字コードに変換する ord()
,文字コードから文字に変換する chr()
を利用することで,カタカナからひらがなに変換するための辞書を効率的に作成できます.次の通り,カタカナをひらがなに一括変換する katakana2hiragana()
関数を定義します.
def katakana2hiragana(text):
"""
カタカナをひらがなに変換
"""
# カタカナの Unicode範囲 0x30A1 (ァ) から 0x30F6 (ヶ)
# ひらがなの Unicode範囲 0x3041 (ぁ) から 0x3096 (ゖ)
katakana_start = ord("ァ")
hiragana_start = ord("ぁ")
# カタカナをひらがなに変換するための辞書
katakana2hiragana_map = {
chr(i): chr(i - katakana_start + hiragana_start) for i in range(katakana_start, ord("ヶ") + 1)
}
# 次を有効にすると辞書の内容を確認できます
# print(katakana2hiragana_map)
# str.translate を使用して変換
return text.translate(str.maketrans(katakana2hiragana_map))
作成した関数を使ってカタカナに変換してみます.
print(katakana2hiragana("アルバイト"))
あるばいと
print(katakana2hiragana("エイリアン"))
えいりあん
print(katakana2hiragana("カタカナをひらがなに変換する"))
かたかなをひらがなに変換する
上とほぼ同じ考え方でひらがなからカタカナに逆向きに変換する関数も作成してみましょう.
def hiragana2katakana(text):
"""
ひらがなをカタカナに変換
"""
# カタカナの Unicode範囲 0x30A1 (ァ) から 0x30F6 (ヶ)
# ひらがなの Unicode範囲 0x3041 (ぁ) から 0x3096 (ゖ)
katakana_start = ord("ァ")
hiragana_start = ord("ぁ")
# ひらがなをカタカナに変換するための辞書
hiragana2katakana_map = {
chr(i): chr(i - hiragana_start + katakana_start) for i in range(hiragana_start, ord("ゖ") + 1)
}
# 次を有効にすると辞書の内容を確認できます
# print(hiragana2katakana_map)
# str.translate を使用して変換
return text.translate(str.maketrans(hiragana2katakana_map))
print(hiragana2katakana("ひらがなをカタカナに変換する"))
ヒラガナヲカタカナニ変換スル