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などいろいろあるので、その辺も考えないといけない。