Skip to content

feat: 半角の数量を位取りで読む - #34

Merged
owayo merged 1 commit into
mainfrom
feat/issue-31-ascii-quantity-readings
Oct 12, 2026
Merged

owayo merged 1 commit into
mainfrom
feat/issue-31-ascii-quantity-readings

Conversation

@owayo

@owayo owayo commented Oct 12, 2026

Copy link
Copy Markdown
Owner

半角数字の数量が1桁ずつ読まれ、「10分」がイチゼロフン、「1,000円」がイチ・カンマ・ゼロゼロゼロエンになっていました。元入力で数量と識別子を判定し、最良パスの後で数詞の範囲を1トークンにまとめ、位取りの読みと助数詞の補正を適用します。

助数詞・年度・位の数詞・許可した英字単位に隣接する数量を対象にします。整数部と小数部はそれぞれ16桁まで、整数は兆まで扱います。桁区切りと小数の構文を検査し、単独の数、番号、不正形式、符号付き数、混在・全角数字、空白で離れた単位を保護します。登録済みの「2026年度」「2.5倍」などは優先します。

数詞の合成では原入力の表層・原形・UTF-8範囲を保持し、コストを広い型で合計して最後にi16へ飽和させます。既存出力を変更せず、元入力の候補と保護状態をチャンク・文をまたいで線形に処理します。

設計・差分レビューの指摘を採用し、候補全体の構文検査、英字単位の完全一致、保護された「兆」と混在表記の補正防止、チャンクをまたぐ保護cursorを実装しました。既存の1桁数字の音便を一律に止める提案は、#30の既存出力を変えるため採用せず、新しい位取り・音便の補正を保護しています。最終レビューでは指摘なしでした。

検証:

  • CI相当のformat・workspace clippy/test・featureなし/analyzer/downloadのclippy/testが成功。
  • 配布3辞書の数詞/助数詞・ASCII数量の正負例が成功。
  • 166件の実Analyzer保護ケースで、Python公開トークンの全フィールドが変更前と一致。
  • Python 33ケースとC ABI 33ケースのフィールド/範囲がRust/CLIと一致。Python batchもscalarと一致。
  • 実AnalyzerからKotonohaのNJD・アクセント・音素・HTSラベルまで123ケースが成功。
  • 17,468行・変更前3,615,204トークンで、14,945個の数を合成。合成範囲の素性とコストを検査し、合成しない語の読み以外の全フィールドが一致。
  • 前後を交互に3回測定した解析時間は、追加処理により5.7〜8.5%増加。

Closes #31

半角数字の数量が一桁ずつの読みになっていたため、元入力で数量と識別子を判定し、明確な数量の数詞範囲を最良パスの後でまとめる。
カンマ区切りと小数、百・千・万・億・兆を扱い、数詞と助数詞の補正につなげる。
登録済みの辞書語を優先し、番号・不正な表記・空白で離れた単位を保護する。合成した数詞は原入力の表層・位置を保持し、コストを合計する。
@owayo owayo self-assigned this Oct 12, 2026
@owayo
owayo merged commit b86ea35 into main Oct 12, 2026
8 checks passed
@owayo
owayo deleted the feat/issue-31-ascii-quantity-readings branch October 12, 2026 21:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

半角数字が 1 桁ずつの 名詞,数 になり、10分 をイチ・ゼロ・フンと読む

1 participant