Do parsing first

This commit is contained in:
Brandon Thomas
2022-06-30 18:08:36 -04:00
parent 030d2c9381
commit 5d5cebe541
3 changed files with 3 additions and 2 deletions
+47
View File
@@ -0,0 +1,47 @@
"""
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
subsequence 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