わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

radicalfinder.rb: 康熙部首と同じ漢字探し

 いきなりですが問題です.

 以下のうち,間違いはどれですか.

  • 「赤」の漢字の部首は「赤」
  • 「青」の漢字の部首は「青」
  • 「黄」の漢字の部首は「黄」
  • 「黒」の漢字の部首は「黒」

 さっそくですが解答です.小学校で学習する範囲では,間違いは一つもありません.
 部首について,2年前に記事を書いています.

 先日,文字検索で賑わいを見せました.

 赤青黄黒を試してみました.「赤」を調べると,「部首内画数 赤部-1画」と出ました.「青」に関しては「部首内画数 靑部-1画」でしたがまあいいでしょう.「黄」の検索結果に出現するのは2文字ですが,真ん中が突き出ていて,MJの番号が少ない方を選ぶと,「部首内画数 黃部-1画」でした.ところで部首と同じ字形の漢字は,漢字辞典では「赤部0画」「赤-0」となるのではないかと思いますが,MJ文字情報検索システムでの表示はいずれも「-1画」です.
 「黒」も2文字で,総画数11画(MJ029894)を選んだところ,部首内画数の表示が違っていました.「火部7画」が1行目,「黒部-1画」が2行目になっているのです.念のため『三省堂 例解小学漢字辞典 第五版』を引いたところ,「黒」の字はp.1093で,「黒-0」とあります.
 部首が複数ある漢字については,2年前の記事でも確認していましたが,「黒」も該当するのには,驚きました.
 ということでこの文字情報基盤データベースを対象に,部首と同じ形の漢字を,調べてみることにしました.一つ一つ検索するのは面倒なので,Rubyスクリプトを作成しました.部首を表す英単語はradical(wikipedia:部首)なので,radicalfinder.rbという名前にしました.ソースファイルはGistに置いています(末尾に,実行結果の一部を貼り付けています).
 処理にあたって,Rubyスクリプトから各漢字の検索では,通信を行っていません.MJ文字情報検索システムのAPIもあるのですが,MJ文字情報一覧表としてExcelファイル(をzip圧縮したファイル)がダウンロードできるので,こちらを解凍し,mji.00601.xlsxを読むようにしました.
 このExcelファイルは行頭を含め58863行に及びます.ファイルの読み込みに関して,使い慣れたrubyXLでは実行時エラーになりました.かわりにRoo*1を採用して,読み出せました.事前にgem install rooを実行しておきます.
 コーディングの前に,mji.00601.xlsxをExcelで開き,上記の「赤部-1画」に対応する情報の所在を確認しました.「赤」の文字は24196行目で,右に見ていくと,T24196のセルに「155」,一つ右のU24196のセルに「0」と書かれています.行頭(1行目)を見ると,「部首1(参考)」と「内画数1(参考)」です.これが4まで(T列からAA列まで)あり,部首2から右に値が書かれている文字は多くありません.
 「155」は,「赤」の部首を表すコードと推測できるのですが,文字コードは不明です…いえ,冒頭でリンクした記事で,リンクしていました.

 康熙字典の部首(康熙部首)は214あり,UnicodeではU+2F00から順に並んでいます.最初の番号が1であることに注意すると,「赤」の部首は,(0x2f00 - 1 + 155).chr('UTF-8')というRubyの式で得ることができました.ただし,irbでこの式を評価したときの"赤"の字形は,かな漢字変換で得られる「赤」の文字と異なっています.部首の文字コードと,部首と同じ形の漢字の文字コードは異なる,ということなのですね.
 当初は小学校で学習する漢字(教育漢字)に限定しようと考えまして,KanjiSorterのkanji-sorter.rbより,「2017年公表,2020年から使用」のkanji1からkanji6までをコピーして取り入れました.教育文字か,Excelファイルの全ての文字かは,radicalfinder.rbのメイン処理のところでハードコードしています.
 大まかな処理はこうです.まずmji.00601.xlsxを行ごとに読み出して,文字(B列の内容)から行(配列)へのハッシュと,全ての文字からなる文字列を構成しました.次に部首を調べたい文字それぞれに対し,内画数1から内画数4までのうち「0」になっている箇所があれば,その一つ左の値の部首コードが,着目する文字と同型と(とりあえず)判定します.
 「とりあえず」と書いたのは,同じ部首に複数の「0画」の漢字があることへの対処も,取り入れているからです.例えば部首が「田」の漢字には,「田」のほか,「由」や「申」も該当します.この点に関しては,Excel出現上位の漢字を採用することにしました.
 そうこうして出来上がったのですが,直感に反する結果になってしまいました.具体的には,「黒」の部首と同じ漢字が,上記のルールでは,「黒」ではなく「点」になってしまうのです.「点」も「黒」も,「203」と「0」の組み合わせは,部首2と内画数2に現れます*2.「黒」の部首と同じ漢字を,「黒」にできなかったのは,今回の検索方法の限界と言わざるを得ません.
 ともあれ,部首の(Unicodeの)文字コードと,それと同じ形の漢字の文字コードとの対応が得られたら,次に考えたいのは,部首の名称との対応づけです.「灬」なら「れっか」と呼ばれるものです.
 少し探すと,上でリンクした康熙部首のリンク先に,読みだけでなく,「康熙部首と同じ漢字探し」の答えがすべて,書かれていました.

*1:https://github.com/roo-rb/roo

*2:「点」の関連字に「點」があります---この字は「黒部5画」なのですが.