1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

漢数字を数字に直すと「一宮市」が「1宮市」になる問題を、判定テスト集つきで小さく解いた

1
Posted at

困りごと

日本語の文章を検索やRAGに入れる前に、漢数字を数字にそろえることがあります(三億五千万円 → 350000000円)。
ところが、文中の漢数字を全部変換すると、数ではない所まで変わります。

  • 地名: 一宮市 → 1宮市、四日市 → 4日市
  • 人名・社名: 五十嵐 → 50嵐、三菱 → 3菱
  • 言葉・熟語: 統一 → 統1、一石二鳥 → 1石2鳥

漢数字の変換そのものはよく使われています(kanjize は週11,851ダウンロード: https://depscope.dev/pkg/pypi/kanjize )。正規化ライブラリの jpnorm も、名前(加藤一二三)の誤変換に注意書きをしています(https://pypi.org/project/jpnorm/ )。

作ったもの

JP Kansuji Guard(MIT・Python標準ライブラリのみ・外部通信なし)。
https://github.com/ayatrader/jp-kansuji-guard

決まりは3つです。

  1. 単位・助数詞(円・人・年・条・階・% など)が続くとき、または 万/億/兆 の金額のときだけ変換する
  2. 地名・人名・社名・言葉・熟語の一覧(252語、手書き)に入る所は変換しない
  3. 読み方で意味が変わる所(十分=じゅうぶん/じゅっぷん、一時、一番、二三人)とおおよその数(数万円)は変換せずに flags で返す
from kansujiguard import convert
convert("三菱の売上は三億円、十分な利益")["text"]
# '三菱の売上は300000000円、十分な利益'(十分 は flags に入る)
convert("令和六年三月十五日、第三条")["text"]
# '令和6年3月15日、第3条'

大字(金壱萬円也 → 金10000円也)や 1億2,300万円 のような混ざった書き方も読めます。AIエージェントからは MCP サーバー(python -m kansujiguard.server)として呼べます。

判定テスト集(126問)

変換すべき48問、変換してはいけない69問、触らないでほしい9問。出力全体の完全一致で採点します。

方法 点数
全部変換する素朴な方法(リポジトリ内の比較用) 47/126(37.3%)
kansujiguard 0.1.0 126/126

2行目はルールとテストを一緒に作ったので、当然の数字です。外の文で正しいことの証明ではありません。自分の変換関数も python -m kansujiguard.bench --module パッケージ.モジュール:関数 で採点できます。

できないこと

  • 一覧に無い地名・人名は、助数詞が続くと変換されることがあります
  • 小数(三・五)と範囲(三〜五人)は扱いません

失敗する文を Issue で教えてもらえると、テスト集に足します。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?