Files
storyteller-ml/tts/text/phonetization/parser.py
T
2022-06-30 17:48:38 -04:00

46 lines
1.2 KiB
Python

"""
Parse raw text sequences into Arpabet and Grapheme sequences so that they can be
treated independently.
Inspired by and including code from original Tacotron2 by Keith Ito.
"""
import re
# Regular expression matching text enclosed in curly braces:
_curly_re = re.compile(r'(.*?)\{(.+?)\}(.*)')
class ArpabetSequence:
def __init__(self, sequence):
self.sequence = sequence
class GraphemeSquence:
def __init__(self, sequence):
self.sequence = sequence
def parse_grapheme_and_arpabet_sequence(input_text):
"""
Parse a string into an array of ArpabetSequence and GraphemeSequence so that each can be treated independently.
"""
sequence = []
# Check for curly braces and treat their contents as ARPAbet:
while len(input_text):
input_text = input_text.strip()
m = _curly_re.match(input_text)
if not m:
sequence.append(GraphemeSquence(input_text))
break
before = m.group(1).strip()
bracketed = m.group(2).strip()
after = m.group(3).strip()
if before:
sequence.append(GraphemeSquence(before))
if bracketed:
sequence.append(ArpabetSequence(bracketed))
input_text = after
return sequence