0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonで英語の名前を漢字風に変換するプログラムを作ってみた!

Last updated at Posted at 2025-08-21

こんにちは!
大学生の時から、プログラミングを学びはじめ、今回初めてブログを書いてみます。
みなさんは外国の方から「自分の名前って日本語で書いたらどうなるの?」と聞かれたことはありませんか?
私も聞かれたことがあるのですが、なかなかすぐに答えるのは難しいですよね。

そこで今回は、英語の名前を日本語の漢字風に変換してみるプログラムをPythonで作ってみました。


完成したコード

import random

sound_to_kanji = {
    "ja": ["", "", ""],       
    "da": ["", "", ""],       
    "ka": ["", "", ""],      
    "ki": ["", "", ""],       
    "ch": ["", "", ""],      
    "ke": ["", "", ""],       
    "ko": ["", "", ""],       
    "sa": ["", "", ""],       
    "shi": ["", "", ""],    
    "su": ["", "寿", ""],       
    "se": ["", "", ""],       
    "so": ["", "", ""],       
    "ta": ["", "", ""],     
    "te": ["", "", ""],       
    "to": ["", "", ""],       
    "na": ["", "", ""],       
    "ni": ["", "", ""],       
    "ne": ["", "", ""],       
    "no": ["", "", ""],       
    "ha": ["", "", ""],       
    "hi": ["", "", ""],      
    "fu": ["", "", ""],       
    "he": ["", "", ""],       
    "ho": ["", "", ""],       
    "ma": ["", "", ""],       
    "mi": ["", "", ""],       
    "m": ["", "", ""],       
    "me": ["", "", ""],     
    "mo": ["", "", ""],       
    "ya": ["", "", ""],       
    "yu": ["", "", ""],       
    "yo": ["", "", ""],   
    "ra": ["", "", ""],    
    "la": ["", "", ""],  
    "li": ["", "", ""],      
    "ru": ["", "", ""],      
    "le": ["", "", ""], 
    "re": ["", "", ""],  
    "lo": ["", "", ""],     

    "ck": ["", ""],             
    "sh": ["", "", ""],      
    "th": ["", "", ""],      
    "phi": ["", "", ""],      
    "qu": ["", "", ""],       
    "vi": ["", "", ""],       
    "va": ["", "", ""],       
    "wi": ["", "", ""],       
    "x": ["", "", ""],      
    "z": ["", "", ""],       
    "ly": ["", "", ""], 
    "b": ["", "", ""], 
    "ca": ["", "", ""],   
    "co": ["", "", ""],     
    "tho": ["", "", ""], 
    "jo": ["", "", ""],  
    "s": ["", "", ""],  
         
    "a": ["", "", ""],
    "e": ["", "", ""],
    "i": ["", "", ""],
    "o": ["", "", ""],
    "u": ["", "", ""],
}

def sort_syllables_key(s):
    # 子音+母音のように2文字以上のものを優先する
    consonant_priority = 1 if len(s) > 1 else 0
    return (consonant_priority, len(s))

def name_to_kanji(name):
    name = name.lower()
    # 母音が先にマッチしないように、長い音節から順番に探す
    syllables = sorted(sound_to_kanji.keys(), key=sort_syllables_key, reverse=True)
    print("Syllables order:", syllables)
    result = ""
    while name:
        matched = False
        for s in syllables:
            if name.startswith(s):
                print(f"Matched syllable: {s}")
                result += random.choice(sound_to_kanji[s])
                name = name[len(s):]
                matched = True
                break
        if not matched:
            print(f"Skipping '{name[0]}'")
            name = name[1:]
    return result

if __name__ == "__main__":
    while True:
        english_name = input("\nEnter an English name (or 'q' to quit): ").strip()
        if english_name.lower() in ["q", "quit", "exit"]:
            print("終了します。")
            break
        kanji_version = name_to_kanji(english_name)
        print(f"漢字風表記: {kanji_version}")

ポイント① 名前の音を漢字に対応づける

まず「sound_to_kanji」という辞書を作り、
「英語の音 → 漢字の候補」という対応表を用意しています。

たとえば:

  • "da" → 「田」「打」「雫」
  • "ka" → 「香」「花」「加」
  • "jo" → 「徐」「序」「所」

のように、よくある音と漢字を対応させました。
今回の辞書ではよく使われる文字やローマ字を主に登録してみました。


ポイント② 母音が先に変換されてしまう問題

最初に作ったときは、
「da」を入れても「a」と誤認識される
という問題が起きてしまいました。

理由は、プログラムが 「短い音(a)」を先にチェックしてしまっていた からです。

解決方法

そこで、長い音(da, shi, chi,など)を優先して探すように、
sorted() でキーを並べ替えました。

これで "da" と入力したとき、最初に "da" を見つけてくれるので、 "a" に取られることがなくなりました。


実際に動かしてみる

Enter an English name (or 'q' to quit): daniel
Syllables order: ['shi', 'phi', 'tho', 'ja', 'da', 'ka', 'ki', 'ch', 'ke', 'ko', 'sa', 'su', 'se', 'so', 'ta', 'te', 'to', 'na', 'ni', 'ne', 'no', 'ha', 'hi', 'fu', 'he', 'ho', 'ma', 'mi', 'me', 'mo', 'ya', 'yu', 'yo', 'ra', 'la', 'li', 'ru', 'le', 're', 'lo', 'ck', 'sh', 'th', 'qu', 'vi', 'va', 'wi', 'ly', 'ca', 'co', 'jo', 'm', 'x', 'z', 'b', 's', 'l', 'a', 'e', 'i', 'o', 'u']
Matched syllable: da
Matched syllable: ni
Matched syllable: e
Matched syllable: l
漢字風表記: 雫虹江留

ちゃんと 「da」→「雫」 が変換されました!


まとめ

このプログラムでは、英語の名前を日本語の「音」に分解して、対応する漢字を当てはめることができます。外国の人に「名前を日本語で書いたらどうなるの?」と聞かれたときに、入力するとすぐに結果が出てきます。

ただし、今回の辞書にはすべての音が入っているわけではないです。また「da」を「デ」と読んで別の漢字を当てるなど、日本語の発音に合わせた工夫はまだできていません。まだまだ改良の余地が残っているので、辞書にすべての音を網羅したり、同じ音で複数の漢字を使い分けたりする工夫を加えると、より自然で汎用性が高い変換ができるようになると思います。


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?