unicodedataはUnicode正規化ができたり、少し手を入れれば簡易なUnicodeBlock判定ができたりする。
とりあえず基本的なコード。
# Unicodeバージョンの確認 print( unicodedata.unidata_version ) #=> 6.3.0 # Unicode正規化 print( unicodedata.normalize("NFKC", "アイウエオABC") ) #=> アイウエオABC # 汎用カテゴリ(http://www.unicode.org/reports/tr44/#General_Category_Values) print( unicodedata.category("A") ) #=> Lu print( unicodedata.category("b") ) #=> Ll print( unicodedata.category("1") ) #=> Nd print( unicodedata.category("\t") ) #=> Cc print( unicodedata.category("ア") ) #=> Lo print( unicodedata.category("、") ) #=> Po # 名称の取得 print( unicodedata.name("A") ) #=> LATIN CAPITAL LETTER A print( unicodedata.name("あ") ) #=> HIRAGANA LETTER A print( unicodedata.name("イ") ) #=> KATAKANA LETTER I print( unicodedata.name("山") ) #=> CJK UNIFIED IDEOGRAPH-5DDD print( unicodedata.name("〒") ) #=> POSTAL MARK
Unicode Blockの取得はできないらしい。下記に取得用のサンプルコードがあった。
http://stackoverflow.com/questions/243831/unicode-block-of-a-character-in-python?rq=1
平仮名、片仮名、漢字を取る場合は下記のような簡易コードで判定できなくもない。
def isKatakana(ch): return unicodedata.name(ch).startswith("KATAKANA LETTER") def isHiragana(ch): return unicodedata.name(ch).startswith("HIRAGANA LETTER") def isKanji(ch): return unicodedata.name(ch).startswith("CJK UNIFIED") print( isHiragana( "あ" ) ) #=> True print( isKatakana( "あ" ) ) #=> False
漢字はCJK UNIFIEDという指定だとちょっと心もとない。真面目にやるならCJK Radicals Supplement, Kangxi radical, CJK Strokes, CJK Compatibility Ideographsなどいろいろあるので、その辺も考えないといけない。