Skip to content

levenshtein ​

INFO

houki-abbreviations v0.7.1 の dist/index.d.ts と specs/current/levenshtein/spec.md から自動生成しました(仕様 ID 5 件・2026-10-10)。手で編集しないでください。再生成は node scripts/generate-reference.mjs です。

関数 ・ v0.4.0 で追加 ・ family では未使用

Levenshtein 距離 (動的計画法、O(m*n) 時間 / O(min(m,n)) 空間)。 文字単位の挿入 / 削除 / 置換コストはすべて 1。

文字はコードポイント単位で数える(v0.7.0 から)。サロゲートペアで表す文字 (𠮷 U+20BB7 など)は 1 文字で、levenshtein('𠮷', '吉') は 1 (v0.6.1 までは UTF-16 の単位で数えて 2 だった)。

自前実装にした理由は外部依存を増やさないため (本パッケージは 軽量データライブラリの方針なので、fast-levenshtein 等は引き込まない)。

利用者と得られる結果 ​

この関数の利用者と、利用者が渡すもの・得られる結果を示します。

  • houki-abbreviations を import する利用者(独自の検索を組むコードやテスト)。2 つの文字列を渡して編集距離を受け取る。findSimilar と suggestCorrection もこの値で近さを決める

シグネチャ ​

import して呼ぶときの形です。パッケージの型定義(dist/index.d.ts)から写しています。

ts
function levenshtein(a: string, b: string): number;

扱わないこと ​

この関数が意図して扱わないことです。

  • 全角と半角を同じ文字とみなすこと(levenshtein('PL', 'PL') は 2。findSimilar は比べる前に半角にそろえる)
  • 英字の大文字・小文字を同じ文字とみなすこと(levenshtein('A', 'a') は 1)
  • 隣り合う 2 文字の入れ替えを 1 回と数えること(入れ替えは置換 2 回として数える)
  • 文字の種類ごとに操作の重みを変えること

処理の流れ ​

仕様書の「処理の流れ」の節を、図も含めてそのまま写しています。図が大きいので畳んでいます。

処理の流れの図(仕様書の写し)

図の中の番号は「できること」の仕様 ID の末尾 3 桁です。

仕様項目の一覧 ​

この関数の仕様項目 5 件の見出しです。仕様項目は受入テストと 1 対 1 で対応していて、条件と例は仕様書ページで読めます。

仕様項目の見出し(5 件)
仕様 ID仕様項目
001同じ文字列には 0 を返す
002片方が空文字ならもう一方の文字数を返す
003挿入・削除・置換を 1 回 1 として最小回数を返す
004引数の順を入れ替えても同じ値を返す
005BMP の外の文字を 1 文字として数える

関連ページ ​

このページの元になった文書と、あわせて読むページです。

本サイトの内容は調査の出発点であり、法的助言ではありません。個別の事案は資格を持つ専門家に相談してください。免責事項と利用範囲