Skip to content

name_ipaの語末撥音ɴをAzureが読まない不具合を修正#1538

Merged
TinyKitten merged 3 commits into
devfrom
fix/name-ipa-uvular-nasal
Jun 16, 2026
Merged

name_ipaの語末撥音ɴをAzureが読まない不具合を修正#1538
TinyKitten merged 3 commits into
devfrom
fix/name-ipa-uvular-nasal

Conversation

@TinyKitten

@TinyKitten TinyKitten commented Jun 16, 2026

Copy link
Copy Markdown
Member

概要

name_ipa / ja-JP name_tts_segments の撥音「ん」を表す非ASCIIの IPA 鼻音(口蓋垂 ɴ / 口蓋 ɲ / 軟口蓋 ŋ)を ASCII の n に統一し、Azure ja-JP の <phoneme alphabet="ipa"> で「ん」が脱落する不具合を修正します。

変更の種類

  • バグ修正
  • 新機能
  • データの修正・追加
  • リファクタリング
  • ドキュメント
  • CI/CD
  • その他

変更内容

Azure AI Speech の <phoneme alphabet="ipa"> は非ASCIIの鼻音 ɴ / ɲ / ŋ を音節化せず、「ん」が脱落していた(語末「〜線」…seɴ 等)。両唇音前の m(ASCII)以外の撥音同化先をすべて n に統一する。

  • stationapi/src/domain/ipa.rs
    • nasal_for_following を簡素化: 両唇音前のみ m、それ以外(口蓋 ɲ・軟口蓋 ŋ・歯茎・語末・母音前)はすべて n
    • 母音・半母音(ヤ行 j / ワ行 w)が続く撥音には音節境界 . を挿入し、n がコーダのまま残るようにする(例: 新江古田 ɕin.egota、新横浜 ɕin.jokohama)。これがないと Azure が n+母音を「な行」に融合させる(しねごた)
    • ローマ字オーバーライド kutchan(倶知安)ɴnshim(新)ɴn
  • 影響範囲は name_ipa とカタカナ由来 ja-JP name_tts_segments[].pronunciation のみ。en-US セグメント・アクセント核 ˈ の付与ロジックは不変
  • /ニャ 等の onset 子音 ɲ は撥音ではないため変更なし
  • 既存テストの ɴ / ɲ / ŋ 期待値(ipa.rs / line.rs / station.rs)を更新し、西武新宿線・新江古田・新横浜のテストを追加

主な読み上げの変化(IPA)

路線/駅 変更前 変更後
西武豊島線 …seɴ(ん脱落) …sen
西武新宿線 …ɕiɲdʑɯkɯseɴ …ɕindʑɯkɯsen
東北新幹線 …ɕiŋˈkanseɴ …ɕinˈkansen
新江古田 …iɴegota(ん脱落) …in.egota
新横浜 …iɲjokohama …in.jokohama

テスト

  • cargo fmt --all -- --check が通ること
  • cargo clippy -- -D warnings が通ること
  • cargo testSQLX_OFFLINE=true)が通ること

注: ɲ / ŋ / 母音前の挙動は実機(Azure)未検証。語末 ɴ のみ Issue #1536 で実機検証済み。非ASCII鼻音は同根のため n 統一で解消される想定。

関連Issue

Closes #1536

スクリーンショット(任意)

Summary by CodeRabbit

リリースノート

  • Bug Fixes
    • 音声合成の精度向上:日本語の駅名を含む音声表記処理を改善しました。撥音の処理ルールを更新することで、複合語や複雑な音韻を含む駅名などの発音がより正確に表現されるようになりました。

Azure ja-JP の <phoneme alphabet="ipa"> が口蓋垂鼻音 ɴ を音節化せず、
「〜線」(…seɴ) 末尾の「ん」が脱落していた。語末・母音前の ɴ を n に統一する。
子音前の m / ŋ / n 同化とアクセント核付与は不変。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@TinyKitten TinyKitten self-assigned this Jun 16, 2026
@coderabbitai

coderabbitai Bot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 065cc5a5-8799-4b5a-bfdd-5b1cc22d2a29

📥 Commits

Reviewing files that changed from the base of the PR and between 3408d00 and 6d1c0ee.

