Utsuho
Utsuho (うつほ) は、日本語テキストの表記揺れを決定的な変換ルールで正規化する Python ライブラリです。
半角・全角の変換や、ひらがな・カタカナの変換といった文字単位の正規化に特化しており、汎用的な Unicode 正規化で起こり得る不要な文字変換を避けられます。
すべての変換は文字単位で行われ、辞書や文脈に依存しない決定的な挙動を持ちます。この特性により、Utsuho は AI エージェントから呼び出される外部ツールとしても適しており、再現性のあるテキスト正規化処理を安定して提供できます。
半角カタカナと全角カタカナの双方向変換
ひらがなとカタカナの双方向変換
スペース、句読点、ASCII 記号、数字、アルファベットの変換可否を設定可能
シェルやパイプライン処理で使いやすい CLI を提供
MCP (Model Context Protocol) サーバとしても利用可能
Utsuho project logo (wide version)
背景
日本語テキストでは、半角と全角、ひらがなとカタカナなど、同じ内容を複数の表記で表せます。そのため、入力データの統一や検索前処理では、表記揺れの吸収が必要になることがよくあります。
Python 標準ライブラリの Unicode 正規化でも一部の変換は可能ですが、ASCII 記号まで変換されるなど、意図しない変換が含まれる場合があります。
このように、日本語テキストの正規化には「必要な変換だけを行いたい」という要件がありながら、既存の手段では過剰な変換が入りやすいという課題があります。
パフォーマンス
Utsuho は pure Python 実装ですが、文字単位の正規化処理としては実用的なスループットを提供します。
プロジェクトの long-input ベンチマークでは、CPython 3.10 上で、ひらがな・カタカナ変換はおおむね毎秒 700 万から 800 万文字、半角・全角変換はおおむね毎秒 100 万から 300 万文字程度を処理できます。
これらの値は参考値であり、プラットフォーム、Python バージョン、入力の偏り、電源や熱の条件によって変動します。
名称の由来
Utsuho の名称は「うつほ物語」に由来します。平安時代に成立したと考えられるこの物語には、カタカナの手習いに関連する描写が含まれています。