mirror of https://github.com/coqui-ai/TTS.git
Update Japanese phonemizer (#758)
* Update default ja vocoder * update * Japanese phonemizer test * Run make style Co-authored-by: Eren Gölge <egolge@coqui.ai>
This commit is contained in:
parent
2b7e55f01f
commit
165e5814af
|
@ -157,7 +157,7 @@
|
||||||
"kokoro": {
|
"kokoro": {
|
||||||
"tacotron2-DDC": {
|
"tacotron2-DDC": {
|
||||||
"github_rls_url": "https://github.com/coqui-ai/TTS/releases/download/v0.0.15/tts_models--jp--kokoro--tacotron2-DDC.zip",
|
"github_rls_url": "https://github.com/coqui-ai/TTS/releases/download/v0.0.15/tts_models--jp--kokoro--tacotron2-DDC.zip",
|
||||||
"default_vocoder": "vocoder_models/universal/libri-tts/wavegrad",
|
"default_vocoder": "vocoder_models/ja/kokoro/hifigan_v1",
|
||||||
"description": "Tacotron2 with Double Decoder Consistency trained with Kokoro Speech Dataset.",
|
"description": "Tacotron2 with Double Decoder Consistency trained with Kokoro Speech Dataset.",
|
||||||
"author": "@kaiidams",
|
"author": "@kaiidams",
|
||||||
"commit": "401fbd89"
|
"commit": "401fbd89"
|
||||||
|
|
|
@ -2,8 +2,10 @@
|
||||||
# compatible with Julius https://github.com/julius-speech/segmentation-kit
|
# compatible with Julius https://github.com/julius-speech/segmentation-kit
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
import unicodedata
|
||||||
|
|
||||||
import MeCab
|
import MeCab
|
||||||
|
from num2words import num2words
|
||||||
|
|
||||||
_CONVRULES = [
|
_CONVRULES = [
|
||||||
# Conversion of 2 letters
|
# Conversion of 2 letters
|
||||||
|
@ -373,8 +375,93 @@ def text2kata(text: str) -> str:
|
||||||
return hira2kata("".join(res))
|
return hira2kata("".join(res))
|
||||||
|
|
||||||
|
|
||||||
|
_ALPHASYMBOL_YOMI = {
|
||||||
|
"#": "シャープ",
|
||||||
|
"%": "パーセント",
|
||||||
|
"&": "アンド",
|
||||||
|
"+": "プラス",
|
||||||
|
"-": "マイナス",
|
||||||
|
":": "コロン",
|
||||||
|
";": "セミコロン",
|
||||||
|
"<": "小なり",
|
||||||
|
"=": "イコール",
|
||||||
|
">": "大なり",
|
||||||
|
"@": "アット",
|
||||||
|
"a": "エー",
|
||||||
|
"b": "ビー",
|
||||||
|
"c": "シー",
|
||||||
|
"d": "ディー",
|
||||||
|
"e": "イー",
|
||||||
|
"f": "エフ",
|
||||||
|
"g": "ジー",
|
||||||
|
"h": "エイチ",
|
||||||
|
"i": "アイ",
|
||||||
|
"j": "ジェー",
|
||||||
|
"k": "ケー",
|
||||||
|
"l": "エル",
|
||||||
|
"m": "エム",
|
||||||
|
"n": "エヌ",
|
||||||
|
"o": "オー",
|
||||||
|
"p": "ピー",
|
||||||
|
"q": "キュー",
|
||||||
|
"r": "アール",
|
||||||
|
"s": "エス",
|
||||||
|
"t": "ティー",
|
||||||
|
"u": "ユー",
|
||||||
|
"v": "ブイ",
|
||||||
|
"w": "ダブリュー",
|
||||||
|
"x": "エックス",
|
||||||
|
"y": "ワイ",
|
||||||
|
"z": "ゼット",
|
||||||
|
"α": "アルファ",
|
||||||
|
"β": "ベータ",
|
||||||
|
"γ": "ガンマ",
|
||||||
|
"δ": "デルタ",
|
||||||
|
"ε": "イプシロン",
|
||||||
|
"ζ": "ゼータ",
|
||||||
|
"η": "イータ",
|
||||||
|
"θ": "シータ",
|
||||||
|
"ι": "イオタ",
|
||||||
|
"κ": "カッパ",
|
||||||
|
"λ": "ラムダ",
|
||||||
|
"μ": "ミュー",
|
||||||
|
"ν": "ニュー",
|
||||||
|
"ξ": "クサイ",
|
||||||
|
"ο": "オミクロン",
|
||||||
|
"π": "パイ",
|
||||||
|
"ρ": "ロー",
|
||||||
|
"σ": "シグマ",
|
||||||
|
"τ": "タウ",
|
||||||
|
"υ": "ウプシロン",
|
||||||
|
"φ": "ファイ",
|
||||||
|
"χ": "カイ",
|
||||||
|
"ψ": "プサイ",
|
||||||
|
"ω": "オメガ",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
_NUMBER_WITH_SEPARATOR_RX = re.compile("[0-9]{1,3}(,[0-9]{3})+")
|
||||||
|
_CURRENCY_MAP = {"$": "ドル", "¥": "円", "£": "ポンド", "€": "ユーロ"}
|
||||||
|
_CURRENCY_RX = re.compile(r"([$¥£€])([0-9.]*[0-9])")
|
||||||
|
_NUMBER_RX = re.compile(r"[0-9]+(\.[0-9]+)?")
|
||||||
|
|
||||||
|
|
||||||
|
def japanese_convert_numbers_to_words(text: str) -> str:
|
||||||
|
res = _NUMBER_WITH_SEPARATOR_RX.sub(lambda m: m[0].replace(",", ""), text)
|
||||||
|
res = _CURRENCY_RX.sub(lambda m: m[2] + _CURRENCY_MAP.get(m[1], m[1]), res)
|
||||||
|
res = _NUMBER_RX.sub(lambda m: num2words(m[0], lang="ja"), res)
|
||||||
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
def japanese_convert_alpha_symbols_to_words(text: str) -> str:
|
||||||
|
return "".join([_ALPHASYMBOL_YOMI.get(ch, ch) for ch in text.lower()])
|
||||||
|
|
||||||
|
|
||||||
def japanese_text_to_phonemes(text: str) -> str:
|
def japanese_text_to_phonemes(text: str) -> str:
|
||||||
"""Convert Japanese text to phonemes."""
|
"""Convert Japanese text to phonemes."""
|
||||||
res = text2kata(text)
|
res = unicodedata.normalize("NFKC", text)
|
||||||
|
res = japanese_convert_numbers_to_words(res)
|
||||||
|
res = japanese_convert_alpha_symbols_to_words(res)
|
||||||
|
res = text2kata(res)
|
||||||
res = kata2phoneme(res)
|
res = kata2phoneme(res)
|
||||||
return res.replace(" ", "")
|
return res.replace(" ", "")
|
||||||
|
|
|
@ -5,11 +5,13 @@ from TTS.tts.utils.text.japanese.phonemizer import japanese_text_to_phonemes
|
||||||
_TEST_CASES = """
|
_TEST_CASES = """
|
||||||
どちらに行きますか?/dochiraniikimasuka?
|
どちらに行きますか?/dochiraniikimasuka?
|
||||||
今日は温泉に、行きます。/kyo:waoNseNni,ikimasu.
|
今日は温泉に、行きます。/kyo:waoNseNni,ikimasu.
|
||||||
「A」から「Z」までです。/AkaraZmadedesu.
|
「A」から「Z」までです。/e:karazeqtomadedesu.
|
||||||
そうですね!/so:desune!
|
そうですね!/so:desune!
|
||||||
クジラは哺乳類です。/kujirawahonyu:ruidesu.
|
クジラは哺乳類です。/kujirawahonyu:ruidesu.
|
||||||
ヴィディオを見ます。/bidioomimasu.
|
ヴィディオを見ます。/bidioomimasu.
|
||||||
ky o: w a o N s e N n i , i k i m a s u ./kyo:waoNseNni,ikimasu.
|
今日は8月22日です/kyo:wahachigatsuniju:ninichidesu
|
||||||
|
xyzとαβγ/eqkusuwaizeqtotoarufabe:tagaNma
|
||||||
|
値段は$12.34です/nedaNwaju:niteNsaNyoNdorudesu
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue