Sørensen–Dice文字列類似度
2つの文字列が共有する2文字の組で、似ている度合いを点数にします。nightとnachtが共有するのはhtだけで0.25、まったく同じ文字列なら1です。表記ゆれや重複の確認に便利で、ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- テキスト a
- night
- テキスト b
- nacht
- 係数
- 0.25
- パーセント
- 25
- Aのバイグラム
- 4
- Bのバイグラム
- 4
Sørensen–Dice係数は、完全一致や編集距離の全経路ではなく、共有される文字バイグラムから構築される古典的なファジー文字列類似度の指標です。2つのテキストを受け取ると、本計算機は各文字列の連続する文字ペアをすべて抽出し、それらを多重集合として扱い、共通部分の大きさの2倍を両多重集合の大きさの和で割った値を返します。スコアは0から1の間に収まり、同一文字列は1、完全に交わりのないバイグラム袋は0、nightとniteのような日常的な近似一致や並べ替えた短いトークンはその中間になります。大域的な整列ではなく重なり合うペアに依存するため、わずかな綴り差を許容し、袋状のラベルを比較する際には純粋なレーベンシュタイン距離より語順に脆くありません。学生、データエンジニア、プロダクトチームは、機械学習スタックを立てずに重複排除の手がかり、検索ランキング特徴、宿題の検算に用います。
Sørensen–Diceバイグラム係数の定義
文字列AとBから始めます。各文字列について文字バイグラムの多重集合を作ります。長さnの文字列ではnから1を引いた個の重なり合うペアが得られ、nightはni、ig、gh、htになります。
各ペアの出現回数を数えることで、繰り返し文字は集合の1回の所属ではなく複数トークンとして寄与します。共通部分の大きさは、相異なる各バイグラムについてAとBの出現回数の最小値を足し合わせたものです。Sørensen–Dice係数は、その共通部分の2倍をAのバイグラム総数とBのバイグラム総数の和で割った値です。
正規化後の両文字列が空であるか同一である場合、係数は1と定義されます。文字列が異なり、少なくとも一方が2文字未満のときは比較可能なバイグラムがなく、係数は0です。大文字小文字の折りたたみは任意です。
既定ではバイグラム抽出の前に両側を小文字化するため、Nightとnightは完全一致として採点されます。式は完全に決定的で、通常のUnicode文字列索引付けを超えるロケール照合には依存せず、自動テストと多地域デプロイでも結果が安定します。これは意味的類似度ではありません。
appleとfruitは文字ペアを共有せず、人間が関連すると見てもほぼ0になります。意味が重要なら埋め込み系ツールを、表層形と綴りの近さが重要ならDiceを使ってください。
ファジーバイグラム類似度が製品で役立つ場面
カタログとCRMのチームは、全文ファジー検索を設定せずに数文字だけ違う企業名、商品タイトル、住所行のほぼ重複を統合する際にSørensen–Dice文字列類似度計算機を使います。検索とランキングのエンジニアは、BM25やトークン重なりの横に安価な語彙特徴として係数を使い、特に短いクエリとタイトルでは単語全体の一致より文字ペアの方が誤字を捉えやすいです。
ローカライズとコンテンツQAのスクリプトは、翻訳メモリ編集後にほぼ同一に見える候補文字列に印を付け、レビュー担当が偶発的な綴り差ではなく真の意味のずれに集中できるようにします。
教室や面接対策のプラットフォームは、教科書の式に対する決定的なオラクルを必要とし、学生がnight対nacht型の宿題を検算し、ブラックボックスのスコアだけでなく共通部分とバイグラム数を確認できるようにします。説明可能な多重集合式が欲しいときは本ツールを、挿入と削除のコストが支配的なら編集距離を、意味的関連が製品目標なら埋め込みを選んでください。
可能なら入力を短く保ち、テストでcoefficientとintersectionを固定すれば、ベクトルDBやGPUなしで再現可能なファジースコアが得られます。
活用例
ほぼ重複する名称・タイトルの照合
誤字やわずかな綴り差のある商品タイトル、ベンダー名、SKUラベルを採点し、完全な手作業レビューなしでマージ規則がソフト一致できるようにします。
検索ランキング向け語彙特徴
クエリとタイトルの間のバイグラムDice係数を、軽量ランカーとオフライン評価でトークン重なりと並ぶ透明な特徴として追加します。
宿題とアルゴリズム教育
学生が教科書のペアで多重集合バイグラム式を検証し、係数の横で共通部分とバイグラム数を確認できるようにします。
よくある質問
2つの文字列に対するSørensen–Dice係数とは何ですか?
文字バイグラムの多重集合共通部分の2倍を、両文字列のバイグラム数の和で割った値で、0から1のスコアになります。同一文字列は1です。
一方が空、または1文字だけの場合は?
正規化後の文字列が同一なら1です。異なり、いずれかが2文字未満ならバイグラムは一致できず係数は0です。
nightとnachtが0.25になるのはなぜですか?
どちらの単語も2文字の組が4つあり、共通するのはhtの1つだけです。共通の1組を2倍して、組の合計8で割ると0.25、つまり25パーセントになります。
大文字と小文字で結果は変わりますか?
初期設定では変わりません。比べる前に両方を小文字にそろえるので、Nightとnightは同じと見なされます。コードやパスワード、言語の識別子など、区別が必要なときは大文字と小文字を区別する設定にしてください。
点数が高ければ意味も同じということですか?
違います。この係数が測るのはつづりの共通部分だけです。appleとfruitは関係のある言葉でも共通の組がなく、ほぼ0になります。打ち間違いや重複の発見に使い、意味の比較には使わないでください。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev/dice-coefficient \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text_a":"night","text_b":"nacht"}'const res = await fetch("https://api.kit.forhosting.com/dev/dice-coefficient", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text_a": "night",
"text_b": "nacht"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/dice-coefficient",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text_a": "night",
"text_b": "nacht"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/dice-coefficient", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text_a":"night","text_b":"nacht"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text_a":"night","text_b":"nacht"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/dice-coefficient", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text_a": "night",
"text_b": "nacht"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.dice_coefficient",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
Sørensen–Diceバイグラム係数の定義
パスワード、コード、言語識別子などで大文字小文字を区別する比較が必要なときは、case_sensitiveをtrueにしてください。
入力契約、応答フィールド、検証エラー
各文字列が空になり得るのは意図した境界ケースのみです。例として、nightとnachtは各4ペアのうちhtを1回共有するため、共通部分は1、分母は8、係数は0.25です。ソフト一致にはご自身のしきい値方針を組み合わせてください。検証失敗は課金されません。必須の文字列フィールドtext_aとtext_bを含むJSON本体をPOSTしてください。別名a、string1、s1、left、firstはtext_aへ、b、string2、s2、right、secondはtext_bへ対応し、短いクライアントペイロードも読みやすく保てます。任意のcase_sensitiveの既定はfalseで、真偽値trueまたはfalse、あるいはtrue、false、one、zeroといった一般的な文字列形を受け付けます。欠落フィールド、非文字列型、1万文字を超える文字列は、フィールド名を添えたinvalid_inputで失敗します。本エンドポイントは数値指標を超える合格・不合格ラベルを作りません。成功したparse呼び出しは公開済みの基本料金$0.002を使い、モデルトークンも外向きネットワークもありません。
ファジーバイグラム類似度が製品で役立つ場面
実装が純粋なparseのティアAであるため、成功した各呼び出しはエッジで予測可能な遅延のもと$0.002で済み、無料ブラウザ経路は同一モジュール上でAPIとバイト単位で一致します。
技術的な質問
Sørensen–Dice文字列類似度計算機の呼び出し方は?
text_aとtext_bを文字列として送ってください。大文字小文字を保つ場合はcase_sensitiveをtrueにします。APIはcoefficient、percent、bigrams_a、bigrams_b、intersection、formulaを返します。
大文字と小文字は影響しますか?
既定ではcase_sensitiveはfalseで、バイグラム抽出の前に両文字列が小文字化されます。大文字小文字を区別する比較にはcase_sensitiveをtrueにしてください。
料金はいくらですか?
ブラウザ版は無料です。API要求は成功した呼び出しごとに前払いKIT残高から$0.002です。無効な入力は課金されません。