Utsuho

Utsuho (うつほ) は、日本語テキストの表記揺れを決定的な変換ルールで正規化する Python ライブラリです。

半角・全角の変換や、ひらがな・カタカナの変換といった文字単位の正規化に特化しており、汎用的な Unicode 正規化で起こり得る不要な文字変換を避けられます。

すべての変換は文字単位で行われ、辞書や文脈に依存しない決定的な挙動を持ちます。この特性により、Utsuho は AI エージェントから呼び出される外部ツールとしても適しており、再現性のあるテキスト正規化処理を安定して提供できます。

  • 半角カタカナと全角カタカナの双方向変換

  • ひらがなとカタカナの双方向変換

  • スペース、句読点、ASCII 記号、数字、アルファベットの変換可否を設定可能

  • シェルやパイプライン処理で使いやすい CLI を提供

  • MCP (Model Context Protocol) サーバとしても利用可能

_images/logo_wide.png

Utsuho project logo (wide version)

背景

日本語テキストでは、半角と全角、ひらがなとカタカナなど、同じ内容を複数の表記で表せます。そのため、入力データの統一や検索前処理では、表記揺れの吸収が必要になることがよくあります。

Python 標準ライブラリの Unicode 正規化でも一部の変換は可能ですが、ASCII 記号まで変換されるなど、意図しない変換が含まれる場合があります。

このように、日本語テキストの正規化には「必要な変換だけを行いたい」という要件がありながら、既存の手段では過剰な変換が入りやすいという課題があります。

パフォーマンス

Utsuho は pure Python 実装ですが、文字単位の正規化処理としては実用的なスループットを提供します。

プロジェクトの long-input ベンチマークでは、CPython 3.10 上で、ひらがな・カタカナ変換はおおむね毎秒 700 万から 800 万文字、半角・全角変換はおおむね毎秒 100 万から 300 万文字程度を処理できます。

これらの値は参考値であり、プラットフォーム、Python バージョン、入力の偏り、電源や熱の条件によって変動します。

名称の由来

Utsuho の名称は「うつほ物語」に由来します。平安時代に成立したと考えられるこの物語には、カタカナの手習いに関連する描写が含まれています。

ユーザーガイド

プロジェクト

API リファレンス

索引と表