This commit is contained in:
Brandon Thomas
2022-07-04 02:47:40 -04:00
parent c401cc5146
commit 1b9d44cf34
20 changed files with 37 additions and 37 deletions
@@ -0,0 +1,56 @@
"""
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.
"""
# pyright: strict
import re
from typing import List, Union, Any
# Regular expression matching text enclosed in curly braces:
_curly_re = re.compile(r'(.*?)\{(.+?)\}(.*)')
class ArpabetSequence:
def __init__(self, sequence: str):
self.sequence = sequence
def __eq__(self, other: Any) -> bool:
return isinstance(other, ArpabetSequence) and self.sequence == other.sequence
class GraphemeSequence:
def __init__(self, sequence: str):
self.sequence = sequence
def __eq__(self, other: Any) -> bool:
return isinstance(other, GraphemeSequence) and self.sequence == other.sequence
ParsedSequence = List[Union[ArpabetSequence, GraphemeSequence]]
def parse_grapheme_and_arpabet_sequence(input_text: str) -> ParsedSequence:
"""
Parse a string into a list of ArpabetSequence and GraphemeSequence so that each
subsequence can be treated independently.
"""
sequence : ParsedSequence = []
# 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(GraphemeSequence(input_text))
break
before = m.group(1).strip()
bracketed = m.group(2).strip()
after = m.group(3).strip()
if before:
sequence.append(GraphemeSequence(before))
if bracketed:
sequence.append(ArpabetSequence(bracketed))
input_text = after
return sequence