Skip to content

Instantly share code, notes, and snippets.

@ObjectsCountries
Created November 25, 2024 19:10
Show Gist options
  • Save ObjectsCountries/e9639c075fe420be2e2ae1023448bed5 to your computer and use it in GitHub Desktop.
Save ObjectsCountries/e9639c075fe420be2e2ae1023448bed5 to your computer and use it in GitHub Desktop.
@yabashe.bsky.social 's romaji-to-kana bash script rewritten in python
#!/usr/bin/env python3
def romaji_to_kana(romaji: str) -> str:
punctuation: dict[str, str] = {
".": "。",
"?": "?",
"!": "!",
":": ":",
"-": "ー",
"~": "〜",
"=": "゠",
",": "、",
"[": "「",
"]": "」",
"q[": "『",
"q]": "』",
'qq"': "〟",
'q"': "〝",
}
hiragana_alternatives: dict[str, str] = {
"qtsu": "っ",
"qya": "ゃ",
"qyu": "ゅ",
"qyo": "ょ",
"qka": "ゕ",
"qke": "ゖ",
"qwa": "ゎ",
"qji": "ぢ",
"qjji": "っぢ",
"qja": "ぢゃ",
"qju": "ぢゅ",
"qjo": "ぢょ",
"qjja": "っぢゃ",
"qjju": "っぢゅ",
"qjjo": "っぢょ",
"qa": "ぁ",
"qi": "ぃ",
"qu": "ぅ",
"qe": "ぇ",
"qo": "ぉ",
}
hiragana_geminates: dict[str, str] = {
"kkya": "っきゃ",
"kkyu": "っきゅ",
"kkyo": "っきょ",
"ssha": "っしゃ",
"sshu": "っしゅ",
"ssho": "っしょ",
"ccha": "っちゃ",
"cchu": "っちゅ",
"ccho": "っちょ",
"nnya": "っにゃ",
"nnyu": "っにゅ",
"nnyo": "っにょ",
"hhya": "っひゃ",
"hhyu": "っひゅ",
"hhyo": "っひょ",
"mmya": "っみゃ",
"mmyu": "っみゅ",
"mmyo": "っみょ",
"rrya": "っりゃ",
"rryu": "っりゅ",
"rryo": "っりょ",
"ggya": "っぎゃ",
"ggyu": "っぎゅ",
"ggyo": "っぎょ",
"jja": "っじゃ",
"jju": "っじゅ",
"jjo": "っじょ",
"bbya": "っびゃ",
"bbyu": "っびゅ",
"bbyo": "っびょ",
"ppya": "っぴゃ",
"ppyu": "っぴゅ",
"ppyo": "っぴょ",
"kka": "っか",
"kki": "っき",
"kku": "っく",
"kke": "っけ",
"kko": "っこ",
"ssa": "っさ",
"sshi": "っし",
"ssu": "っす",
"sse": "っせ",
"sso": "っそ",
"tta": "った",
"cchi": "っち",
"ttsu": "っつ",
"tte": "って",
"tto": "っと",
"nna": "っな",
"nni": "っに",
"nnu": "っぬ",
"nne": "っね",
"nno": "っの",
"hha": "っは",
"hhi": "っひ",
"ffu": "っふ",
"hhe": "っへ",
"hho": "っほ",
"mma": "っま",
"mmi": "っみ",
"mmu": "っむ",
"mme": "っめ",
"mmo": "っも",
"rra": "っら",
"rri": "っり",
"rru": "っる",
"rre": "っれ",
"rro": "っろ",
"wwa": "っわ",
"wwi": "っゐ",
"wwe": "っゑ",
"wwo": "っを",
"gga": "っが",
"ggi": "っぎ",
"ggu": "っぐ",
"gge": "っげ",
"ggo": "っご",
"zza": "っざ",
"jji": "っじ",
"zzu": "っず",
"zze": "っぜ",
"zzo": "っぞ",
"dda": "っだ",
"ddzu": "っづ",
"dde": "っで",
"ddo": "っど",
"bba": "っば",
"bbi": "っび",
"bbu": "っぶ",
"bbe": "っべ",
"bbo": "っぼ",
"ppa": "っぱ",
"ppi": "っぴ",
"ppu": "っぷ",
"ppe": "っぺ",
"ppo": "っぽ",
"vvu": "っゔ",
"yya": "っや",
"yyu": "っゆ",
"yyo": "っよ",
}
hiragana_normal = {
"kya": "きゃ",
"kyu": "きゅ",
"kyo": "きょ",
"sha": "しゃ",
"shu": "しゅ",
"sho": "しょ",
"cha": "ちゃ",
"chu": "ちゅ",
"cho": "ちょ",
"nya": "にゃ",
"nyu": "にゅ",
"nyo": "にょ",
"hya": "ひゃ",
"hyu": "ひゅ",
"hyo": "ひょ",
"mya": "みゃ",
"myu": "みゅ",
"myo": "みょ",
"rya": "りゃ",
"ryu": "りゅ",
"ryo": "りょ",
"gya": "ぎゃ",
"gyu": "ぎゅ",
"gyo": "ぎょ",
"ja": "じゃ",
"ju": "じゅ",
"jo": "じょ",
"bya": "びゃ",
"byu": "びゅ",
"byo": "びょ",
"pya": "ぴゃ",
"pyu": "ぴゅ",
"pyo": "ぴょ",
"ka": "か",
"ki": "き",
"ku": "く",
"ke": "け",
"ko": "こ",
"sa": "さ",
"shi": "し",
"su": "す",
"se": "せ",
"so": "そ",
"ta": "た",
"chi": "ち",
"tsu": "つ",
"te": "て",
"to": "と",
"na": "な",
"ni": "に",
"nu": "ぬ",
"ne": "ね",
"no": "の",
"ha": "は",
"hi": "ひ",
"fu": "ふ",
"he": "へ",
"ho": "ほ",
"ma": "ま",
"mi": "み",
"mu": "む",
"me": "め",
"mo": "も",
"ra": "ら",
"ri": "り",
"ru": "る",
"re": "れ",
"ro": "ろ",
"wa": "わ",
"wi": "ゐ",
"we": "ゑ",
"wo": "を",
"ga": "が",
"gi": "ぎ",
"gu": "ぐ",
"ge": "げ",
"go": "ご",
"za": "ざ",
"ji": "じ",
"zu": "ず",
"ze": "ぜ",
"zo": "ぞ",
"da": "だ",
"dzu": "づ",
"de": "で",
"do": "ど",
"ba": "ば",
"bi": "び",
"bu": "ぶ",
"be": "べ",
"bo": "ぼ",
"pa": "ぱ",
"pi": "ぴ",
"pu": "ぷ",
"pe": "ぺ",
"po": "ぽ",
"vu": "ゔ",
"ya": "や",
"yu": "ゆ",
"yo": "よ",
"n": "ん",
"a": "あ",
"i": "い",
"u": "う",
"e": "え",
"o": "お",
}
katakana_alternatives: dict[str, str] = {
"QTSU": "ッ",
"QYA": "ャ",
"QYU": "ュ",
"QYO": "ョ",
"QKA": "ヵ",
"QKE": "ヶ",
"QWA": "ヮ",
"QWI": "ウィ",
"QWE": "ウェ",
"QWO": "ウォ",
"QWU": "ウゥ",
"QJI": "ヂ",
"QJJI": "ッヂ",
"QJA": "ヂャ",
"QJJA": "ッヂャ",
"QJU": "ヂュ",
"QJJU": "ッヂュ",
"QJO": "ヂョ",
"QJJO": "ッヂョ",
"QA": "ァ",
"QI": "ィ",
"QU": "ゥ",
"QE": "ェ",
"QO": "ォ",
}
katakana_geminates: dict[str, str] = {
"KKYA": "ッキャ",
"KKYU": "ッキュ",
"KKYO": "ッキョ",
"SSHA": "ッシャ",
"SSHU": "ッシュ",
"SSHO": "ッショ",
"CCHA": "ッチャ",
"CCHU": "ッチュ",
"CCHO": "ッチョ",
"NNYA": "ッニャ",
"NNYU": "ッニュ",
"NNYO": "ッニョ",
"HHYA": "ッヒャ",
"HHYU": "ッヒュ",
"HHYO": "ッヒョ",
"MMYA": "ッミャ",
"MMYU": "ッミュ",
"MMYO": "ッミョ",
"RRYA": "ッリャ",
"RRYU": "ッリュ",
"RRYO": "ッリョ",
"GGYA": "ッギャ",
"GGYU": "ッギュ",
"GGYO": "ッギョ",
"JJA": "ッジャ",
"JJU": "ッジュ",
"JJO": "ッジョ",
"BBYA": "ッビャ",
"BBYU": "ッビュ",
"BBYO": "ッビョ",
"PPYA": "ッピャ",
"PPYU": "ッピュ",
"PPYO": "ッピョ",
"KKA": "ッカ",
"KKI": "ッキ",
"KKU": "ック",
"KKE": "ッケ",
"KKO": "ッコ",
"SSA": "ッサ",
"SSHI": "ッシ",
"SSU": "ッス",
"SSE": "ッセ",
"SSO": "ッソ",
"TTA": "ッタ",
"CCHI": "ッチ",
"TTSU": "ッツ",
"TTE": "ッテ",
"TTO": "ット",
"NNA": "ッナ",
"NNI": "ッニ",
"NNU": "ッヌ",
"NNE": "ッネ",
"NNO": "ッノ",
"HHA": "ッハ",
"HHI": "ッヒ",
"FFU": "ッフ",
"HHE": "ッヘ",
"HHO": "ッホ",
"MMA": "ッマ",
"MMI": "ッミ",
"MMU": "ッム",
"MME": "ッメ",
"MMO": "ッモ",
"YYA": "ッヤ",
"YYU": "ッユ",
"YYE": "ッエ",
"YYO": "ッヨ",
"RRA": "ッラ",
"RRI": "ッリ",
"RRU": "ッル",
"RRE": "ッレ",
"RRO": "ッロ",
"WWA": "ッワ",
"WWI": "ッヰ",
"WWE": "ッヱ",
"WWO": "ッヲ",
"GGA": "ッガ",
"GGI": "ッギ",
"GGU": "ッグ",
"GGE": "ッゲ",
"GGO": "ッゴ",
"ZZA": "ッザ",
"JJI": "ッジ",
"ZZU": "ッズ",
"ZZE": "ッゼ",
"ZZO": "ッゾ",
"DDA": "ッダ",
"DDZU": "ッヅ",
"DDE": "ッデ",
"DDO": "ッド",
"BBA": "ッバ",
"BBI": "ッビ",
"BBU": "ッブ",
"BBE": "ッベ",
"BBO": "ッボ",
"PPA": "ッパ",
"PPI": "ッピ",
"PPU": "ップ",
"PPE": "ッペ",
"PPO": "ッポ",
"VVA": "ッヴァ",
"VVI": "ッヴィ",
"VVU": "ッヴ",
"VVE": "ッヴェ",
"VVO": "ッヴォ",
"FFA": "ッファ",
"FFI": "ッフィ",
"FFE": "ッフェ",
"FFO": "ッフォ",
"DDI": "ッディ",
"DDU": "ッドゥ",
"TTI": "ッティ",
"TTU": "ッテゥ",
}
katakana_normal: dict[str, str] = {
"KYA": "キャ",
"KYU": "キュ",
"KYO": "キョ",
"SHA": "シャ",
"SHU": "シュ",
"SHO": "ショ",
"CHA": "チャ",
"CHU": "チュ",
"CHO": "チョ",
"NYA": "ニャ",
"NYU": "ニュ",
"NYO": "ニョ",
"HYA": "ヒャ",
"HYU": "ヒュ",
"HYO": "ヒョ",
"MYA": "ミャ",
"MYU": "ミュ",
"MYO": "ミョ",
"RYA": "リャ",
"RYU": "リュ",
"RYO": "リョ",
"GYA": "ギャ",
"GYU": "ギュ",
"GYO": "ギョ",
"JA": "ジャ",
"JU": "ジュ",
"JO": "ジョ",
"BYA": "ビャ",
"BYU": "ビュ",
"BYO": "ビョ",
"PYA": "ピャ",
"PYU": "ピュ",
"PYO": "ピョ",
"KA": "カ",
"KI": "キ",
"KU": "ク",
"KE": "ケ",
"KO": "コ",
"SA": "サ",
"SHI": "シ",
"SU": "ス",
"SE": "セ",
"SO": "ソ",
"TA": "タ",
"CHI": "チ",
"TSU": "ツ",
"TE": "テ",
"TO": "ト",
"NA": "ナ",
"NI": "ニ",
"NU": "ヌ",
"NE": "ネ",
"NO": "ノ",
"HA": "ハ",
"HI": "ヒ",
"FU": "フ",
"HE": "ヘ",
"HO": "ホ",
"MA": "マ",
"MI": "ミ",
"MU": "ム",
"ME": "メ",
"MO": "モ",
"YA": "ヤ",
"YU": "ユ",
"YE": "エ",
"YO": "ヨ",
"RA": "ラ",
"RI": "リ",
"RU": "ル",
"RE": "レ",
"RO": "ロ",
"WA": "ワ",
"WI": "ヰ",
"WE": "ヱ",
"WO": "ヲ",
"GA": "ガ",
"GI": "ギ",
"GU": "グ",
"GE": "ゲ",
"GO": "ゴ",
"ZA": "ザ",
"JI": "ジ",
"ZU": "ズ",
"ZE": "ゼ",
"ZO": "ゾ",
"DA": "ダ",
"DZU": "ヅ",
"DE": "デ",
"DO": "ド",
"BA": "バ",
"BI": "ビ",
"BU": "ブ",
"BE": "ベ",
"BO": "ボ",
"PA": "パ",
"PI": "ピ",
"PU": "プ",
"PE": "ペ",
"PO": "ポ",
"VA": "ヴァ",
"VI": "ヴィ",
"VU": "ヴ",
"VE": "ヴェ",
"VO": "ヴォ",
"FA": "ファ",
"FI": "フィ",
"FE": "フェ",
"FO": "フォ",
"DI": "ディ",
"DU": "ドゥ",
"TI": "ティ",
"TU": "テゥ",
"N": "ン",
"A": "ア",
"I": "イ",
"U": "ウ",
"E": "エ",
"O": "オ",
}
all_dicts: list[dict[str, str]] = [
punctuation,
hiragana_alternatives,
hiragana_geminates,
hiragana_normal,
katakana_alternatives,
katakana_geminates,
katakana_normal,
]
kana: str = romaji
for dict in all_dicts:
for romaji_item, kana_item in dict.items():
kana = kana.replace(romaji_item, kana_item)
return kana
if __name__ == "__main__":
romaji: str = input("Enter a romaji string to convert to kana: ")
print(f"{romaji} in kana is: {romaji_to_kana(romaji)}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment