如果日语歌词上有标注假名的话,日语初学者就可以很容易地学唱歌曲。然而,手动编写日语歌词注音却很麻烦。所以,我研发了一种能够使得编写注音这件事变得方便的方法。使用{{Photrans}}模板。
利用furigana这个Python库,将其稍作改造,就可以生成注音歌词。
1.安装日语词汇分析器MeCab,参考这篇文章。
2.打开cmd,输入"pip install furigana"安装这个库,并输入"pip install jaconv"安装其依赖。
3.打开furigana的文件夹,其中的"furigana.py"这个文件,对其稍作改造。首先是新增一个return_wiki函数:
def return_wiki(text): output = '' for pair in split_furigana(text): if len(pair)==2: kanji,hira = pair output += "{{"+ "Photrans|{0}|{1}".format(kanji, hira)+"}}" else: output += pair[0] return output + '\n'
4.由于MeCab使用的字典终究不可能完整包括所有词汇,所以遇到不认识的词就会出错。我们需要修改一下split_furigana函数,让它不要处理不认识的词。注意,这也意味着你要在完成之后手动给这个词注音。
def split_furigana(text): """ MeCab has a problem if used inside a generator ( use yield instead of return ) The error message is: ``` SystemError: <built-in function delete_Tagger> returned a result with an error set ``` It seems like MeCab has bug in releasing resource """ mecab = MeCab.Tagger("-Ochasen") mecab.parse('') # 空でパースする必要がある node = mecab.parseToNode(text) ret = [] while node is not None: origin = node.surface # もとの単語を代入 if not origin: node = node.next continue # originが空のとき、漢字以外の時はふりがなを振る必要がないのでそのまま出力する if origin != "" and any(is_kanji(_) for _ in origin): if len(node.feature.split(',')) <= 7: ret += [(origin,)] else: kana = node.feature.split(",")[7] # 読み仮名を代入 hiragana = jaconv.kata2hira(kana) for pair in split_okurigana(origin, hiragana): ret += [pair] else: if origin: ret += [(origin,)] node = node.next return ret
5.最后,在你自己的文件夹里写一个主程序:
from furigana.furigana import return_wiki, print_html original = open('原文.txt', 'r', encoding='utf-8') photransed = open('注音后.txt', 'w', encoding='utf-8') for line in original.readlines(): wikitext = return_wiki(line) photransed.write(wikitext) photransed.close() original.close()
6.在同一个文件夹里创建“原文.txt”,把歌词放进去,运行程序即可。
1.把歌词原文复制下来,保存为“原文.txt”,放进一个文件夹。
2.利用标注日文假名工具,得到同时带有汉字和假名的歌词,保存为“转换前.txt”,放进同一个文件夹。
3.下载我写的Python程序(Photrans.exe),放在这个文件夹里运行,得到“转换后.txt”。
4.把转换后的文字放进条目中,最后加上{{Photrans/button}},完成。