fix apostrophe, hyphen

This commit is contained in:
Brandon Thomas
2022-07-05 03:31:25 -04:00
parent c81f8d323c
commit ffbf36fd13
4 changed files with 35 additions and 1 deletions
@@ -58,3 +58,8 @@ class TestEnglishPipelineV1:
11, # Space
2, # Exclamation mark
]
def test_apostrophe_word(self):
pipeline = self.build_pipeline_instance()
output = pipeline.user_input_to_sequence("you're")
assert output == [145, 137, 130] # YOU'RE Y UH1 R ~ 145 137 130
@@ -23,6 +23,8 @@ class ArpabetSequence:
self.sequence = sequence
def __eq__(self, other: Any) -> bool:
return isinstance(other, ArpabetSequence) and self.sequence == other.sequence
def __repr__(self):
return f"<ArpabetSequence: {self.sequence}>"
class GraphemeSequence:
@@ -34,6 +36,8 @@ class GraphemeSequence:
self.sequence = sequence
def __eq__(self, other: Any) -> bool:
return isinstance(other, GraphemeSequence) and self.sequence == other.sequence
def __repr__(self):
return f"<GraphemeSequence: {self.sequence}>"
ParsedSequence = List[Union[ArpabetSequence, GraphemeSequence]]
@@ -4,7 +4,11 @@ from typing import List
from text.pipeline_components.phonetization.cmudict import CMUDict
# Regex taken from open source tacotron2 extensions
_arpabet_split_re = re.compile(r'[^\s]*{.*?}[^\s]*|[\w]+|[^\w\s]+')
# NB: This was broken and couldn't handle apostrophes
#_arpabet_split_re = re.compile(r'[^\s]*{.*?}[^\s]*|[\w]+|[^\w\s]+')
# Modified regex to not split apostrophe (eg. "you're", "I'm", etc.) or hyphenation (eg "avant-garde")
_arpabet_split_re = re.compile(r'[^\s]*{.*?}[^\s]*|[\w]+\'[\w]+|[\w]+\-[\w]+|[\w]+|[^\w\s]+')
class BasePhonetization:
def __init__(self, phoneme_dictionary: CMUDict):
@@ -33,6 +33,27 @@ class TestEnglishPhonetization:
ArpabetSequence("T EH1 S T"),
]
def test_words_with_apostrophe(self):
phoneme_dictionary = CMUDict(DEFAULT_CMUDICT_PATH)
phonetization = EnglishPhonetization(phoneme_dictionary)
output = phonetization.try_convert_to_phonemes("I'm can't you're we're ain't")
assert output == [
ArpabetSequence("AY1 M"),
ArpabetSequence("K AE1 N T"),
ArpabetSequence("Y UH1 R"),
ArpabetSequence("W IY1 R"),
ArpabetSequence("EY1 N T"),
]
def test_words_with_hyphenation(self):
phoneme_dictionary = CMUDict(DEFAULT_CMUDICT_PATH)
phonetization = EnglishPhonetization(phoneme_dictionary)
output = phonetization.try_convert_to_phonemes("avant-garde bake-off")
assert output == [
ArpabetSequence("AH0 V AA1 N T G AA1 R D"),
ArpabetSequence("B EY1 K AO1 F"),
]
def test_punctuation(self):
phoneme_dictionary = CMUDict(DEFAULT_CMUDICT_PATH)
phonetization = EnglishPhonetization(phoneme_dictionary)