Skip to main content

The Lexos Python Library

v0.2.2 Python 3.12 Python wheels Code style: ruff license Coverage

The Lexos Python library reproduces and extends most of the text analysis tools in the Lexos web app. Lexos is designed to implement many common text analysis procedures and create workflows in a way that saves the user having to re-invent the wheel or figure out how to combine multiple Python packages to achieve a given result. It is intended to be used as a library in other projects to build backend functions for applications, but it can be used in standalone scripts or in Jupyter notebooks. As with the original web app, it is designed to be accessible to entry-level users whilst offering power functionality for students and researchers, particularly in the Humanities. It is also designed to be as language-agnostic as possible so that it can be used for a wide variety of historical and under-resourced languages. Users can leverage existing language models or train their own.

📖 Documentation

A full discussion of the use of the API can be found on the website Documentation website.

⭐️ Major Features

  • Loads texts from a variety of sources into a common data structure.
  • Manages a corpus of texts and generates stastics about the corpus.
  • Performs text pre-processing ("scrubbing") and splitting ("cutting").
  • Performs tokenization and trains language models using spaCy.
  • Creates assorted visualizations of term/ngram vectors.
  • Performs hierarchical and kmeans clustering with a variety of visualizations for text comparisons..
  • Performs classification using spaCy, scikit-learn, and custom architectures.
  • Generates topic models and topic model visualizations using MALLET and DFR Browser 2.

And more!

What's New in v0.2.2

  • Minor bug fixes to spaCy model CLI installation.

What's New in v0.2.1

  • Smoother spaCy model installation process.
  • A refactored mallet module now provides access to both Java and a pyrmallet backends. This allows users to install the Rust version of MALLET with pip install pyrmallet, rather than the more complicated procedure of installing downloading and installing MALLET and JDK.

What's New in v0.2.0

  • Performance optimizations and bug fixes througout.
  • A simplified public API.
  • Better HTML and XML tag handling in Scrubber.
  • New and improved clustering visualizations.
  • Improved plotting functions in Bootstrap Consensus clustering.
  • Silhouette score analysis for KMeans clustering.
  • More advanced topic modelling features, including termite plots, customisable labels, and LLM-generated labels with local or cloud-based models.
  • A new Classification module that performs text classification using a variety of architectures.
  • A new Structural Stylometry module that allows you to assess the significance of punctuation and whitespace patterns in your documentation.
  • Language model training features.
  • Improved documentation and tutorials for new users (now in a separate lexos-docs repository).

⏳ Installation

pip install lexos

To update to the latest version, use

pip install -U lexos

Or, if you are using uv:

uv add lexos

Some Lexos functions use spaCy language models to obtain language-specific information about texts. To download spaCy models, run the following command:

download-spacy-models xx_sent_ud_sm en_core_web_sm

or

uv run download-spacy-models xx_sent_ud_sm en_core_web_sm

You can install multiple models by separating their names with spaces. If you do not run this command, Lexos will install the default xx_sent_ud_sm model the first time you attempt to use a feature that requires a spaCy language model.

If you are working in another language or need a larger language model, you can download instructions for additional models from the spaCy models page. Use the following command:

python -m spacy download en_core_web_md # Replace with the name of your model

Add uv run to the beginning of the command if you are using a uv environment.

If you need to install a model from within Python, you can use Lexos' helper funtion:

from lexos.util import download_spacy_model

download_spacy_model("fr_core_web_sm")

🚦Project Status

The Lexos API is currently in beta. Most of the core functionality of the Lexos web app, along with new features, has been implemented and documented. As of September 2026, the API is considered feature complete and stable for general use, but some rough edges remain. Feedback is welcome.

I will continue to fix bugs and improve the documentation as issues arise, but no major new features are planned at this time. The beta release coincides with at a time when the landscape of digital tools is rapidly evolving and AI-assisted coding is becoming more prevalent. I am waiting to see whether there is significant adoption of the Lexos library before investing more time in developing new features. If you like Lexos, you can help by requesting new features in the GitHub issues (labelled as "enhancement") or contributing them yourself.

💝 Contribute

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

📝 Citation Information

Kleinman, S., (2026). Lexos. v0.2.2 https://github.com/scottkleinman/lexos. 10.5281/zenodo.18112379.

Metadata

Release files for lexos 0.2.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for lexos 0.2.2
File Size Uploaded Provenance Actions
lexos-0.2.2.tar.gz 1.6 MB With provenance Details for lexos-0.2.2.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for lexos 0.2.2
File Interpreter ABI Platform Actions
lexos-0.2.2-py3-none-any.whl Python 3 none any Details for lexos-0.2.2-py3-none-any.whl

Total release size: 2.8 MB

Release files / lexos-0.2.2.tar.gz

Download URL lexos-0.2.2.tar.gz
Size 1.6 MB
Tags Source
SHA-256 checksum
How to use checksums
e0ed41f3aebfa0c1fd42d7fd627ad4246fd45cd86c724efec342172b3de0d2b0
BLAKE2b-256 checksum
How to use checksums
4a6a2e5170afbbe769764a0ede5aed909ce56a013175a81082b7220d589f9fc7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.

Transparency log

Release files / lexos-0.2.2-py3-none-any.whl

Download URL lexos-0.2.2-py3-none-any.whl
Size 1.2 MB
Tags Python 3
SHA-256 checksum
How to use checksums
87ace79349d5313e77386e2fe3be76031714e83a576ebb56d5d88ef5a383d565
BLAKE2b-256 checksum
How to use checksums
b06513ba1379401cabb5302a6bd4b5a0b2957404d19a860782506e69ebbd0d3f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.

Transparency log

Security for lexos 0.2.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for lexos-0.2.2.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page