最近下载了一本轻小说生肉,因为日语太菜,看不懂,打算把它丢去机翻。
原文是AZW3,打算先用Calibre转成txt文档再进行翻译。
注释的原理:ruby标签
日语轻小说中含有大量的注音(也叫振假名,日语为「振り仮名」;或Ruby,日语为「ルビー」),比如说:
林道を抜け、緩やかな丘陵に出ると、山賊討伐を任された《七光騎士団》の視界前方に、青空に聳える石造りの古城が現れる。
这段话中含有几处注音,在AZW3中,这些注音假名是通过HTML5的新标签ruby实现的:
<ruby><rb>丘陵</rb><rt>きゅうりょう</rt></ruby>
<ruby><rb>七光</rb><rt>しちこう</rt></ruby>
<ruby><rb>騎士</rb><rt>きし</rt></ruby>
<ruby><rb>団</rb><rt>だん</rt></ruby>
<ruby><rb>聳</rb><rt>そび</rt></ruby>
如果要把文章丢进翻译器,我们不希望注音和文章混在一起,需要去除注音。
Calibre转换遇到的问题
如果我们不做修改直接,直接用Calibre对文章进行转换,会得到:
林道を抜け、緩やかな丘陵きゅうりょうに出ると、山賊討伐を任された《七光しちこう騎士きし団だん》の視界前方に、青空に聳そびえる石造りの古城が現れる。
可以注意到,Calibre直接删除了标签,导致振假名混在了文段中,如「丘陵きゅうりょう」,「七光しちこう騎士きし団だん」,这对我们阅读造成了影响,也对翻译效果造成了影响。
所以,我们有必要在翻译前将文档预处理,去除其中的注释。
用正则表达式去除注音
上面已经提过了注音的结构,我们可以用正则表达式对文章中含有此类结构的注音进行去除。
注意到注音的结构均为:
<ruby><rb>被注音文字</rb><rt>注音</rt></ruby>
因此我们用正则表达式检测此类结构,仅需将其中被注音的文字和注音换成任意字符:
<ruby><rb>(.*?)</rb><rt>.*?</rt></ruby>
其中.*
表示任意字符,增加符号?
使其非贪婪。因为我们要保留被注释文字,所以用小括号扩起被注释部分,小括号相当于一个变量,可以在替换时被重新引用。
在Calibre转换书籍时,在“搜索&替换”中,将上述表达式输入,并在替换文本中输入\1
(表示我们前面那个小括号中的文本,即被注音文字)
这样在转换过程中,出现的注音就会被替换了。
效果
使用正则表达式转换的文段:
林道を抜け、緩やかな丘陵に出ると、山賊討伐を任された《七光騎士団》の視界前方に、青空に聳える石造りの古城が現れる。
可以看到,其中的振假名已经去除,基本符合了我们的要求。这样我们就可以把它扔到翻译器里愉快地看机翻啦~
新人第一次发帖,请大家多多包涵 QwQ