
121 stars · MIT · v0.28.0 on PyPI (2026-08-28) · Track this in Rising ↗
Five families of topic model behind one scikit-learn-style API — the head-to-head against BERTopic in one afternoon.
Radar check
What we found when we opened it. Every bar is one fact, with its date.
Last code pushed 27 Oct 2026, the same day before this check.
Latest release v0.17.2 on 18 Jun 2025.
Public since November 2023, a little over 2 years.
128 stars and 9 forks.
16 commits and 0 new issues in the last 90 days.
8 contributors. 1 pull requests merged in 90 days. A small team carries it.
No security policy file says how to report a problem. No published security advisories.
How the bars are scored
- Alive. Days since the last code push: a week or less 100, a month 90, three months 70, six months 50, a year 30, eighteen months 15, older 0.
- Releases. Age of the latest GitHub release, on a similar scale; no bar when the project publishes no releases.
- Maturity. Age of the project: eight years 100, five 90, three 70, two 55, one 40, six months 25, younger 10.
- Adoption. Stars on a log scale: 100,000 stars is 100, 10,000 is 80, 1,000 is 60, 100 is 40.
- Activity. Commits in the last 90 days: 300 or more 100, 100 85, 30 65, 10 45, any 25.
- Community. People who have contributed: 100 or more 100, 30 80, 10 60, 5 40, 2 25, one 10.
- Security. A published security policy 80, none 40; published advisories are listed, not scored.
Checked by Repo Radar on 27 Oct 2026 from the repository on GitHub. Covered in Edition 4.
▶Repo detailsthe review · specs · pros & cons · install
What it does
It finds the topics in a collection of documents and reports the words that define each one. Five families of method sit behind a single interface, including clustering models, Semantic Signal Separation, KeyNMF and autoencoding models. The interface follows the scikit-learn pattern, so changing method means changing the model name and running the same code again. It uses sentence-transformers embeddings, which are numeric summaries of meaning, so the same text can be fed to any of the methods. It reports how much of each topic each document contains, and prints readable topic tables. There are helpers for naming topics and for tracking how topics shift over time. It stores nothing and has no interface to click. It is a library that a program uses.
Why it matters
Who it suits. Anyone comparing topic-modelling methods on their own data rather than accepting whichever one works first. It matters most for short, fragmentary text such as chat transcripts, which are full of one-word replies and where methods that assume each document has one clean subject do badly. Skip it if one method already gives acceptable results, because more options without a fixed way of judging them just means keeping whichever was looked at last.
Verdict. Worth an afternoon when the grouping is the product rather than a side report. Semantic Signal Separation is the reason to look: it is built for text where topics overlap instead of separating cleanly, which is what a conversation is. Two cautions. 125 stars and essentially one author is a real risk for anything load-bearing. And the GitHub release tags lag behind PyPI, which makes the project look much quieter than it is, so check PyPI for the current version. BERTopic is the established default, MIT and 7.8k stars. Top2Vec is the older single-method alternative.
Summary (Key Points)from the README
Key features
- Many transformer-based models: Includes S³, KeyNMF, GMM, Topeax, SensTopic, clustering models (BERTopic and Top2Vec), autoencoding models (ZeroShotTM and CombinedTM), and FASTopic.
- Scenario-specific models: Supports dynamic, online, seeded, hierarchical, and multimodal topic modeling.
- scikit-learn style API: Models follow scikit-learn conventions, so fitting follows familiar workflows.
- Pretty printing: `print_topics()` lists the top 10 words for each topic.
- Interactive figures and topicwizard: Works with the topicwizard web app and its Figures API for individual HTML figures.
- Automatic topic naming: Assigns readable names with LLMs or n-gram retrieval, and also supports manual naming.
- Informative descriptions: Topic descriptions can use keyphrases, noun phrases, lemmatization, or stemming.
- Custom vectorizers: Enables topic modeling over phrases, lemmata, and stems.
Important
- CTM dependency: Using CTMs requires installing the package with Pyro as an optional dependency.
- Clustering models: BERTopic and Top2Vec need an additional install step, and the README's command for it is missing from the text.
- LLM naming: Automatic naming with LLMs requires `pip install "turftopic[openai]"`.
- Vectorizers: The phrase, lemma, and stem vectorizers require `pip install "turftopic[spacy]"`.
- Mac SSL certificates: On a Mac, you may need to install SSL certificates before the 20Newsgroups dataset can be downloaded.
- Documentation dependence: Several visualization utilities for specific models, such as hierarchical or dynamic ones, are only described in the documentation, not in the README.
Written by an AI model from the project’s README; not part of the review, and it can be wrong.
- One interface over five families of method, so the comparison is a parameter and not a rewrite
- Genuinely active: version 0.28.0 went to PyPI in August 2026
- Built on sentence-transformers, so any compatible embedding model can be used underneath
- 125 stars and essentially one author, which is real risk for a load-bearing dependency
- The GitHub release tags lag behind PyPI, so the project looks quieter than it is
- More methods means more settings, and nothing here tells you which output is better
Install into the FastAPI environment alongside BERTopic and run both over the same twenty saved conversations.
python3 -m venv venv source venv/bin/activate pip install turftopic


