假名与罗马音从哪来?Fudoki 的 Kuroshiro 读音转换原理

假名与罗马音从哪来?Fudoki 的 Kuroshiro 读音转换原理

【免费下载链接】fudokiAn interactive Japanese text analysis and speech synthesis web app项目地址: https://gitcode.com/gh_mirrors/fu/fudoki

打开 Fudoki,你只需输入一句日语,下一秒就能看到每个单词头顶自动标出假名、脚下排出一行罗马音,点击还能听到发音。这种"输入即注音"的体验,背后是 Kuroshiro 读音转换引擎和 Kuromoji.js 分词器在浏览器里协同工作的结果。Fudoki 是一款基于浏览器的日语文本分析与语音朗读工具,本文就用通俗的方式,讲清楚"假名和罗马音到底从哪来"。

什么是 Kuroshiro:一句话认识的读音转换引擎

Kuroshiro 是一个纯前端的日语读音转换库,它的职责非常单一:把一段日语文本(汉字、假名混排)转换成平假名、片假名或罗马音。它本身不做分词,而是依赖一个"分析器"(Analyzer)来告诉它:这句话该拆成哪些词、每个词怎么读。在 Fudoki 中,这个分析器就是 KuromojiAnalyzer,而它背后又是形态素解析库 Kuromoji.js。

你可以把这三者的关系想象成流水线:Kuromoji.js 负责"拆词",Kuroshiro 负责"注音",Fudoki 负责把结果画到屏幕上。整套流程全部在本地浏览器完成,不需要任何服务器接口。

第一步:Kuromoji.js 分词,读音转换的地基

读音转换前必须先知道"谁是谁"。比如「日本語」三个字,只有拆出「日本」「語」这样的词,才能查到它们各自的读音。Fudoki 在 segmenter.js 中封装了 JapaneseSegmenter 模块,初始化时会通过kuromoji.builder({ dicPath: '/static/libs/dict/' })加载本地词典并构建分词器,然后执行tokenizer.tokenize(text)完成形态素解析。

分词器返回的每个 token 都带有surface_form(原形)、basic_form(词典形)、reading(读音)和pos(词性)等字段。注意,Kuromoji 本身给出的reading通常是片假名,这正是后面要交给 Kuroshiro 继续加工的原因。

第二步:Kuroshiro 的 convert() 如何把汉字变成假名

拆完词之后,就该 Kuroshiro 登场了。在 segmenter.js 的getReading()方法里,核心代码只有一行:

await this.kuroshiro.convert(text, { to: 'hiragana' });

Kuroshiro 会以 Kuromoji 的分词结果为原料,把每个词的读音统一转换成你想要的文字系统:to: 'hiragana'输出平假名,换成katakana就输出片假名。比如「日本語」会先被 Kuromoji 读出「ニホンゴ」,再被 Kuroshiro 转成「にほんご」。这一层保证了无论原文是汉字还是片假名,Fudoki 都能给出整齐划一的假名标注。

第三步:罗马音从哪来——Fudoki 自带的转换规则

很多人以为罗马音也是 Kuroshiro 生成的,其实 Fudoki 的罗马音由前端自己算出来,逻辑集中在 main-js.js 的getRomaji()函数中。它以平假名为输入,逐音节查表转换,并额外处理了四类日语发音难点:

  • 促音(っ):标记"双写下一个音节的辅音",如「きって」→「kitte」;
  • 拗音(ゃゅょ):把「き+ゃ」合并成「kya」、「し+ゅ」合并成「shu」这类组合音;
  • ん 的同化:按后面音节自动选择 m / n / n',如「しんぶん」→「shimbun」;
  • 长音(ー):给前一个元音加上长音符,如「コーヒー」→「kōhī」。

如果你对照拼音输入法去理解这四条规则,会发现它们就是把"五十音图的发音规律"翻译成拉丁字母,Kuroshiro 负责假名、Fudoki 负责转写,各司其职。

特殊读法:数字、年份、英文缩写怎么处理

日语里最折磨人的不是汉字,而是数字和外来缩写。Fudoki 在 segmenter.js 里为这些场景准备了专门逻辑:

  • 四位年份yearReading()按「せん・ひゃく・じゅう」的读法逐位拼接;
  • 普通数字numberReading()支持到万位,还会配合后面是否跟「月」自动切换「しがつ」这类特殊读法;
  • 英文缩写englishAbbreviationReading()把「AI」逐字母转成「エーアイ」,而「web」这类已日语化的词则直接读「ウェブ」。

这些规则在分词完成后、展示注音前被逐项套用,覆盖了 Kuromoji 词典查不到的场景。

假名、罗马音与朗读如何串联

读音转换只是 Fudoki 的中间环节,最终它会和另外两大模块打通:

  • 词典查询:点击单词卡片,通过 dictionary-service.js 按分片加载 JMdict 词条,显示中文释义;
  • 语音朗读:用 Web Speech API 的speechSynthesis朗读文本,tts.js 负责过滤日语声线(ja 开头)并按偏好排序绑定到朗读对象上。

也就是说,屏幕上的一行注音会同时驱动"释义"和"发音",而这一切都发生在浏览器本地,离线也能用。

小结:一条从"汉字"到"声音"的完整链路

回顾整个过程,Fudoki 的读音转换可以总结为四步流水线:

  1. Kuromoji.js 分词:拆出词形、词性与片假名读音;
  2. Kuroshiro 转换:把读音统一成平假名或片假名;
  3. getRomaji() 转写:按促音、拗音、ん 同化等规则生成罗马音;
  4. 特殊读法补丁:处理数字、年份、英文缩写等边缘情况。

假名和罗马音看似简单,背后其实是分词、转换、转写三层引擎的默契配合。如果你正在做一个日语学习类工具,或者想给自己的项目加上注音能力,不妨直接参考 Fudoki 这套"纯前端读音转换"方案——不需要后端,打开网页就能跑。

【免费下载链接】fudokiAn interactive Japanese text analysis and speech synthesis web app项目地址: https://gitcode.com/gh_mirrors/fu/fudoki

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考