
moonshine-tts 意大利语 G2P 词典资产解析data/it/dict.tsv 的来源、重建与 ItalianRuleG2p 实战指南【免费下载链接】moonshineVery low latency speech to text, intent recognition, and text to speech, for building voice agents and interfaces项目地址: https://gitcode.com/GitHub_Trending/moonshine3/moonshine本文围绕 moonshine-tts 中意大利语it语言包的运行时数据资产展开core/moonshine-tts/data/it/dict.tsv是一份「词形 → IPA 音标」的词典文件是 C 端ItalianRuleG2p完成意大利语文本转音素G2P的核心查表数据。读完本文你将掌握该词典的格式与数据来源、如何用仓库脚本一键重建、ItalianRuleG2p在源码层面如何加载并使用它词表优先、规则兜底以及如何通过 CLI 与配置项把它接入 moonshine-tts 的文本转语音TTS与 G2P 管线。一、资产概览data/it/ 目录里有什么core/moonshine-tts/data/it/目录承载意大利语 G2P 所需的全部运行时数据目前包含一份说明文档与一份词典数据文件作用dict.tsv词形 → IPA 音标映射表供 CItalianRuleG2p使用见 data/it/README.mdREADME.md本目录的数据说明内容、来源、重建方法按 data/README.md 的约定data/树下每个子目录对应一种语言的语言包意大利语it目录的角色是Italian IPA lexicon意大利语 IPA 词典。需要特别注意的是二进制模型与大数据文件不直接签入 git。要获得完整的dict.tsv等资产需在仓库根目录执行# 从仓库根目录执行拉取 tts 相关语言包资产含 data/it/dict.tsv scripts/fetch-voice-assets.sh tts运行时 SDK 也会按需从https://download.moonshine.ai/tts/下载同一批文件维护者通过scripts/upload-tts-assets.sh发布更新。这份data/it/目录是面向自包含 C 构建的精简副本。二、dict.tsv 的格式与在 G2P 中的角色dict.tsv采用经典的「制表符分隔两列」词典格式第一列意大利语词形surface form例如casa、perché第二列该词对应的 IPA 音标例如ˈkasa、perˈke。C 端加载逻辑位于 italian.cpp逐行读取跳过空行与#注释行按第一个\t拆出词形与 IPA词形会经过normalize_lookup_key_utf8规范化统一大小写、将弯引号’U2019归一为直撇号、剔除不在合法字符集合内的符号只有规范化后非空的条目才会进入内存词典。同时源码采用「小写优先」的冲突策略如果同一规范化键同时存在大写与小写条目小写条目会覆盖大写条目对应测试见 italian-rule-g2p-test.cpp。词典路径的解析规则ItalianRuleG2p构造函数直接接收词典路径而工厂层提供了默认解析逻辑。resolve_italian_dict_pathitalian.h、italian.cpp会返回model_root/it/dict.tsv即模型根目录下的it/dict.tsv。对应地G2P 资产键kG2pItalianDictKey定义为it/dict.tsv见 moonshine-g2p-options.hCLI 的默认路径则是当前目录下的data/it/dict.tsv见 italian-rule-g2p-cli.cpp。三、数据来源与许可证为什么是 WikiPron 而不是 ipa-dictdata/it/README.md 明确给出了dict.tsv的来源与许可上游来源CUNY-CL/wikipron 项目的抓取 TSV具体为ita_latn_broad意大利语、拉丁字母转写、宽式音标许可证Apache-2.0归一化方式由仓库脚本scripts/download_multilingual_ipa_lexicons.py归一化为仓库统一格式的 TSV背景说明ipa-dict项目并未收录意大利语因此本仓库的意大利语词典由 WikiPron 补齐该脚本的 docstring 中有详细对照表。这一点与 data/README.md 的「再生验证2026-03-30」记录相互印证download_multilingual_ipa_lexicons.py对de、fr、it等 11 种语言的dict.tsv均能做到逐字节一致Byte-identical即重建结果与仓库中已签入的文件完全相同词典类资产的重建是确定性的。四、重建 dict.tsv一条命令复现数据data/it/README.md 给出的重建命令为# 在仓库根目录执行 python scripts/download_multilingual_ipa_lexicons.py --only it该命令会写入两个文件data/it/dict.tsv规范化后的词形 → IPA 词典data/it/source.txt抓取时的上游原始数据便于追溯与审计。如果需要再把dict.tsv复制进data/it/目录即可完成本地更新。由于脚本是确定性的见上文再生验证用--only it只重建意大利语不会影响其他语言包。五、源码级剖析ItalianRuleG2p 如何消费 dict.tsvItalianRuleG2p定义于 italian.h实现于 italian.cpp是「词典 规则」混合型 G2P镜像了 Python 端italian_rule_g2p.py/italian_numbers.py的行为。5.1 方言标识与工厂接入该类支持多个方言别名dialect_ids()返回it、it-IT、it_it、italiandialect_resolves_to_italian_rules对it、it-IT、IT_it、italian大小写不敏感均返回真而对de等返回假见 italian-rule-g2p-test.cpp。在 rule-based-g2p-factory.cpp 中try_italian会按方言别名分派词典资产可用时从资产键it/dict.tsv读取否则从g2p_root下的相对路径解析若词典缺失会抛出明确错误提示设置MoonshineG2POptions::files/italian_dict_path。5.2 三个开关型选项italian.h 定义了Options选项默认值作用with_stresstrue是否输出重音符号主重音ˈ、次重音ˌvocoder_stresstrue仅对规则生成的 IPA将ˈ/ˌ移到音节核之前便于声码器/vocoder 消费词典命中项不做此移位expand_cardinal_digitstrue在 G2P 前把\b\d\b与\b\d-\d\b展开为意大利语基数词其中vocoder_stress的语义在finalize_ipa中实现italian.cpp只有vocoder_stress true且来源为规则非词典时才调用GermanRuleG2p::normalize_ipa_stress_for_vocoder做重音归一词典项的原始重音位置保持不变——对应测试「lexicon stress not shifted by vocoder」italian-rule-g2p-test.cpp。5.3 查词优先级词典 → 连字符切分 → 功能词 → 规则lookup_or_rulesitalian.cpp定义了严格的回退链整词词典命中直接在dict.tsv加载的lexicon_中查找连字符词切分若整词未命中但包含-则按连字符切块逐块查词典并用-拼接各块必须全部命中功能词表内置高频虚词 IPA 表e、il、gli、che、della、nell等 40 余个见 italian.cpp规则引擎兜底以上都未命中时由正字法→IPA 规则生成。text_to_ipa入口italian.cpp先按需做数字展开再逐词调用上述链并支持通过G2pWordLog输出逐词日志记录词形、规范化键、来源路径kRuleBasedG2p与 IPA 结果。5.4 规则引擎要点数字、音节与字母组合数字展开镜像italian_numbers.py支持 0–999999 的基数词拼写含 teenundici…diciannove、十位venti、trenta…、百位cento、duecento…与千位mille、duemila…的特殊融合规则如ventiuno → ventuno、ventiotto → ventotto带前导零的数字逐位拼读007 → zero zero sette\d-\d范围会展开为「词 - 词」形式italian.cpp。音节划分先做元音核nucleus划分处理二合元音与元音 hiatus如ì、ù强制分音节a/o/e相邻视为 hiatus再按合法音节首辅音簇bl、br、cl、cr、dr、fl、fr、gl、gr、pl、pr、tr、ch切分辅音丛italian.cpp。重音位置优先取带重音符号的元音所在音节否则按意大利语默认规则——词尾元音取倒数第二音节paroxytone词尾辅音取末音节italian.cpp。字母组合映射letters_to_ipa_no_stressitalian.cpp正字法IPA说明c e/i/é/èt͡ʃ软腭塞音腭化g e/i/é/èd͡ʒ同上浊音chk硬音gh e/iɡ硬音gnɲɲ硬腭鼻音双写gliʎ硬腭边音sc e/iʃ腭化擦音sc a/o/usk保持硬音zztt͡s塞擦音双写z元音间d͡ʒ浊化s元音间z浊化qukw唇化软腭音xksau/ai/ei/oi/eu/ouaw/aj/ej/oj/ɛw/ow二合元音重音符号的处理也区分元音开口度è→ɛ、ò→ɔ、é/ó→e/o未标重音的e/o默认闭口音。六、配置项与 CLI把意大利语 G2P 接入管线6.1 运行时配置项moonshine-g2p-options.h 定义了三个意大利语专属布尔选项默认值均为trueitalian_with_stress输出重音italian_vocoder_stress规则 IPA 的重音按 vocoder 方式归一italian_expand_cardinal_digits展开数字。它们与italian_dict_path词典文件路径一起在 moonshine-g2p-options.cpp 中被注册为可解析的配置键italian_dict_path、italian_with_stress、italian_vocoder_stress、italian_expand_cardinal_digits支持从配置文件/JSON 中读取见 moonshine-g2p-options.cpp并映射为try_italian工厂函数中的ItalianRuleG2p::Optionsrule-based-g2p-factory.cpp。6.2 独立 CLIitalian_rule_g2p仓库为意大利语 G2P 提供了无需 ONNX 的独立命令行工具构建目标为italian_rule_g2pCMakeLists.txt源码见 italian-rule-g2p-cli.cpp。用法# 基本用法命令行直接传文本默认词典 data/it/dict.tsv相对当前目录 italian_rule_g2p ciao mondo # 指定词典路径 italian_rule_g2p --dict /path/to/dict.tsv perché # 去掉重音符号 italian_rule_g2p --no-stress città # 关闭 vocoder 重音归一重音保持音节核前位置之外的原样规则位置 italian_rule_g2p --syllable-initial-stress grazie # 关闭数字展开保留阿拉伯数字原样 italian_rule_g2p --no-expand-digits 2026 # 从标准输入读取整段文本 echo buongiorno a tutti | italian_rule_g2p --stdin参数与ItalianRuleG2p::Options的对应关系为--no-stress→with_stressfalse--syllable-initial-stress→vocoder_stressfalse--no-expand-digits→expand_cardinal_digitsfalse。配合--stdin可方便地做批量或管道化处理。七、可验证性测试与回归保障意大利语 G2P 的回归测试定义在 italian-rule-g2p-test.cppCMake 目标为italian_rule_g2p_testCMakeLists.txt覆盖五个层面方言分派it/it-IT/IT_it/italian均解析到意大利语规则de不能小写同形词优先Roma/roma同键时小写条目覆盖大写条目词典重音不被 vocoder 移位词典命中项保留原始重音位置特殊词cè分别用 ASCII 撇号与弯引号c’è输入对照 golden 参考文件tests/data/it/rule_g2p_ce_ascii.txt与rule_g2p_ce_curly.txt逐字节校验Wiki 文本 100 行平行校验取data/it/wiki-text.txt前 100 行逐行比对 golden 文件tests/data/it/rule_g2p_wiki_100.txt该文件由 Python 参考实现italian_rule_g2p.py生成确保 C 实现与 Python 参考逐行一致。这组测试正是 data/README.md 中「以 parity tests 作为契约」的落地体现当上游数据或导出器版本漂移时dict.tsv 参考 golden 文件共同构成了意大利语 G2P 正确性的稳定契约。八、小结一份词典资产背后的完整链路从core/moonshine-tts/data/it/README.md出发可以看到意大利语 G2P 的能力并非孤立存在而是由一条可追溯、可复现的链路支撑数据dict.tsv来自 WikiPronita_latn_broadApache-2.0由scripts/download_multilingual_ipa_lexicons.py --only it确定性重建加载ItalianRuleG2p按「整词词典 → 连字符切分 → 功能词表 → 规则引擎」四级回退消费该词典接入通过it/it-IT等方言别名在 rule-based-g2p-factory.cpp 中分派配置键italian_dict_path等可在 moonshine-g2p-options.cpp 中设置使用既可经由italian_rule_g2p独立 CLI 快速验证也可作为 moonshine-tts G2P/TTS 管线的一部分在--model-root下放置it/dict.tsv保障方言分派、同形词、cègolden 与 Wiki 100 行平行测试共同锁定行为。如需在自有构建中复现数据或排查意大利语发音问题按本文第四节重建词典、用第六节 CLI 快速验证单条文本、再以第七节测试逻辑核对行为即可完成从数据到产出的全链路闭环。【免费下载链接】moonshineVery low latency speech to text, intent recognition, and text to speech, for building voice agents and interfaces项目地址: https://gitcode.com/GitHub_Trending/moonshine3/moonshine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考