Full code review

Also, add unittests for this code. You can, for ex, create 5 convenient strings each representing a document, run LDA with 2-3 topics on it and do various checks on the resulted topics (for example, verify that some important nouns from the documents have a probability higher than a treshold to appear in at least one of the topics)