hexgrad commited on
Commit
f3d4c6b
·
verified ·
1 Parent(s): 0662719

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +10 -11
app.py CHANGED
@@ -50,19 +50,17 @@ def split_num(num):
50
  if '.' in num:
51
  a, b = num.split('.')
52
  return ' point '.join([a, ' '.join(b)])
53
- assert num.isdigit() and len(num) == 4, num
54
- year = int(num)
55
  if year < 1100 or year % 1000 < 10:
56
  return num
57
- first_half = num[:2]
58
- second_half = num[2:]
59
- second_half_int = int(second_half)
60
  if 100 <= year % 1000 <= 999:
61
  if second_half == '00':
62
- return f'{first_half} hundred'
63
- elif second_half_int < 10:
64
- return f'{first_half} oh {second_half_int}'
65
- return ' '.join([first_half, second_half])
66
 
67
  def normalize(text):
68
  # TODO: Custom text normalization rules?
@@ -77,7 +75,7 @@ def normalize(text):
77
  text = re.sub(r'[^\S \n]', ' ', text)
78
  text = re.sub(r' +', ' ', text)
79
  text = re.sub(r'(?<=\n) +(?=\n)', '', text)
80
- text = re.sub(r'\d*\.\d+|\b\d{4}\b', split_num, text)
81
  text = re.sub(r'(?<=\d),(?=\d)', '', text)
82
  text = re.sub(r'(?<=\d)-(?=\d)', ' to ', text) # TODO: could be minus
83
  text = re.sub(r'(?<=\d):(?=\d)', ' ', text)
@@ -104,7 +102,8 @@ def phonemize(text, voice, norm=True):
104
  ps = ps.replace('kəkˈoːɹoʊ', 'kˈoʊkəɹoʊ').replace('kəkˈɔːɹəʊ', 'kˈəʊkəɹəʊ')
105
  ps = ps.replace('ʲ', 'j').replace('r', 'ɹ').replace('x', 'k')
106
  ps = ps.replace(' z', 'z')
107
- ps = re.sub(r'(wˈʌn|tˈuː|θɹˈiː|fˈoːɹ|fˈaɪv|sˈɪks|sˈɛvən|ˈeɪt|nˈaɪn)(hˈʌndɹɪd)', r'\1 \2', ps)
 
108
  ps = ''.join(filter(lambda p: p in VOCAB, ps))
109
  if lang == 'j' and any(p in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' for p in ps):
110
  gr.Warning('Japanese tokenizer does not handle English letters.')
 
50
  if '.' in num:
51
  a, b = num.split('.')
52
  return ' point '.join([a, ' '.join(b)])
53
+ year = int(num[:4])
 
54
  if year < 1100 or year % 1000 < 10:
55
  return num
56
+ left, right = num[:2], num[2:4],
57
+ s = 's' if num.endswith('s') else ''
 
58
  if 100 <= year % 1000 <= 999:
59
  if second_half == '00':
60
+ return f'{first_half} hundred{s}'
61
+ elif int(second_half) < 10:
62
+ return f'{first_half} oh {second_half}{s}'
63
+ return f'{first_half} {second_half}{s}'
64
 
65
  def normalize(text):
66
  # TODO: Custom text normalization rules?
 
75
  text = re.sub(r'[^\S \n]', ' ', text)
76
  text = re.sub(r' +', ' ', text)
77
  text = re.sub(r'(?<=\n) +(?=\n)', '', text)
78
+ text = re.sub(r'\d*\.\d+|\b\d{4}s?\b', split_num, text)
79
  text = re.sub(r'(?<=\d),(?=\d)', '', text)
80
  text = re.sub(r'(?<=\d)-(?=\d)', ' to ', text) # TODO: could be minus
81
  text = re.sub(r'(?<=\d):(?=\d)', ' ', text)
 
102
  ps = ps.replace('kəkˈoːɹoʊ', 'kˈoʊkəɹoʊ').replace('kəkˈɔːɹəʊ', 'kˈəʊkəɹəʊ')
103
  ps = ps.replace('ʲ', 'j').replace('r', 'ɹ').replace('x', 'k')
104
  ps = ps.replace(' z', 'z')
105
+ ps = re.sub(r'(?<=[a-zɹː])(?=hˈʌndɹɪd)', ' ', ps)
106
+ ps = re.sub(r'(?<=nˈaɪn)t[iɪ]', ('d' if lang == 'a' else 't') + 'i', ps)
107
  ps = ''.join(filter(lambda p: p in VOCAB, ps))
108
  if lang == 'j' and any(p in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' for p in ps):
109
  gr.Warning('Japanese tokenizer does not handle English letters.')