1.3k stars · MIT · 2.2.1 on PyPI (2026-04-11) — dated from PyPI per the 'for a Python tool, believe PyPI' rule
Splits text into real sentences in 85 languages using small CPU models, including text with no punctuation.
▶Repo detailsthe review · specs · pros & cons · install
What it is
wtpsplit is a Python library with small trained models that find sentence boundaries. The current model family is called SaT.
Why it matters
Everything Grasppy does afterwards depends on this first cut. Chonkie (Edition 2 #10) makes chunks from it. BERTopic and turftopic group those chunks. model2vec and vicinity search them. All of them work with whatever the splitter hands over. Real chat is lowercase, runs on, and often has no full stops. A rule-based splitter turns a whole message into one enormous sentence, and the topic map comes out vague for reasons nobody can see. Russian makes it worse, because the simple splitters were tuned on English.
- MIT, and the small models run on an ordinary processor. No graphics card needed.
- It handles text with no punctuation, which is exactly the case that breaks the simple approach.
- One language-agnostic model covers both your English and your Russian data, so you do not maintain two paths.
- It is a model, so the first run downloads weights and it wants a few hundred MB of memory. Load it once when your service starts, not on every request.
- It is slower than splitting on full stops. Do it in a background job rather than while a person is waiting. Procrastinate (Edition 5 #10) is the queue for that.
- The last release on PyPI is 2.2.1, from 11 April 2026. Five months. Fine, but not fast-moving.
source venv/bin/activate
pip install wtpsplit
python -c "from wtpsplit import SaT; s = SaT('sat-3l-sm'); print(s.split('привет как дела все нормально спасибо'))"
