最近、文字列から漢字だけを抽出したいとか漢字の使用率を知りたいなどと言う無茶な話を耳にする。
「漢字」の定義すらよくわからないのに。
シフトJISであれば[亜(0x889F)-黑(0xEEEC)]の範囲とすれば済みそうだけどUNICODEはそう簡単にいかない。
UNICODEの歴史を知っている人ならわかると思うけど、CJKという形で漢字を半ば無理矢理詰め込み、その後でどんどん漢字を追加していったので漢字がひとかたまりになっていないから。どうしよう?
さしあたりウィキペディアの「CJK統合漢字」(2021年12月9日 (木) 14:08 UTC,URL https://ja.wikipedia.org/wiki/CJK%E7%B5%B1%E5%90%88%E6%BC%A2%E5%AD%97)のページ末尾に「UnicodeにおけるCJK漢字」という表があるのでこれを元にした判別をしてみた。
あくまで個人的な見解です。
■丸ごと漢字と見なして良さそうなブロック
ブロック | 範囲 | 備考 |
---|---|---|
CJK部首補助 | 2E80-2EFF | |
康煕部首 | 2F00-2FDF | |
CJKの筆画 | 31C0-31EF | 漢字の筆画なので漢字とみなして良いと思う。 |
CJK統合漢字拡張A | 3400-4DBF | |
CJK統合漢字 | 4E00-9FFF | JISX0208系の漢字の大半はココ。 漢字とみなして良いと思う。 |
CJK互換漢字 | F900-FAFF | |
CJK統合漢字拡張B | 20000-2A6DF | SIP(追加漢字面)なので漢字とみなして良いと思う。 |
CJK統合漢字拡張C | 2A700-2B738 | |
CJK統合漢字拡張D | 2B740-2B81D | |
CJK統合漢字拡張E | 2B820-2CEA1 | |
CJK統合漢字拡張F | 2CEB0-2EBE0 | |
CJK互換漢字補助 | 2F800-2FA1F | |
CJK統合漢字拡張G | 30000-3134A | TIP(第三漢字面)なので漢字とみなして良いと思う。 |
■一部の文字は漢字
ブロック | 範囲 | 備考 |
---|---|---|
CJKの記号及び句読点 | 3000-303F | 本領域に属している句読点などは漢字ではないと思うが、「漢数字の0(〇)」だけは漢字だと思う。 |
囲みCJK文字・月 | 3200-32FF | 大半は「㈪」などの文字なので漢字ではないと思うが、「㋿」は漢字かもしれない。 |
CJK互換用文字 | 3300-33FF | 大半は「㌀]などの文字なので漢字ではないと思うが、「㍻㍼㍽㍾㍿」は漢字かもしれない。 |
■漢字…なのかもしれない(漢字と言うには無理があるか?)
ブロック | 範囲 | 備考 |
---|---|---|
漢字構成記述文字 | 2FF0-2FFF | IDS。本文字の後ろに漢字が続くので漢字と見なしても良いかも知れない。 |
囲み漢字補助 | 1F200-1F2FF | 「🈡」などのARIB文字。「㋿」などと同じと見なすならそれらは漢字なのかも。 |
■漢字では無い
ブロック | 範囲 | 備考 |
---|---|---|
CJK互換形 | FE30-FE4F | 縦書き用の括弧などの文字。漢字ではない。 |
他にも「漢文用記号」としてU+3190~319F(㆐~㆟)があるけど、それは読み順などを指示する記号なので漢字扱いにはしないことにする。
下記の表は日本の各仕様がUNICODEのどこかを調査してみた結果。
※2022年3月6日現在の情報に基づく。文字はgithubのこれを基にした。
CJK統合漢字 | CJK互換漢字 | CJK統合漢字拡張A | CJK統合漢字拡張B | |
---|---|---|---|---|
第一水準漢字 | ✓ | |||
第二水準漢字 | ✓ | |||
第三水準漢字 | ✓ | ✓ | ✓ | ✓ |
第四水準漢字 | ✓ | ✓ | ✓ | ✓ |
常用漢字 (異体字含めず) | ✓ | ✓ ※𠮟(U+20B9F) のみ | ||
人名用漢字 | ✓ | ✓ |
上記より「CJK統合漢字をはじめとする4つの領域の範囲であるか?」で、「日本でごく一般に使用される漢字」の最低限の判定は可能だと思う。
ちなみにCJK統合漢字拡張BはSIPに属していて、そのSIPは「追加漢字面」という「この面は漢字です」という場所なので、「CJK統合漢字拡張B」と限定せずにSIPの範囲(U+20000~2FFFD)でチェックした方が後々楽になるかも知れない。
※SIPにはCJK統合漢字拡張Bに加え、CJK統合漢字拡張C~F、CJK互換漢字補助も含まれるので