Any Texts Statistics (anyTS)
anyTS is the language-independent core of the text statistics libraries ruTS (Russian) and esTS (Spanish). It holds the code that does not depend on a language, so that it is written, tested and documented once; a language library adds its tokenizer, lemmatizer, spaCy model and rules and re-exports the core under its own names.
Features
- Extraction - sentence, word and character N-gram extractors whose tokenizer, lemmatizer and number pattern are hooks a language library overrides
- Basic statistics - sentences, words, syllables, letters, long and complex words, punctuation marks by type, with the syllables of a language library
- Readability metrics - Flesch reading ease, Flesch-Kincaid, Coleman-Liau, ARI, SMOG, Gunning fog, LIX, RIX, Legibilidad µ, the consensus grade, the school stage and the reading time, with the coefficients of a language library
- Lexical diversity - 32 metrics: TTR and its variants, MATTR, MSTTR, MTLD, MA-MTLD, MTLD-W, HD-D, the indices of Simpson and Yule, entropy, the laws of Zipf and Heaps, over the whole text or over windows with confidence intervals
- Cohesion helpers - the overlap of sentences, adjacent and over all pairs, Dice, givenness and repetition
- Dependency tree helpers - dependency distances, tree depth, valency and coordination chains on the labels shared by Universal Dependencies and ClearNLP, with a word the tokenizer split at its hyphens taken for one on request
- Phonetic helpers - the repetition index of alliteration and assonance, against the exact expectation for the words in random order
- Corpus measures - keywords against a corpus or a frequency dictionary, collocations, the dispersion of a word, Burrows's Delta and its variants, Zeta, Kilgarriff's chi-square, the Mendenhall curve and the comparison of corpora with effect sizes, a bootstrap by texts and the Holm correction, a KWIC concordance
- Visualization - Zipf's law, vocabulary growth and frequency spectrum, sentence lengths, literature fingerprinting, word tree, corpus and stylometric plots, the labels of the plots as a parameter; the machinery of the highlighting of a text by layers
- Components - the base of the spaCy components that put the statistics into an extension of
Doc - Datasets - the base of a dataset: downloading an archive with a checksum, safe extraction and filters of the records
- Exceptions - one hierarchy whose classes are also built-in exceptions
The reference of every function is a named section that the libraries include in their own documentation, so a formula is described in one place.
Installation
Requires Python 3.11 or newer.
pip install anyts
Or with uv:
uv add anyts
The dependencies are numpy, pandas, scipy, spaCy, matplotlib and graphviz; no trained spaCy model is needed. Rendering the word tree and the network of collocations also needs the executables of Graphviz.
Quick start
>>> from anyts import DiversityStats, SentsExtractor, WordsExtractor
>>> text = "The cat sat on the mat. The dog sat on the log! The cat and the dog slept."
>>> SentsExtractor().extract(text)
('The cat sat on the mat.', 'The dog sat on the log!', 'The cat and the dog slept.')
>>> ds = DiversityStats(WordsExtractor(lowercase=True).extract(text))
>>> ds.ttr, round(ds.entropy, 3)
(0.5, 2.864)
A language library subclasses the extractors and overrides their hooks:
>>> class Words(WordsExtractor):
... def lemmatize(self, word):
... return {"sat": "sit", "slept": "sleep"}.get(word.lower(), word)
>>> Words(lowercase=True, use_lexemes=True).extract("The cat sat. The dog slept.")
('the', 'cat', 'sit', 'the', 'dog', 'sleep')
The corpus measures take lists of words:
>>> from anyts.corpus import keyness
>>> cats = WordsExtractor(lowercase=True).extract("The cat sat on the mat. The cat saw a bird. The cat slept.")
>>> dogs = WordsExtractor(lowercase=True).extract("The dog sat on the log. The dog saw a cat. The dog barked.")
>>> [(keyword.word, round(keyword.log_ratio, 2)) for keyword in keyness(cats, dogs, min_freq=2)]
[('cat', 1.58)]
Development
The project uses uv for dependencies and ruff for linting and formatting.
git clone https://github.com/SergeyShk/anyTS.git
cd anyTS
make deps # create the environment and install all dependencies
uv run pre-commit install # hooks: linters on commit, tests on push
make lint # ruff check, ruff format --check, mypy
make test-cov # pytest with doctests and full coverage
make docs-build # mkdocs build --strict
The full list of commands is in make help. Contribution guidelines are in CONTRIBUTING.md.
License
Metadata
Release files for anyts 0.2.13
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| anyts-0.2.13.tar.gz | 105.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| anyts-0.2.13-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 227.1 kB
Release files / anyts-0.2.13.tar.gz
| Download URL | anyts-0.2.13.tar.gz |
|---|---|
| Size | 105.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e677d02c49844d48dc41cd82ce5a12369ab27b8e30608ffb597ce3bd788c0162
|
|
BLAKE2b-256 checksum How to use checksums |
648acc233c8c9581d8fd5375f5fb056b4e67b3344e53cb1adb764aeb0e73369c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / anyts-0.2.13-py3-none-any.whl
| Download URL | anyts-0.2.13-py3-none-any.whl |
|---|---|
| Size | 122.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d211c8c1c29b16c7cddf7254dc5a70870e2ed789a9fb1f1814d7ccf1aaca0304
|
|
BLAKE2b-256 checksum How to use checksums |
d32cedd094b9c78000f7b93b4ccb21d3f447aeeaf8396bdbdf36646b18fd64e7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|