Решали подобную задачу используя gensim, в 2х вариантах: через lda и doc2vec. На большом количестве текстов (грубо от 10тыс и выше) лучше отрабатывал lda, на малых субъективно лучше doc2vec. В целом оба варианта рабочие, хорошо справлялись, часто даже отлично.