日本語文字列操作 ひらがな判定など
日本語の文字列の操作について。
英字に比べて非常に扱いにくい印象です。
文字列をソートしたり、ひらがな・カタカナ判定、ひらがな・カタカナ変換などを作ってみました。
# coding: utf-8 hiragana = "ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん" katakana = "ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴ" hankana = "" suuji = "01234567890123456789" # 日本語文字列のソート def sort_str(string, reverse=False): return "".join(sorted(string, reverse=reverse)) # ひらがなだけの文字列ならTrue def ishira(strj): return all([ch in hiragana for ch in strj]) # カタカナだけの文字列ならTrue def iskata(strj): return all([ch in katakana for ch in strj]) # カタカナ・ひらがなだけの文字列ならTrue def iskatahira(strj): return all([ch in katakana or ch in hiragana for ch in strj]) # 漢字だけの文字列ならTrue def iskanji(strj): return all(["一" <= ch <= "龥" for ch in strj]) # ひらがなをカタカナに直す def kata_to_hira(strj): return "".join([chr(ord(ch) - 96) if ("ァ" <= ch <= "ン") else ch for ch in strj]) # ひらがなをカタカナに直す def hira_to_kata(strj): return "".join([chr(ord(ch) + 96) if ("ぁ" <= ch <= "ん") else ch for ch in strj]) # 全角数字を半角数字に直す def hankaku_suuji(strj): dic2 = str.maketrans("0123456789", "0123456789") return strj.translate(dic2) #function test########### if __name__ == "__main__": s ="みなさん、おはようございます!" print(sort_str(s)) #まみよん! print(ishira("あぁ")) print(iskata("パン")) print(iskanji("東京は")) print(iskatahira("ももプリン")) s =[] for i in range(53039, 53139):s += chr(i) print("".join(s)) print("あ:", ord("あ"), "ア:", ord("ア")) print(ord("ア") - ord("あ")) #96 カタカナ-ひらがな変換に使う print(kata_to_hira("サクラ咲く")) print(hira_to_kata("サクラ咲く"))
半角カナの扱いがまだよくわからないです。
漢字→ひらがな、ひらがな→漢字の変換はむずかしそう。