Documentation

DOI License CI/CD codecov Code Climate Scrutinizer Code Quality codebeat badge BCH compliance LGTM: Python Quality Gate Status docs

Annif is an automated subject indexing toolkit. It was originally created as a statistical automated indexing tool that used metadata from the Finna.fi discovery interface as a training corpus.

This repo contains a rewritten production version of Annif based on the prototype. It is a work in progress, but already functional for many common tasks.

Finto AI is a service based on Annif; see the source code for Finto AI.

Basic install

You will need Python 3.8+ to install Annif.

The recommended way is to install Annif from PyPI into a virtual environment.

python3 -m venv annif-venv
source annif-venv/bin/activate
pip install annif

You will also need NLTK data files:

python -m nltk.downloader punkt

Start up the application:

annif

See Getting Started in the wiki for more details.

Docker install

You can use Annif as a pre-built Docker container. Please see the wiki documentation for details.

Development install

A development version of Annif can be installed by cloning the GitHub repository. Poetry is used for managing dependencies and virtual environment for the development version.

Installation and setup

Clone the repository.

Switch into the repository directory.

Install 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

Poetry can be installed also without pipx: check the Poetry documentation.

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.

Enter the virtual environment:

poetry shell

You will also need NLTK data files:

python -m nltk.downloader punkt

Start up the application:

annif

Unit tests

Run poetry shell to enter the virtual environment and then run pytest. To have the test suite watch for changes in code and run automatically, use pytest-watch by running ptw.

Getting help

Many resources are available:

Publications / How to cite

Two articles about Annif have been published in peer-reviewed Open Access journals. The software itself is also archived on Zenodo and has a citable DOI.

Citing the software itself

See "Cite this repository" in the details of the repository.

Annif articles

  • Suominen, O.; Inkinen, J.; Lehtinen, M., 2022. Annif and Finto AI: Developing and Implementing Automated Subject Indexing. JLIS.It, 13(1), pp. 265–282. URL: https://www.jlis.it/index.php/jlis/article/view/437
    See BibTex
    @article{suominen2022annif,
      title={Annif and Finto AI: Developing and Implementing Automated Subject Indexing},
      author={Suominen, Osma and Inkinen, Juho and Lehtinen, Mona},
      journal={JLIS.it},
      volume={13},
      number={1},
      pages={265--282},
      year={2022},
      doi = {10.4403/jlis.it-12740},
      url={https://www.jlis.it/index.php/jlis/article/view/437},
    }
    
  • Suominen, O.; Koskenniemi, I, 2022. Annif Analyzer Shootout: Comparing text lemmatization methods for automated subject indexing. Code4Lib Journal, (54). URL: https://journal.code4lib.org/articles/16719
    See BibTex
    @article{suominen2022analyzer,
      title={Annif Analyzer Shootout: Comparing text lemmatization methods for automated subject indexing},
      author={Suominen, Osma and Koskenniemi, Ilkka},
      journal={Code4Lib J.},
      number={54},
      year={2022},
      url={https://journal.code4lib.org/articles/16719},
    }
    
  • Suominen, O., 2019. Annif: DIY automated subject indexing using multiple algorithms. LIBER Quarterly, 29(1), pp.1–25. DOI: https://doi.org/10.18352/lq.10285
    See BibTex
    @article{suominen2019annif,
      title={Annif: DIY automated subject indexing using multiple algorithms},
      author={Suominen, Osma},
      journal={{LIBER} Quarterly},
      volume={29},
      number={1},
      pages={1--25},
      year={2019},
      doi = {10.18352/lq.10285},
      url = {https://doi.org/10.18352/lq.10285}
    }
    

License

The code in this repository is licensed under Apache License 2.0, except for the dependencies included under annif/static/css and annif/static/js, which have their own licenses, see the file headers for details. Please note that the YAKE library is licended under GPLv3, while Annif is licensed under the Apache License 2.0. The licenses are compatible, but depending on legal interpretation, the terms of the GPLv3 (for example the requirement to publish corresponding source code when publishing an executable application) may be considered to apply to the whole of Annif+Yake if you decide to install the optional Yake dependency.