1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| import random
|
| def sample_hotword(length,
| hotword_min_length,
| hotword_max_length,
| sample_rate,
| double_rate,
| pre_prob,
| pre_index=None,
| pre_hwlist=None):
| if length < hotword_min_length:
| return [-1]
| if random.random() < sample_rate:
| if pre_prob > 0 and random.random() < pre_prob and pre_index is not None:
| return pre_index
| if length == hotword_min_length:
| return [0, length-1]
| elif random.random() < double_rate and length > hotword_max_length + hotword_min_length + 2:
| # sample two hotwords in a sentence
| _max_hw_length = min(hotword_max_length, length // 2)
| # first hotword
| start1 = random.randint(0, length // 3)
| end1 = random.randint(start1 + hotword_min_length - 1, start1 + _max_hw_length - 1)
| # second hotword
| start2 = random.randint(end1 + 1, length - hotword_min_length)
| end2 = random.randint(min(length-1, start2+hotword_min_length-1), min(length-1, start2+hotword_max_length-1))
| return [start1, end1, start2, end2]
| else: # single hotword
| start = random.randint(0, length - hotword_min_length)
| end = random.randint(min(length-1, start+hotword_min_length-1), min(length-1, start+hotword_max_length-1))
| return [start, end]
| else:
| return [-1]
|
|