Metadata-Version: 2.3
Name: annif
Version: 1.4.0
Summary: Automated subject indexing and classification tool
License: Apache-2.0
Keywords: machine-learning,text-classification,multilabel-classification,rest-api,code4lib,subject-indexing
Author: National Library of Finland
Author-email: finto-posti@helsinki.fi
Maintainer: Osma Suominen
Maintainer-email: osma.suominen@helsinki.fi
Requires-Python: >=3.10,<3.14
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Development Status :: 5 - Production/Stable
Provides-Extra: estnltk
Provides-Extra: fasttext
Provides-Extra: nn
Provides-Extra: omikuji
Provides-Extra: spacy
Provides-Extra: stwfsa
Provides-Extra: voikko
Provides-Extra: yake
Requires-Dist: click (>=8.2.1,<8.3.0)
Requires-Dist: click-log (==0.4.*)
Requires-Dist: connexion[flask,swagger-ui,uvicorn] (>=3.1.0,<3.2.0)
Requires-Dist: estnltk (==1.7.4) ; extra == "estnltk"
Requires-Dist: fasttext-numpy2 (==0.10.4) ; extra == "fasttext"
Requires-Dist: gunicorn (>=23.0.0,<23.1.0)
Requires-Dist: huggingface-hub (>=0.34.4,<0.35.0)
Requires-Dist: joblib (>=1.5.1,<1.6.0)
Requires-Dist: jsonschema (>=4.25.0,<4.26.0)
Requires-Dist: lmdb (>=1.7.3,<1.8.0) ; extra == "nn"
Requires-Dist: nltk (>=3.9.1,<3.10.0)
Requires-Dist: numpy (>=2.2.6,<2.3.0)
Requires-Dist: omikuji (==0.5.*) ; extra == "omikuji"
Requires-Dist: optuna (>=4.5.0,<4.6.0)
Requires-Dist: python-dateutil (==2.9.*)
Requires-Dist: rdflib (>=7.1.3,<7.2.0)
Requires-Dist: requests (>=2.32.3,<2.33.0)
Requires-Dist: scikit-learn (>=1.7.1,<1.8.0)
Requires-Dist: scipy (>=1.15.3,<1.16.0)
Requires-Dist: simplemma (>=1.1.1,<1.2.0)
Requires-Dist: spacy (>=3.8.4,<3.9.0) ; extra == "spacy"
Requires-Dist: stwfsapy (>=0.6.1,<0.7.0) ; extra == "stwfsa"
Requires-Dist: tensorflow-cpu (>=2.20.0,<2.21.0) ; extra == "nn"
Requires-Dist: tomli (>=2.2.1,<2.3.0) ; python_version < "3.11"
Requires-Dist: voikko (==0.5.*) ; extra == "voikko"
Requires-Dist: yake (>=0.6.0,<0.7.0) ; extra == "yake"
Project-URL: Documentation, https://github.com/NatLibFi/Annif/wiki
Project-URL: Homepage, https://annif.org
Project-URL: Repository, https://github.com/NatLibFi/Annif
Description-Content-Type: text/markdown
[](https://zenodo.org/badge/latestdoi/100936800)
[](https://opensource.org/licenses/Apache-2.0)
[](https://quay.io/repository/natlibfi/annif)
[](https://github.com/NatLibFi/Annif/actions/workflows/cicd.yml)
[](https://codecov.io/gh/NatLibFi/Annif)
[](https://scrutinizer-ci.com/g/NatLibFi/Annif/?branch=main)
[](https://securityscorecards.dev/viewer/?uri=github.com/NatLibFi/Annif)
[](https://github.com/NatLibFi/Annif/actions/workflows/codeql.yml)
[](https://sonarcloud.io/dashboard?id=NatLibFi_Annif)
[](https://annif.readthedocs.io/en/latest/index.html)
[](https://github.com/psf/black)
[](https://codespaces.new/NatLibFi/Annif-tutorial/tree/codespaces)
Annif is an automated subject indexing toolkit. It was originally created as
a statistical automated indexing tool that used metadata from the
[Finna.fi](https://finna.fi) discovery interface as a training corpus.
Annif provides [CLI commands](https://annif.readthedocs.io/en/stable/source/commands.html) for administration, and a [REST API](https://api.annif.org/v1/ui/) and web UI for end-users.
[Finto AI](https://ai.finto.fi/) is a service based on Annif;
see a [🤗 Hugging Face Hub collection](https://huggingface.co/collections/NatLibFi/annif-models-65b35fb98b7c508c8e8a1570) of the models that Finto AI uses.
This repository contains a rewritten production version of Annif based on the
[prototype](https://github.com/osma/annif).
# Basic install
Annif is developed and tested on Linux. If you want to run Annif on Windows or Mac OS, the recommended way is to use Docker (see below) or a Linux virtual machine.
You will need Python 3.10-3.13 to install Annif.
The recommended way is to install Annif from
[PyPI](https://pypi.org/project/annif/) into a virtual environment.
python3 -m venv annif-venv
source annif-venv/bin/activate
pip install annif
Start up the application:
annif
See [Getting Started](https://github.com/NatLibFi/Annif/wiki/Getting-started)
for basic usage instructions and
[Optional features and dependencies](https://github.com/NatLibFi/Annif/wiki/Optional-features-and-dependencies)
for installation instructions for e.g. fastText and Omikuji backends and for Voikko and spaCy analyzers.
## Shell compeletions
Annif supports tab-key completion in bash, zsh and fish shells for commands and options
and project id, vocabulary id and path parameters.
The completion functionality is not enabled after Annif installation;
get instructions for how to enable it by running
annif completion --help
or see [this wiki page](https://github.com/NatLibFi/Annif/wiki/Command-line-interface#shell-compeletions).
# Docker install
You can use Annif as a pre-built Docker container image from [quay.io/natlibfi/annif](https://quay.io/repository/natlibfi/annif) repository. Please see the
[wiki documentation](https://github.com/NatLibFi/Annif/wiki/Usage-with-Docker)
for details.
# Demo install in Codespaces
Annif can be tried out in the [GitHub Codespaces](https://docs.github.com/en/codespaces). Just open a page for configuring a new codespace via the badge below, start the codespace from the green "Create codespace" button, and a terminal session will start in your browser. The environment will have Annif installed and the contents of the [Annif-tutorial](https://github.com/NatLibFi/Annif-tutorial) repository available.
[](https://codespaces.new/NatLibFi/Annif-tutorial/tree/codespaces)
# Development install
A development version of Annif can be installed by cloning the [GitHub
repository](https://github.com/NatLibFi/Annif).
[Poetry](https://python-poetry.org/) is used for managing dependencies and virtual environment for the development version; Poetry 2.0+ is required.
See [CONTRIBUTING.md](CONTRIBUTING.md) for information on [unit tests](CONTRIBUTING.md#unit-tests), [code style](CONTRIBUTING.md#code-style), [development flow](CONTRIBUTING.md#development-flow) etc. details that are useful when participating in Annif development.
## Installation and setup
Clone the repository.
Switch into the repository directory.
Install [pipx](https://pypa.github.io/pipx/) and Poetry if you don't have them. First pipx:
python3 -m pip install --user pipx
python3 -m pipx ensurepath
Open a new shell, and then install Poetry:
pipx install poetry==2.*
Poetry can be installed also without pipx: check the [Poetry documentation](https://python-poetry.org/docs/master/#installation).
Create a virtual environment and install dependencies:
poetry install
By default development dependencies are included. Use option `-E` to install dependencies for selected optional features (`-E "extra1 extra2"` for multiple extras), or install all of them with `--all-extras`. By default the virtual environment directory is not under the project directory, but there is a [setting for selecting this](https://python-poetry.org/docs/configuration/#virtualenvsin-project).
Enter the virtual environment:
eval $(poetry env activate)
Start up the application:
annif
# Getting help
Many resources are available:
* [Usage documentation in the wiki](https://github.com/NatLibFi/Annif/wiki)
* [Annif tutorial](https://github.com/NatLibFi/Annif-tutorial) for learning to use Annif
* [annif-users](https://groups.google.com/forum/#!forum/annif-users) discussion forum; please use this as a channel for questions instead of personal e-mails to developers
* [Internal API documentation](https://annif.readthedocs.io) on ReadTheDocs
* [annif.org](https://annif.org) project web site
# Publications / How to cite
See below for some articles about Annif in peer-reviewed Open Access
journals. The software itself is also archived on Zenodo and
has a [citable DOI](https://doi.org/10.5281/zenodo.5654173).
## Citing the software itself
See "Cite this repository" in the details of the repository.
## Annif articles