📒 Files selected for processing (3)
  • stationapi/src/domain/ipa.rs
  • stationapi/src/use_case/dto/line.rs
  • stationapi/src/use_case/dto/station.rs

📝 Walkthrough

Walkthrough

ipa.rs の撥音「ン」IPA 出力において、nasal_for_following のデフォルト(語末・母音前)を ɴ から ASCII n へ統一した。また is_ipa_vowelstarts_with_vowel_or_semivowel ヘルパを追加し、撥音直後が母音/半母音の場合に音節境界 . を挿入するロジックを追加した。これに伴い ipa.rsline.rsstation.rs 各所のテスト期待値を更新した。

Changes

撥音IPA統一と音節境界処理

Layer / File(s) Summary
撥音同化ロジックと母音判定ヘルパの変更
stationapi/src/domain/ipa.rs
nasal_for_followingm/n のみへ統一。is_ipa_vowelstarts_with_vowel_or_semivowel ヘルパを追加し、MoraicNasal 出力で母音/半母音前に . を挿入するロジックへ変更。コメント・ハードコード IPA マッピング(kutchanshim)も修正。
ipa.rs テスト期待値の更新
stationapi/src/domain/ipa.rs
test_shinjukutest_inagekaigantest_koentest_shin_yokohamakaigan 複合分割・全角括弧区切り等、撥音と音節境界変更後の出力へテスト期待値を更新。
line.rs・station.rs テスト期待値の更新
stationapi/src/use_case/dto/line.rs, stationapi/src/use_case/dto/station.rs
「線」「本線」「新幹線」「京成本線」「中黒」含む路線名、稲毛海岸 roman IPA、葛西臨海公園 TTS セグメントの各テスト期待値を ɴ→n 変更後の出力へ差し替え。

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • TrainLCD/StationAPI#1532: stationapi/src/domain/ipa.rscompute_line_ipa 内で同様に撥音関連の音韻同化ロジックと name_ipa テスト期待値を更新している。
  • TrainLCD/StationAPI#1533: ipa.rs の「・」や全角括弧の区切り処理・撥音規則と、line.rs のテスト期待値更新が本 PR と同系統の修正として直結している。

Poem

🐰 ɴ を捨てて n になったよ、
撥音「ん」は Azure に届く、
音節境界 . が守ってくれる、
線の名前がちゃんと聞こえる、
うさぎも「せん」って言えるね!🎵

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed PRタイトルは、撥音ɴをAzureが読まないというメインの問題と、それをname_ipaで修正するという内容を的確に要約している。
Description check ✅ Passed PR説明では、テンプレートの主要セクション(概要、変更の種類、変更内容、テスト、関連Issue)が完全に記入されており、具体的な変更内容と影響範囲が詳細に説明されている。
Linked Issues check ✅ Passed PR内容は#1536の要件を完全に満たしており、非ASCII鼻音(ɴ/ɲ/ŋ)をASCIIのnに統一し、音節境界挿入を追加している。既存テスト期待値の更新も完了している。
Out of Scope Changes check ✅ Passed すべての変更は#1536のAzure ja-JP鼻音問題に直接関連しており、name_ipaと日本語TTSセグメントの修正のみで、en-USセグメントやアクセント核ロジックは変更されていない。
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/name-ipa-uvular-nasal

Comment @coderabbitai help to get the list of available commands and usage tips.

TinyKitten and others added 2 commits June 16, 2026 22:47
西武新宿線の「新」(ɲ) や新幹線系の「新」(ŋ) も非ASCII鼻音で
Azureが脱落させるため、両唇音前のm以外はすべてnに統一。
母音・半母音(ヤ行j/ワ行w)が続く撥音は音節境界.を挿入し、
新江古田(しん.えごた)・新横浜(しん.よこはま)が「な行」に
融合しないようにする。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@TinyKitten TinyKitten merged commit d18d16d into dev Jun 16, 2026
7 checks passed
@TinyKitten TinyKitten deleted the fix/name-ipa-uvular-nasal branch June 16, 2026 14:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

name_ipa の語末撥音 ɴ を Azure が読まず「〜線」が「〜せ」になる

1 participant