The stuff that you're quoting is not the stuff that the `demo.py` script generates, but "latent dirichlet allocation" (whereas this project appears to generate based on a different alternate algorithm, the sentence-based one).
The sentence-based one has a major flaw: it mostly "settles into" a given speech from its training set for a few paragraphs, then transitions to a paragraph from another speech whenever the statements become sufficiently generic.
Another bug: it can sometimes lapse into an infinite loop. Here's the tail end of one of my runs:
accordingly , the committee rose ; and the speaker pro tempore ( mrs. drake )
having assumed the chair , mr. gilchrest , acting chairman of the committee of
jurisdiction would ask the counsel to explain it ; and if it is a drafting
error , then that could be corrected .
if it is not a drafting error , then that could be corrected .
if it is not a drafting error , then that could be corrected .
if it is not a drafting error , then that could be corrected .
if it is not a drafting error , then that could be corrected .
if it is not a drafting error , then that could be corrected .
if it is not a drafting error , then that could be corrected .
if it is not a drafting error , then that could be corrected .
if it is not a drafting error , then that could be corrected .
if it is not a drafting error , then that could be corrected .
[... continues for many, many more lines before ending ...]