NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #3824 most downloaded on PyPI
Calculate statistical features from text
Last release 7 months ago
18 Feb 2026
Ships unpredictably
gaps range from 5 weeks to 2.3 years
Most releases are documented
notes for 24 of 36 stable releases
Nothing withdrawn
no release was ever pulled
12 years old
38 releases · first in 2014
Make cmudict an optional dependency - see #214
>>> from textstat import Text
>>> my_text = Text("...")
>>> my_text.flesch_reading_ease()
...
>>> my_text.flesch_reading_ease.cite()
"Flesch, R. (1948). 'A new readability yardstick'. Journal of Applied Psychology, 32(3), pp. 221-232. doi:10.1037/h0057532."If you want to try it, it's available as a pre-release on PyPi also
pip install --pre textstat
If you do try it out, I would love to hear from you in the attached GitHub discussion.
Source is available on the dev branch.
Full Changelog: 1.0.0-alpha.0...1.0.0-alpha.1
One column per quarter.
This is a very early pre-release of a potential re-write of textstat I've been working on off-and-on.
This is a very early pre-release of a potential re-write of textstat I've been working on off-and-on.
>>> from textstat import Text, Sentence, Word
>>> my_text = Text(
"Alice was beginning to get very tired of sitting by her sister on the "
"bank, and of having nothing to do: once or twice she had peeped into "
"the book her sister was reading, but it had no pictures or "
"conversations in it, “and what is the use of a book,” thought Alice "
"“without pictures or conversations?”"
)
>>> my_text.stats()
{'letters': 236, 'characters': 246, 'words': 57, 'sentences': 1}
>>> my_text.flesch_reading_ease()
31.727368421052645
>>> my_text.filter(Word.length >= 10)
[Word('conversations'), Word('conversations')]The intial idea behind this new version is to better support other languages - but now contains a new interface and features.
This intial release only supports English but has the framework for adding additional languages.
If you want to try it, it's available as a pre-release on PyPi also
pip install --pre textstat
If you do try it out, I would love to hear from you in the attached GitHub discussion.
Source is available on the dev branch.
fix: clamp text_standard grade levels to sensible bounds by @JohnGiorgi in #217
Thank you to @JohnGiorgi for you contribution!
Full Changelog: 0.7.12...0.7.13
Fix/default get_lang_cfg by @d-led in #216
Download cmudict if not found in path by @mitanshu7 in #215
Thank you @mitanshu7 for your contribution!
Full Changelog: 0.7.10...0.7.11
Revert using cmudict in favour of nltk.corpus.cmudict
Nothing published for this version
Fixed compatiablity with python-cmudict@1.1.0 by @alxwrd in #213
python-cmudict@1.1.0 by @alxwrd in #213Full Changelog: 0.7.7...0.7.8
Fixes broken 0.7.6 release Full Changelog : 0.7.6...0.7.7
Fixes broken 0.7.6 release
Full Changelog: 0.7.6...0.7.7
Complete rewrite motivated by intermediate-math rounding by @Sean-Hastings in #203
Thanks to @Sean-Hastings and @vcBinary or your contributions for this release!
Full Changelog: 0.7.5...0.7.6
Use cmudict for more accurate syllable counting in en_US. #201
Thanks to @nbroad1881 and @Sean-Hastings for your contributions for this release!
Full Changelog: 0.7.4...0.7.5
Python 3.12 compatability. #197 #198
Thanks to @matyasosvath and @mbarkhau for your contributions this release!
Full Changelog: https://github.com/shivam5992/textstat/compare/0.7.3...0.7.4
Add McAlpine EFLAW readability score. #174
remove_punctuation(). #172textstat.set_rounding(False). #166fernandez_huerta(). #165wiener_sachtextformel(). #163syllable_count to use .split() and not .split(' ') so to split on all whitespace. #161Thanks to @LKirst, @Clickedbigfoot, @AjBreidenbach, @kadatatlukishore, @pls78, and @lclarko for your contributions this release!
Full Changelog: https://github.com/shivam5992/textstat/compare/0.7.2...0.7.3
Added exception handling for ZeroDivisionErrors. #144
ZeroDivisionErrors. #144dale_chall_readability_score to use new syllable_threshold= kwarg. #143Thanks to @lukaschoebel, @GuillemGSubies, and @lclarko for their contributions this release!
Improved performace of difficult_words function.
difficult_words function.Thanks to @markopy for their contribution this release!
Added Fernandez-Huerta test, Szigriszt-Pasos formula, Gutierrez-Polini index, Crawford's formula. #129
is_difficult_word and is_easy_word functions. #135Thanks to @downvec and @richiehowelll for their contributions this release!
Hotfix: add missing resource files
Hotfix: add missing resource files
Added support for different languages in difficult_words. #120
difficult_words. #120Thanks to @cclauss and @GuillemGSubies for their contributions this release!
Dropped support for Python 2 🎉. #103
Thanks to @hugovk and @GuillemGSubies for their contributions this release!
Added new spache_readability function. #87
spache_readability function. #87dale_chall_readability_score_v2. #90difficult_words_list which returns the list of difficult words. #99reading_time. #102Thanks to @akarsh3007, @lmaczulajtys, @rinaldo-rex, @kishiyamat, and @halidziya for their contributions this release!
Fix issue with Python 2 and open(, encoding=). See #86
open(, encoding=). See #86Thanks to @bradfordlynch, @MKaras93, and @jhpyle for their contributions this release!
Specify README encoding in setup.py.
setup.py.difficult_words from 1 to 2.gunning_fog difficult word syllable threshold to 3.textstat.avg_letter_per_word() now ignores punctuation. #67
textstat.avg_letter_per_word() now ignores punctuation. #67textstat.avg_character_per_word() which has the same functionality as the old avg_letter_per_word and included puctuation.textstat.letter_count() is that same as char_count, but ignores puctuation..text_standard() will now correctly use the correct ordinal suffix. #65
.text_standard() will now correctly use the correct ordinal suffix. #65.gunning_fog() should now be using the correct formula. #62, #66Thanks to @mcnuttandrew, @jayantj for contributions for this release!
Fixes issue with Python 2 and Pyphen.
Fix issue with Python 2 importing. #60, #61
.text_standard() now supports keyword argument float_output to allow result as a float. #32, #57
.text_standard() now supports keyword argument float_output to allow result as a float. #32, #57.difficult_words() is now case insensitive and supports the unicode quote marks ‘ and ’. #36.linsear_write_formula() has had unnecessary workload removed. #37from textstat.textstat import textstat to import textstat. #410.0 instead of None to help when using with modules like pandas. #48Thanks to @aetherwu, @Kr0san89, @tripleee, @catethos for contributions for this release!
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →