テキストから Unicode の結合文字を削除
このツールは、Unicode テキストを正規分解した後、結合するダイアクリティカルマークを除去します。é、ñ、ü などのアクセント付き文字は基底文字になり、句読点、空白、記号、大文字と小文字、関係のない文字体系はそのまま残ります。検索インデックス、識別子、ファイル名、URL スラッグにアクセントを区別しない表現が必要で、広範な翻字や言語固有の綴り規則までは適用したくない場合に適しています。処理は決定的でリクエスト内だけで完結し、コピーまたは次の正規化工程へ直接渡せる単純なテキスト値を返します。
無料で実行
この変換で行われる処理
Unicode では、多くのアクセント付き文字を複数の方法で表現できます。たとえば é は、合成済みの単一コードポイントとして保存することも、基底文字 e の後に結合用アキュートアクセントを置いて保存することもできます。見た目だけを比較しても、どちらの表現かは判別できません。この機能は最初に、一般に NFD と呼ばれる Unicode の正規分解を適用します。これにより、正規分解を持つ文字は基底文字と後続のマークに分かれます。次に、Unicode のすべてのマークカテゴリに属する文字を除去します。その結果、café、piñata、Ångström は cafe、pinata、Angstrom になります。小文字化、空白の圧縮、句読点の削除、記号の置換は行いません。また、完全な ASCII 翻字を保証するものでもありません。ł のように正規分解を持たない文字は残ります。この限定された動作は意図的です。小文字化、句読点処理、スラッグ形式などの規則と明示的に組み合わせられる、予測可能な正規化処理として利用できます。
安定した検索キーとスラッグの作成
アクセントを区別しない検索では、元の値と正規化したキーを別々に保存すると扱いやすくなります。表示用には元の綴りを保持し、この機能で比較用フィールドを作成してください。検索語にも照合前に同じ処理を適用すれば、cafe と入力した利用者が café を見つけられ、検索結果には正しいアクセント付き表記を表示できます。スラッグ生成では、出力を初期工程として利用できます。まずマークを除去し、その後で小文字化、空白の置換、プロジェクト固有の句読点規則を適用します。分解によって合成済み文字に付いていたマークが明示されるため、処理順序は重要です。この操作は決定的であり、同じ Unicode 入力からは常に同じ出力が得られます。そのため、キャッシュキーや再現可能なデータ準備にも使えます。ただし、正規化はロケール対応の照合順序に代わるものではありません。アクセント付き文字を異形とみなすか別の文字とみなすかは言語によって異なります。元のテキストを保持し、製品と利用者に適した場合に限ってアクセントを無視する照合を選択してください。
文字体系ごとの境界と確認方法
除去規則は、西欧言語でよく使われるアクセント範囲だけでなく、Unicode 全体の結合マークを対象にします。技術的には一貫していますが、マークが重要な情報を担う文字体系では影響が大きくなる場合があります。検索、ルーティング、識別情報に結果を使う前に、アプリケーションが受け付ける各言語の代表的な内容でテストしてください。絵文字の異体字セレクタなど、マークに分類される別の文字も除去される場合があります。そのため、出力は表示用の完全な複製ではなく、正規化されたキーとして扱ってください。正規分解は互換分解とは意図的に異なります。装飾形や互換文字を広く単純化せず、汎用的な翻字機能を装うこともありません。確認時には、同じ例の合成済み表記と分解済み表記を比較し、結果が一致することを確かめます。さらに、句読点、非ラテン文字、絵文字、分解を持たない文字もテストに含めてください。これらの事例から、この限定的な処理で十分か、明示的に選んだ別の正規化工程が必要かを判断できます。
活用例
アクセントを区別しない検索キーの作成
正規化した補助値を保存し、アクセントなしの検索語から正しい綴りの名前や用語を見つけられるようにします。
URL スラッグ用テキストの準備
分解可能なアクセント付き文字を基底形にしてから、小文字、区切り、句読点の規則を適用します。
異なる Unicode 表現の比較
合成済み表記と結合マークを使う表記を同じ基底文字表現に正規化し、決定的に比較します。
よくある質問
この機能は何を除去しますか?
Unicode の正規分解を適用し、結合するダイアクリティカルマークを含む Unicode のマークカテゴリの文字を除去します。
すべてのテキストを ASCII に変換しますか?
いいえ。基底文字への正規分解を持たない文字は残り、句読点、記号、他の文字体系の文字も維持されます。
小文字化や完全なスラッグ整形も行いますか?
いいえ。小文字化、空白の置換、句読点の除外、区切り文字の規則は、後続の明示的な工程として適用してください。
合成済みと分解済みのアクセントは同じ結果になりますか?
はい。マークを除去する前に正規分解するため、合成済みの é と、e にアキュートアクセントを組み合わせた表記は同じように単純化されます。
API リクエストの料金はいくらですか?
各 API リクエストは $0.002 です。ネットワークやサーバー状態が不要なため、生成されるブラウザ実行機能でも利用できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/str/remove-diacritic-marks \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Crème brûlée — déjà vu in São Paulo"}'const res = await fetch("https://api.kit.forhosting.com/str/remove-diacritic-marks", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Crème brûlée — déjà vu in São Paulo"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/remove-diacritic-marks",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Crème brûlée — déjà vu in São Paulo"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/remove-diacritic-marks", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Crème brûlée — déjà vu in São Paulo"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Crème brûlée — déjà vu in São Paulo"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/remove-diacritic-marks", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "Crème brûlée — déjà vu in São Paulo"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.remove_diacritic_marks",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |