このデモの見方
どのボタンを押しても、確かめてほしいのは次の3つです。 各ボタンの下に「見どころ」を書いてあります。
-
同じ人が1つにまとまるか。 表記の違う「渡邉/渡邊/渡辺」が
同じグループに入り、代表として
渡辺が出ます -
決められないときに、決めずに理由を出すか。 ここが本題です。
候補が2つあるのに片方を選んでしまうライブラリは、選ばなかった側の利用者に対して
黙って間違えます。このライブラリは
ambiguousのような理由を返して止まります -
入力が外に出ていないか。 上の「読み込み後に発生した通信」が
0 件のまま動かないこと
ライブラリを読み込んでいます…
1. 文字列を名寄せキーにするtoMatchingKey()
1行に1件。同じキーになった行が同じグループにまとまります。
縮退できなかった文字はキーの中でそのまま残り、理由つきで
unresolved に報告されます。
2. 1文字の縮退候補を根拠つきで見るreduce()
候補・その候補を裏づける根拠の区分・一意選択の結果(unique)・
どの表の項目で解決したか(resolvedVia)を返します。
異体字セレクタ(IVS/SVS)を付けた入力も受け付けます。
このライブラリが「しない」こと
-
根拠なく1つに決めない。 候補が複数あって、法務省告示の順位・戸籍通達の
経由数・常用漢字/人名用漢字のいずれでも決着しなければ、
uniqueはnullを返します。上のデモでambiguousが出るのはこの場合です。 -
空白と不可視文字は、キーから落とします。 姓名の間に空白を
入れるかどうかは人物の属性ではないので、
渡辺 太郎と渡辺太郎は同じキーになります。ゼロ幅スペースや BOM のような 画面に見えない文字も同じ扱いです——Excel や PDF からの コピーで混入し、見た目が同じなのに一致しない、という形でいちばん困るのがここ。 ただし・やー/―の違い、 ひらがなとカタカナは畳みません。文字列の意味が変わるので、 同じだと決めるのは呼び出し側の仕事です - 逆変換(新字→特定の旧字)は提供しません。 「辺」を「邉」と「邊」の どちらに戻すかを決める根拠は、データの側に存在しないためです。
- 戸籍・法務・金融用途での同一性判断は保証しません。 このライブラリが 保証しているのは「決められないときに決めないこと」であって、「答えが正しいこと」では ありません。人が確認する工程の前段として使ってください。
使う
npm install itaiji-normalize@0.2.0
import { toMatchingKey, reduce } from "itaiji-normalize";
toMatchingKey("渡邉 太郎").key; // "渡辺 太郎"
reduce("朢").unique; // null (候補が2つあり決められない)
依存ゼロ。データは全部同梱で、実行時に外部へ取りに行きません。 Node 18+ / ブラウザ / Cloudflare Workers で動きます。