Skip to content

findSimilar ​

INFO

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

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

あいまい一致 (Levenshtein 距離ベース)。「うろ覚え」入力で類似エントリを 探すときに使う。

編集距離で近い名前を返す関数で、名前の一部から一覧を得る関数ではない。 民法 のような短い名前を渡しても、民 で始まる法令の一覧にはならない。 一覧が欲しいときは searchByName を使う。編集距離の比(距離 ÷ 長い方の文字数)が 1/3 を超える名前は maxDistance 以下でも返さない(v0.7.0 から。距離 0 は文字数によらず返す)。

利用者と得られる結果 ​

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

  • houki-abbreviations を import する利用者(houki-nta-mcp・houki-egov-mcp などの MCP サーバー、または独自のコード)。労働基準法施行例 のように 1〜2 文字誤った名前を渡して、近い名前を持つ辞書のエントリと、その近さ(編集距離)を受け取る
  • この関数は編集距離で近い名前を返す関数で、名前の一部から一覧を得る関数ではない。民法 のような短い名前を渡しても、民 で始まる法令の一覧にはならない。一覧が欲しいときは searchByName を使う(README と JSDoc にも同じ文を書く)

シグネチャ ​

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

ts
function findSimilar(query: string, options?: _FuzzyOptions): _FuzzyMatch[];

例 ​

型定義の JSDoc に書かれている例です。

例
ts
import { findSimilar } from '@shuji-bonji/houki-abbreviations';

findSimilar('労働基準法施行例');
// → [{ entry: 労基則, matchedKey: '労働基準法施行規則', distance: 2 }]
findSimilar('民法');
// → 民(民法、0)・民訴(民訴法、1)・民執(民執法、1)・民保(民保法、1)

扱わないこと ​

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

  • 名前の一部で探すこと(searchByName。findSimilar は名前全体どうしの編集距離を比べる)
  • 略称と正式名称のように編集距離が大きい組を結び付けること(辞書の aliases に登録して resolveAbbreviation で引く)
  • 英字の大文字・小文字の違いを同じとみなすこと(findSimilar('pl法') は 製造物責任法 を返さない)
  • 正式名称だけを文字列で返すこと(suggestCorrection)

処理の流れ ​

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

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

呼び出しを受けてから配列を返すまでに、何をどの順で確かめるかを示します。図の中の番号は「できること」の仕様 ID の末尾 3 桁です。

仕様項目の一覧 ​

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

仕様項目の見出し(22 件)
仕様 ID仕様項目
001名前が一致するエントリは distance 0 で先頭に返す
002編集距離が maxDistance 以下のエントリだけを返す
003既定では編集距離の小さい順に並べる
004limit の件数で打ち切る
005filter で候補のエントリを絞る
006空の query には空配列を返す
007既定では全角英数字を半角にしてから比べる
008normalize が false のときは全角英数字をそのまま比べる
009全角で引いても matchedKey は辞書の表記のまま返す
010sortByScore が false のときは辞書の並びのまま limit 件で打ち切る
011distance が同じエントリは辞書の並びのまま並べる
012limit を省くと 5 件で打ち切る
0131 未満の limit には RangeError を投げる
014maxDistance を省くと 2 として扱う
015maxDistance が 0 のときは名前が一致するエントリだけを返す
016maxDistance が負の値のときは空配列を返す
0171 つのエントリで距離が同じ名前が複数あるときは、略称・正式名称・別名の順で先の名前を matchedKey にする
018小数の limit には RangeError を投げる
019NaN・Infinity・数でない limit には例外を投げる
020500 を超える limit には RangeError を投げる
021編集距離の比が 1/3 を超える名前は返さない
022距離 0 の一致は文字数によらず返す

関連ページ ​

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

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