I would say the biggest problem in the script is on line 60.
Each character is generated independently there. However, Voynich words exhibit strong positional dependencies. Certain characters only appear at the beginning or end of a word, such as qo-, -dy, and -in for example. Statistically, the result is therefore immediately recognizable as random noise.
One possible solution might be to assign weights to the individual parts of the word.
Code:
"".join(random.choice(VOYNICH_ALPHABET) for _ in range(length))Each character is generated independently there. However, Voynich words exhibit strong positional dependencies. Certain characters only appear at the beginning or end of a word, such as qo-, -dy, and -in for example. Statistically, the result is therefore immediately recognizable as random noise.
One possible solution might be to assign weights to the individual parts of the word.

