1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
type Markov = Record<string, Record<string, number>>;
export const markovOfStrings = (strings: string[]) => {
const markov: Markov = {};
//
// Loop over `strings`
strings.forEach((input) => {
for (let i = 0; i < input.length; i++) {
const stem = input[i];
// START -->
if (i === 0) {
markov["START"] ??= {};
markov["START"][stem] ??= 0;
markov["START"][stem]++;
}
const next = i === input.length - 1 ? "END" : input[i + 1];
markov[stem] ??= {};
markov[stem][next] ??= 0;
markov[stem][next]++;
}
});
return markov;
};