in scripts/build_transitions.py [0:0]
def add_self_loops(pruned_ngrams):
maxorder = len(pruned_ngrams)
# use dict for fast search
all_grams = set([gram for grams in pruned_ngrams for gram in grams])
for o in range(1, maxorder):
for gram in pruned_ngrams[o - 1]:
# repeat one of the tokens
for pos in range(len(gram)):
if gram[pos] == START_IDX or gram[pos] == END_IDX:
continue
new_gram = gram[:pos] + (gram[pos],) + gram[pos:]
if new_gram not in all_grams:
pruned_ngrams[o].append(new_gram)
all_grams.add(new_gram)
return pruned_ngrams