MeloTTS / melo /text /japanese.py
mrfakename's picture
Upload 72 files
7af4264 verified
# Convert Japanese text to phonemes which is
# compatible with Julius https://github.com/julius-speech/segmentation-kit
import re
import unicodedata
from transformers import AutoTokenizer
from . import symbols
punctuation = ["!", "?", "โ€ฆ", ",", ".", "'", "-"]
try:
import MeCab
except ImportError as e:
raise ImportError("Japanese requires mecab-python3 and unidic-lite.") from e
from num2words import num2words
_CONVRULES = [
# Conversion of 2 letters
"ใ‚ขใ‚ก/ a a",
"ใ‚คใ‚ฃ/ i i",
"ใ‚คใ‚ง/ i e",
"ใ‚คใƒฃ/ y a",
"ใ‚ฆใ‚ฅ/ u:",
"ใ‚จใ‚ง/ e e",
"ใ‚ชใ‚ฉ/ o:",
"ใ‚ซใ‚ก/ k a:",
"ใ‚ญใ‚ฃ/ k i:",
"ใ‚ฏใ‚ฅ/ k u:",
"ใ‚ฏใƒฃ/ ky a",
"ใ‚ฏใƒฅ/ ky u",
"ใ‚ฏใƒง/ ky o",
"ใ‚ฑใ‚ง/ k e:",
"ใ‚ณใ‚ฉ/ k o:",
"ใ‚ฌใ‚ก/ g a:",
"ใ‚ฎใ‚ฃ/ g i:",
"ใ‚ฐใ‚ฅ/ g u:",
"ใ‚ฐใƒฃ/ gy a",
"ใ‚ฐใƒฅ/ gy u",
"ใ‚ฐใƒง/ gy o",
"ใ‚ฒใ‚ง/ g e:",
"ใ‚ดใ‚ฉ/ g o:",
"ใ‚ตใ‚ก/ s a:",
"ใ‚ทใ‚ฃ/ sh i:",
"ใ‚นใ‚ฅ/ s u:",
"ใ‚นใƒฃ/ sh a",
"ใ‚นใƒฅ/ sh u",
"ใ‚นใƒง/ sh o",
"ใ‚ปใ‚ง/ s e:",
"ใ‚ฝใ‚ฉ/ s o:",
"ใ‚ถใ‚ก/ z a:",
"ใ‚ธใ‚ฃ/ j i:",
"ใ‚บใ‚ฅ/ z u:",
"ใ‚บใƒฃ/ zy a",
"ใ‚บใƒฅ/ zy u",
"ใ‚บใƒง/ zy o",
"ใ‚ผใ‚ง/ z e:",
"ใ‚พใ‚ฉ/ z o:",
"ใ‚ฟใ‚ก/ t a:",
"ใƒใ‚ฃ/ ch i:",
"ใƒ„ใ‚ก/ ts a",
"ใƒ„ใ‚ฃ/ ts i",
"ใƒ„ใ‚ฅ/ ts u:",
"ใƒ„ใƒฃ/ ch a",
"ใƒ„ใƒฅ/ ch u",
"ใƒ„ใƒง/ ch o",
"ใƒ„ใ‚ง/ ts e",
"ใƒ„ใ‚ฉ/ ts o",
"ใƒ†ใ‚ง/ t e:",
"ใƒˆใ‚ฉ/ t o:",
"ใƒ€ใ‚ก/ d a:",
"ใƒ‚ใ‚ฃ/ j i:",
"ใƒ…ใ‚ฅ/ d u:",
"ใƒ…ใƒฃ/ zy a",
"ใƒ…ใƒฅ/ zy u",
"ใƒ…ใƒง/ zy o",
"ใƒ‡ใ‚ง/ d e:",
"ใƒ‰ใ‚ฉ/ d o:",
"ใƒŠใ‚ก/ n a:",
"ใƒ‹ใ‚ฃ/ n i:",
"ใƒŒใ‚ฅ/ n u:",
"ใƒŒใƒฃ/ ny a",
"ใƒŒใƒฅ/ ny u",
"ใƒŒใƒง/ ny o",
"ใƒใ‚ง/ n e:",
"ใƒŽใ‚ฉ/ n o:",
"ใƒใ‚ก/ h a:",
"ใƒ’ใ‚ฃ/ h i:",
"ใƒ•ใ‚ฅ/ f u:",
"ใƒ•ใƒฃ/ hy a",
"ใƒ•ใƒฅ/ hy u",
"ใƒ•ใƒง/ hy o",
"ใƒ˜ใ‚ง/ h e:",
"ใƒ›ใ‚ฉ/ h o:",
"ใƒใ‚ก/ b a:",
"ใƒ“ใ‚ฃ/ b i:",
"ใƒ–ใ‚ฅ/ b u:",
"ใƒ•ใƒฃ/ hy a",
"ใƒ–ใƒฅ/ by u",
"ใƒ•ใƒง/ hy o",
"ใƒ™ใ‚ง/ b e:",
"ใƒœใ‚ฉ/ b o:",
"ใƒ‘ใ‚ก/ p a:",
"ใƒ”ใ‚ฃ/ p i:",
"ใƒ—ใ‚ฅ/ p u:",
"ใƒ—ใƒฃ/ py a",
"ใƒ—ใƒฅ/ py u",
"ใƒ—ใƒง/ py o",
"ใƒšใ‚ง/ p e:",
"ใƒใ‚ฉ/ p o:",
"ใƒžใ‚ก/ m a:",
"ใƒŸใ‚ฃ/ m i:",
"ใƒ ใ‚ฅ/ m u:",
"ใƒ ใƒฃ/ my a",
"ใƒ ใƒฅ/ my u",
"ใƒ ใƒง/ my o",
"ใƒกใ‚ง/ m e:",
"ใƒขใ‚ฉ/ m o:",
"ใƒคใ‚ก/ y a:",
"ใƒฆใ‚ฅ/ y u:",
"ใƒฆใƒฃ/ y a:",
"ใƒฆใƒฅ/ y u:",
"ใƒฆใƒง/ y o:",
"ใƒจใ‚ฉ/ y o:",
"ใƒฉใ‚ก/ r a:",
"ใƒชใ‚ฃ/ r i:",
"ใƒซใ‚ฅ/ r u:",
"ใƒซใƒฃ/ ry a",
"ใƒซใƒฅ/ ry u",
"ใƒซใƒง/ ry o",
"ใƒฌใ‚ง/ r e:",
"ใƒญใ‚ฉ/ r o:",
"ใƒฏใ‚ก/ w a:",
"ใƒฒใ‚ฉ/ o:",
"ใƒ‡ใ‚ฃ/ d i",
"ใƒ‡ใ‚ง/ d e:",
"ใƒ‡ใƒฃ/ dy a",
"ใƒ‡ใƒฅ/ dy u",
"ใƒ‡ใƒง/ dy o",
"ใƒ†ใ‚ฃ/ t i",
"ใƒ†ใ‚ง/ t e:",
"ใƒ†ใƒฃ/ ty a",
"ใƒ†ใƒฅ/ ty u",
"ใƒ†ใƒง/ ty o",
"ใ‚นใ‚ฃ/ s i",
"ใ‚บใ‚ก/ z u a",
"ใ‚บใ‚ฃ/ z i",
"ใ‚บใ‚ฅ/ z u",
"ใ‚บใƒฃ/ zy a",
"ใ‚บใƒฅ/ zy u",
"ใ‚บใƒง/ zy o",
"ใ‚บใ‚ง/ z e",
"ใ‚บใ‚ฉ/ z o",
"ใ‚ญใƒฃ/ ky a",
"ใ‚ญใƒฅ/ ky u",
"ใ‚ญใƒง/ ky o",
"ใ‚ทใƒฃ/ sh a",
"ใ‚ทใƒฅ/ sh u",
"ใ‚ทใ‚ง/ sh e",
"ใ‚ทใƒง/ sh o",
"ใƒใƒฃ/ ch a",
"ใƒใƒฅ/ ch u",
"ใƒใ‚ง/ ch e",
"ใƒใƒง/ ch o",
"ใƒˆใ‚ฅ/ t u",
"ใƒˆใƒฃ/ ty a",
"ใƒˆใƒฅ/ ty u",
"ใƒˆใƒง/ ty o",
"ใƒ‰ใ‚ก/ d o a",
"ใƒ‰ใ‚ฅ/ d u",
"ใƒ‰ใƒฃ/ dy a",
"ใƒ‰ใƒฅ/ dy u",
"ใƒ‰ใƒง/ dy o",
"ใƒ‰ใ‚ฉ/ d o:",
"ใƒ‹ใƒฃ/ ny a",
"ใƒ‹ใƒฅ/ ny u",
"ใƒ‹ใƒง/ ny o",
"ใƒ’ใƒฃ/ hy a",
"ใƒ’ใƒฅ/ hy u",
"ใƒ’ใƒง/ hy o",
"ใƒŸใƒฃ/ my a",
"ใƒŸใƒฅ/ my u",
"ใƒŸใƒง/ my o",
"ใƒชใƒฃ/ ry a",
"ใƒชใƒฅ/ ry u",
"ใƒชใƒง/ ry o",
"ใ‚ฎใƒฃ/ gy a",
"ใ‚ฎใƒฅ/ gy u",
"ใ‚ฎใƒง/ gy o",
"ใƒ‚ใ‚ง/ j e",
"ใƒ‚ใƒฃ/ j a",
"ใƒ‚ใƒฅ/ j u",
"ใƒ‚ใƒง/ j o",
"ใ‚ธใ‚ง/ j e",
"ใ‚ธใƒฃ/ j a",
"ใ‚ธใƒฅ/ j u",
"ใ‚ธใƒง/ j o",
"ใƒ“ใƒฃ/ by a",
"ใƒ“ใƒฅ/ by u",
"ใƒ“ใƒง/ by o",
"ใƒ”ใƒฃ/ py a",
"ใƒ”ใƒฅ/ py u",
"ใƒ”ใƒง/ py o",
"ใ‚ฆใ‚ก/ u a",
"ใ‚ฆใ‚ฃ/ w i",
"ใ‚ฆใ‚ง/ w e",
"ใ‚ฆใ‚ฉ/ w o",
"ใƒ•ใ‚ก/ f a",
"ใƒ•ใ‚ฃ/ f i",
"ใƒ•ใ‚ฅ/ f u",
"ใƒ•ใƒฃ/ hy a",
"ใƒ•ใƒฅ/ hy u",
"ใƒ•ใƒง/ hy o",
"ใƒ•ใ‚ง/ f e",
"ใƒ•ใ‚ฉ/ f o",
"ใƒดใ‚ก/ b a",
"ใƒดใ‚ฃ/ b i",
"ใƒดใ‚ง/ b e",
"ใƒดใ‚ฉ/ b o",
"ใƒดใƒฅ/ by u",
# Conversion of 1 letter
"ใ‚ข/ a",
"ใ‚ค/ i",
"ใ‚ฆ/ u",
"ใ‚จ/ e",
"ใ‚ช/ o",
"ใ‚ซ/ k a",
"ใ‚ญ/ k i",
"ใ‚ฏ/ k u",
"ใ‚ฑ/ k e",
"ใ‚ณ/ k o",
"ใ‚ต/ s a",
"ใ‚ท/ sh i",
"ใ‚น/ s u",
"ใ‚ป/ s e",
"ใ‚ฝ/ s o",
"ใ‚ฟ/ t a",
"ใƒ/ ch i",
"ใƒ„/ ts u",
"ใƒ†/ t e",
"ใƒˆ/ t o",
"ใƒŠ/ n a",
"ใƒ‹/ n i",
"ใƒŒ/ n u",
"ใƒ/ n e",
"ใƒŽ/ n o",
"ใƒ/ h a",
"ใƒ’/ h i",
"ใƒ•/ f u",
"ใƒ˜/ h e",
"ใƒ›/ h o",
"ใƒž/ m a",
"ใƒŸ/ m i",
"ใƒ / m u",
"ใƒก/ m e",
"ใƒข/ m o",
"ใƒฉ/ r a",
"ใƒช/ r i",
"ใƒซ/ r u",
"ใƒฌ/ r e",
"ใƒญ/ r o",
"ใ‚ฌ/ g a",
"ใ‚ฎ/ g i",
"ใ‚ฐ/ g u",
"ใ‚ฒ/ g e",
"ใ‚ด/ g o",
"ใ‚ถ/ z a",
"ใ‚ธ/ j i",
"ใ‚บ/ z u",
"ใ‚ผ/ z e",
"ใ‚พ/ z o",
"ใƒ€/ d a",
"ใƒ‚/ j i",
"ใƒ…/ z u",
"ใƒ‡/ d e",
"ใƒ‰/ d o",
"ใƒ/ b a",
"ใƒ“/ b i",
"ใƒ–/ b u",
"ใƒ™/ b e",
"ใƒœ/ b o",
"ใƒ‘/ p a",
"ใƒ”/ p i",
"ใƒ—/ p u",
"ใƒš/ p e",
"ใƒ/ p o",
"ใƒค/ y a",
"ใƒฆ/ y u",
"ใƒจ/ y o",
"ใƒฏ/ w a",
"ใƒฐ/ i",
"ใƒฑ/ e",
"ใƒฒ/ o",
"ใƒณ/ N",
"ใƒƒ/ q",
"ใƒด/ b u",
"ใƒผ/:",
# Try converting broken text
"ใ‚ก/ a",
"ใ‚ฃ/ i",
"ใ‚ฅ/ u",
"ใ‚ง/ e",
"ใ‚ฉ/ o",
"ใƒฎ/ w a",
"ใ‚ฉ/ o",
# Try converting broken text
"ใƒฃ/ y a",
"ใƒง/ y o",
"ใƒฅ/ y u",
"็ฆ/ ch i",
"ใƒถ/ k e",
"้ซ™/ t a k a",
"็…ž/ sh y a",
# Symbols
"ใ€/ ,",
"ใ€‚/ .",
"๏ผ/ !",
"๏ผŸ/ ?",
"ใƒป/ ,",
]
_COLON_RX = re.compile(":+")
_REJECT_RX = re.compile("[^ a-zA-Z:,.?]")
def _makerulemap():
l = [tuple(x.split("/")) for x in _CONVRULES]
return tuple({k: v for k, v in l if len(k) == i} for i in (1, 2))
_RULEMAP1, _RULEMAP2 = _makerulemap()
def kata2phoneme(text: str) -> str:
"""Convert katakana text to phonemes."""
text = text.strip()
res = []
while text:
if len(text) >= 2:
x = _RULEMAP2.get(text[:2])
if x is not None:
text = text[2:]
res += x.split(" ")[1:]
continue
x = _RULEMAP1.get(text[0])
if x is not None:
text = text[1:]
res += x.split(" ")[1:]
continue
res.append(text[0])
text = text[1:]
# res = _COLON_RX.sub(":", res)
return res
_KATAKANA = "".join(chr(ch) for ch in range(ord("ใ‚ก"), ord("ใƒณ") + 1))
_HIRAGANA = "".join(chr(ch) for ch in range(ord("ใ"), ord("ใ‚“") + 1))
_HIRA2KATATRANS = str.maketrans(_HIRAGANA, _KATAKANA)
def hira2kata(text: str) -> str:
text = text.translate(_HIRA2KATATRANS)
return text.replace("ใ†ใ‚›", "ใƒด")
_SYMBOL_TOKENS = set(list("ใƒปใ€ใ€‚๏ผŸ๏ผ"))
_NO_YOMI_TOKENS = set(list("ใ€Œใ€ใ€Žใ€โ€•๏ผˆ๏ผ‰๏ผป๏ผฝ[]"))
_TAGGER = MeCab.Tagger()
def text2kata(text: str) -> str:
parsed = _TAGGER.parse(text)
res = []
for line in parsed.split("\n"):
if line == "EOS":
break
parts = line.split("\t")
word, yomi = parts[0], parts[1]
if yomi:
try:
res.append(yomi.split(',')[6])
except:
import pdb; pdb.set_trace()
else:
if word in _SYMBOL_TOKENS:
res.append(word)
elif word in ("ใฃ", "ใƒƒ"):
res.append("ใƒƒ")
elif word in _NO_YOMI_TOKENS:
pass
else:
res.append(word)
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:
"""Convert Japanese text to phonemes."""
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)
return res
def is_japanese_character(char):
# ๅฎšไน‰ๆ—ฅ่ฏญๆ–‡ๅญ—็ณป็ปŸ็š„ Unicode ่Œƒๅ›ด
japanese_ranges = [
(0x3040, 0x309F), # ๅนณๅ‡ๅ
(0x30A0, 0x30FF), # ็‰‡ๅ‡ๅ
(0x4E00, 0x9FFF), # ๆฑ‰ๅญ— (CJK Unified Ideographs)
(0x3400, 0x4DBF), # ๆฑ‰ๅญ—ๆ‰ฉๅฑ• A
(0x20000, 0x2A6DF), # ๆฑ‰ๅญ—ๆ‰ฉๅฑ• B
# ๅฏไปฅๆ นๆฎ้œ€่ฆๆทปๅŠ ๅ…ถไป–ๆฑ‰ๅญ—ๆ‰ฉๅฑ•่Œƒๅ›ด
]
# ๅฐ†ๅญ—็ฌฆ็š„ Unicode ็ผ–็ ่ฝฌๆขไธบๆ•ดๆ•ฐ
char_code = ord(char)
# ๆฃ€ๆŸฅๅญ—็ฌฆๆ˜ฏๅฆๅœจไปปไฝ•ไธ€ไธชๆ—ฅ่ฏญ่Œƒๅ›ดๅ†…
for start, end in japanese_ranges:
if start <= char_code <= end:
return True
return False
rep_map = {
"๏ผš": ",",
"๏ผ›": ",",
"๏ผŒ": ",",
"ใ€‚": ".",
"๏ผ": "!",
"๏ผŸ": "?",
"\n": ".",
"ยท": ",",
"ใ€": ",",
"...": "โ€ฆ",
}
def replace_punctuation(text):
pattern = re.compile("|".join(re.escape(p) for p in rep_map.keys()))
replaced_text = pattern.sub(lambda x: rep_map[x.group()], text)
replaced_text = re.sub(
r"[^\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FFF\u3400-\u4DBF"
+ "".join(punctuation)
+ r"]+",
"",
replaced_text,
)
return replaced_text
from pykakasi import kakasi
# Initialize kakasi object
kakasi = kakasi()
# Set options for converting Chinese characters to Katakana
kakasi.setMode("J", "K") # Chinese to Katakana
kakasi.setMode("H", "K") # Hiragana to Katakana
# Convert Chinese characters to Katakana
conv = kakasi.getConverter()
def text_normalize(text):
res = unicodedata.normalize("NFKC", text)
res = japanese_convert_numbers_to_words(res)
res = "".join([i for i in res if is_japanese_character(i)])
res = replace_punctuation(res)
res = conv.do(res)
return res
def distribute_phone(n_phone, n_word):
phones_per_word = [0] * n_word
for task in range(n_phone):
min_tasks = min(phones_per_word)
min_index = phones_per_word.index(min_tasks)
phones_per_word[min_index] += 1
return phones_per_word
# tokenizer = AutoTokenizer.from_pretrained('cl-tohoku/bert-base-japanese-v3')
model_id = 'tohoku-nlp/bert-base-japanese-v3'
tokenizer = AutoTokenizer.from_pretrained(model_id)
def g2p(norm_text):
tokenized = tokenizer.tokenize(norm_text)
phs = []
ph_groups = []
for t in tokenized:
if not t.startswith("#"):
ph_groups.append([t])
else:
ph_groups[-1].append(t.replace("#", ""))
word2ph = []
for group in ph_groups:
text = ""
for ch in group:
text += ch
if text == '[UNK]':
phs += ['_']
word2ph += [1]
continue
elif text in punctuation:
phs += [text]
word2ph += [1]
continue
# import pdb; pdb.set_trace()
# phonemes = japanese_text_to_phonemes(text)
phonemes = kata2phoneme(text)
# phonemes = [i for i in phonemes if i in symbols]
for i in phonemes:
assert i in symbols, (group, norm_text, tokenized, i)
phone_len = len(phonemes)
word_len = len(group)
aaa = distribute_phone(phone_len, word_len)
assert len(aaa) == word_len
word2ph += aaa
phs += phonemes
phones = ["_"] + phs + ["_"]
tones = [0 for i in phones]
word2ph = [1] + word2ph + [1]
assert len(word2ph) == len(tokenized) + 2
return phones, tones, word2ph
def get_bert_feature(text, word2ph, device):
from text import japanese_bert
return japanese_bert.get_bert_feature(text, word2ph, device=device)
if __name__ == "__main__":
# tokenizer = AutoTokenizer.from_pretrained("./bert/bert-base-japanese-v3")
text = "ใ“ใ‚“ใซใกใฏใ€ไธ–็•Œ๏ผ..."
text = 'ใˆใˆใ€ๅƒ•ใฏใŠใใชใจ็”ณใ—ใพใ™ใ€‚ใ“ใกใ‚‰ใฎๅฐใ•ใ„ใ‚ใ‚‰ในใฏๆๅญใ€‚ใ”ๆŒจๆ‹ถใŒ้…ใ‚Œใฆใ—ใพใ„ใ™ใฟใพใ›ใ‚“ใ€‚ใ‚ใชใŸใฎๅใฏ?'
text = 'ใ‚ใฎใ€ใŠๅ‰ไปฅๅค–ใฎใฟใ‚“ใชใฏใ€ๅ…จๅ“ก็”Ÿใใฆใ‚‹ใ“ใจ?'
from text.japanese_bert import get_bert_feature
text = text_normalize(text)
print(text)
phones, tones, word2ph = g2p(text)
bert = get_bert_feature(text, word2ph)
print(phones, tones, word2ph, bert.shape)
# if __name__ == '__main__':
# from pykakasi import kakasi
# # Initialize kakasi object
# kakasi = kakasi()
# # Set options for converting Chinese characters to Katakana
# kakasi.setMode("J", "H") # Chinese to Katakana
# kakasi.setMode("K", "H") # Hiragana to Katakana
# # Convert Chinese characters to Katakana
# conv = kakasi.getConverter()
# katakana_text = conv.do('ใˆใˆใ€ๅƒ•ใฏใŠใใชใจ็”ณใ—ใพใ™ใ€‚ใ“ใกใ‚‰ใฎๅฐใ•ใ„ใ‚ใ‚‰ในใฏๆๅญใ€‚ใ”ๆŒจๆ‹ถใŒ้…ใ‚Œใฆใ—ใพใ„ใ™ใฟใพใ›ใ‚“ใ€‚ใ‚ใชใŸใฎๅใฏ?') # Replace with your Chinese text
# print(katakana_text) # Output: ใƒ‹ใƒผใƒใ‚ชใ‚ปใ‚ซใ‚ค