2023年政策修订增补工作正在进行中,欢迎参与!
  • Moegirl.ICU:萌娘百科流亡社群 581077156(QQ),欢迎对萌娘百科运营感到失望的编辑者加入
  • Moegirl.ICU:账号认领正在试运行,有意者请参照账号认领流程

User:Stevenlele/注音歌词获取转换指南

萌娘百科,万物皆可萌的百科全书!转载请标注来源页面的网页链接,并声明引自萌娘百科。内容不可商用。
跳转到导航 跳转到搜索

简介

这里简单记录一下如何快速方便地获取带注音的日文歌词并转换成萌百的格式。因为萌百的 Ruby 注音用起来很方便。

这个方法脱胎于我所在的某字幕组研究批量自动化注音的时候,集思广益搞出来的一套方法,所以本指南第二部分理论上是适用于所有日文文本注音的。

关于字幕批量注音,还没有完整地实战过,教程也还没写,有感兴趣的大佬可以私下里联系讨论。咕咕咕(x

获取带注音的日文歌词并转换

这个是理想情况,可以直接获取到带注音的歌词,比较省力。

1、去 UtaTen 搜索歌词。如果没有的话就用第二部分介绍的普通方法吧。

2~6、F12 打开 DevTools,切换到 Console,输入以下代码回车。然后复制结果。

$(".hiragana").html().replace(/<span class="ruby"><span class="rb">(.+?)<\/span><span class="rt">(.+?)<\/span><\/span>/g, "{{Photrans|$1|$2}}").replace(/<br>/g, "").trim().replace(/ /g, " ")
旧版

2、使用 Lyric Get旧版)从 UtaTen 获取带注音的歌词。这个工具是在 cv342040 找到的,这篇文章也挺有意思,感兴趣的可以看看。

接下来的步骤需要用到支持正则表达式且可以识别 Unicode (\uXXXX) 的文本编辑器。推荐使用 Visual Studio Code。

3、替换半角空格和半角标点:半角 ( ) → 全角 ( ),如果有英文部分,注意不要把英文空格和标点替换了。(这步是可选的,只是为了美观;另外也可以留到最后做,不过现在字符量少,可以先做了)

4、保护原歌词中非假名标注的半角括号,方法是替换成别的特殊字符,之后再替换回来;或者删除掉之后手动加回来。

5、正则表达式替换:([\u4E00-\u9FA5]+)\((\S*?)\){{Photrans|$1|$2}}。解释:匹配“至少一个汉字字符 + ( + 非空格字符[非贪婪] + )”,然后转换成萌百的 Photrans 模板格式。一般来说准确度还是很高的。由于在 {{lj}} 模板中或者 {{LyricsKai}} 模板中所以不需要声明语言,如果需要可以自己改成 {{Photrans|$1|$2|ja}} 这种。(注释:我有试过把前面的汉字匹配改成非贪婪模式,不过貌似还是贪婪匹配了,不知道是什么情况)

6、整理查错。还原之前保护替换的括号,然后对照 BK 或者其他网站的歌词(比如 Lyrical Nonsense 之类)查错,以及听一遍看看振假名有没有标错,UtaTen 出错还是比较常见的。直接用预览模式看比较方便。

7、加注音按钮,参考 {{Photrans}}。

完成。

给日文歌词加上注音并转换

如果 UtaTen 没有的话,那就只能用普通的歌词来添加注音了。也适用于一般的日语文本。

1、找到歌词,获得文本。可以用上面提到的 Lyric Get,如果是 Lyrical Nonsense 这种没支持的话也可以用 Chrome 的检查功能提取出来。或者对着 BK 手打。

2、替换半角符号,保护半角括号。同上。

3、使用 雅虎的假名标注 API 接口 添加假名标注。这里 有一个现成的工具。选择添加振假名(ふりがなに)就可以了。

4、这个方法添加的振假名会包含原文本里面的一些假名,所以替换方法也不太一样。正则表达式替换:([\u4E00-\u9FA5]+[\u2E80-\u33FF]*?)\(($1,。解释:从左半角括号向前匹配“至少一个汉字 + 零个或多个假名”(用不用贪婪模式其实差不多),然后把匹配到的东西一起括进括号里面,用逗号分隔。

5、正则表达式替换:([\u2E80-\u33FF]+),(\S+)\1\),$2)$1。解释:匹配汉字部分和假名部分末尾相同的假名部分,移出括号。

6、检查结果,并整理查错。这个模式会出错的地方比较多,比如如果标注假名的部分中间包含假名,例如“汉字 + 假名 + 汉字”,会出现汉字部分没有括全的现象,需要手动纠正并分拆成两个或多个括号。另外,自动标注的假名也有几率出错,需要检查。

7、把格式替换成萌百的 Photrans 模板格式。你可以不用正则表达式单独替换(( → {{Photrans| , → | ) → }}),或者正则表达式:\((\S+?),(\S+?)\){{Photrans|$1|$2}}

8、加注音按钮,参考 {{Photrans}}。

完成。

说明和已知问题

(其实没什么好说明的,只是最后不放点什么感觉不太对)

如果大家有发现什么错误,或者有更好的工具或者方法,欢迎指正~

已知问题:

日々ひび」的「々」无法作为汉字匹配。可以手动修正,或者直接怼进那个匹配汉字的范围里面。