2023年12月1日金曜日

漢字の情報取得ライブラリ kanji を作った

今さらですが、欲しくなったので漢字の情報取得ライブラリ @marmooo/kanji を作りました。 漢字の情報と言っても色々ある訳ですが、レベルごとの漢字のリストを取得し、文章のレベルを取得するライブラリです。 特に教育指導要領をチェックするコードは何十回も書いているので、そろそろライブラリが欲しいと思って自作しました。 ついでにかなり色々な機能を付けたので、つよつよです。 漢字の処理は非常に難しいので、このような誰も作らない基盤ライブラリの整備が必要です。

こんな感じで使えます。
import { Kanji, JKAT } from "@marmooo/kanji";

const kanji = new Kanji(list);
const jkat = new Kanji(JKAT); // 教育指導要領 / 日本漢字能力検定
jkat.getGrade("学校");   // --> 0
jkat.getGrade("漢");     // --> 2
jkat.getGrade("うどん"); // --> -1
Kanji クラスの初期化で漢字のリストを読み込むので、カスタム化もできます。 今のところ以下の 9つをサポートしています。 今後も Unicode3Radical, Unicode3RadicalStrokes など追加したい機能はあります。
  • JISCode: JIS 漢字コード (第 1 水準〜第 4 水準)
  • Jinmei: 人名用漢字 (常用漢字, 常用漢字の異体字, 人名用漢字)
  • JKAT: 教育指導要領 / 日本漢字能力検定 (10級〜1級)
  • Unicode1Radical: Unicode 1.1 の康熙字典 214 部首コード
  • Unicode1RadicalStrokes: Unicode 1.1 の康熙字典 214 部首の画数データ
  • JoyoRadical: 常用漢字の康熙字典 214 部首コード
  • JoyoRadicalStrokes: 常用漢字の康熙字典 214 部首の画数データ
  • JoyoStrokes: 常用漢字の画数データ
  • JIS4UnihanStrokes: JIS 第 4 水準の Unihan_IRGSources.txt に基づく画数データ

開発に当たっては色々なことを調査・検証したので、その内容についても記事としてまとめました。

ライブラリ化するときにはとにかく扱いの難しい漢字として「𠮟」があります。 「𠮟」は新しい常用漢字ですが、[音訓の小・中・高等学校段階別割り振り表(平成29年3月)] を見ると、「𠮟」じゃなくて「叱」で書かれているんですよねえ。 漢字検定の漢字一覧も表記は「𠮟」なのですがコピペすると「叱」になったりして困ります。 他にも間違いがいくつかあって紛らわしい。 そういったものは実用上どっちでも良いとされているのがほとんどと思いますが、それならなぜ「𠮟」を常用漢字にしたのだ?という感じはあります。 IME とかでも「しかる しっする」では変換できず、「しつ しった」くらいでしか変換できないので、面倒臭い漢字です。 デザイン差でしかないなら、もう「叱」で良いんじゃない? という気もしますが、ライブラリでは両方考慮することで統一しました。

JLPT も対応しようと思ったのですが、漢検のように情報公開されてないので、 きちんとしたものは作れないと思って無視しました。 リストがないなら漢検の順序で学べば良いはずです。

0 件のコメント: