Skip to main content

Process-Sanskrit

Process-Sanskrit is a python open-source library for automatic Sanskrit text annotation and inflected dictionary search.

The library has two main use cases:

  1. Dictionary search: multi dictionary lookup with grammatical annotation for words exactly as they are written in texts: in any transliteration format, inflected, compounded and with sandhi.
  2. Automatic Text Annotation: generate automatically version of Sanskrit texts without sandhi and with split compounds, with grammatical annotations and dictionary entries for each word.

The architecture of the library is based on a cascading approach to Sanskrit text analysis, as described in our NAACL 2025 paper: Accessible Sanskrit: A Cascading System for Text Analysis and Dictionary Access.

The library is one of the main components powering up the Sanskrit Voyager backend. It is used for dictionary searches, stemming, and to pre-process texts for the corpus search.

Demo:

The library can be employed live on the Sanskrit Voyager website.

Select a book or paste some text, click on the words and see the library in action!

Or search some inflected and sandhi-ed words in the search bar to get the dictionary entries.

The following is the Quickstart guide. For a more detailed documentation and advanced features refer to the documentation website.

Installation

To install the library use the standard pip install command, then call update-ps-database in the terminal (or process_sanskrit.update_database() from Python) to setup the database.

pip install process-sanskrit
update-ps-database

Everything the pipeline needs, including sandhi splitting with full statistical (DCS word2vec) scoring, is installed by the base package. There are no extras to remember.

Binary wheels for Linux (x86-64, aarch64), macOS (x86-64, arm64) and Windows (x86-64) ship the native Rust sandhi splitter, so installing needs no Rust or C++ toolchain. Building from source requires Rust 1.87 or newer and a C++17 compiler; see the Rust splitter guide for backend selection and build details.

update-ps-database downloads and setup the database with the dictionaries and the inflection tables (adjusted from CLS inflect ) in the resources folder (150 mb download, 583 mb uncompressed, released with Creative Commons NC license).

The same step is available from Python, which is handy in notebooks and scripts. It is idempotent, so calling it on every start-up costs nothing once the database is in place, and it raises process_sanskrit.DatabaseUpdateError instead of exiting on failure:

import process_sanskrit
process_sanskrit.update_database()   # returns the path of the ready database

Downloads are staged and atomically renamed into place, so an interrupted run never leaves a partial database behind. Details in documentation/database-setup.md.

## if inside jupyter or colab use:

!pip install process-sanskrit
!update-ps-database

only transliterate works without the database!

Deployments that keep the database outside the Python package can set PROCESS_SANSKRIT_DB_PATH to the existing SQliteDB.sqlite file. The library opens it read-only; see documentation/database-location.md.

Persistent analysis cache

Expensive sandhi and compound analyses are cached by default in a separate, disk-backed SQLite database. The dictionary database remains read-only. Cached results expire after 90 inactive days by default; set PROCESS_SANSKRIT_CACHE_RETENTION=keep_all to retain the de-duplicated prediction corpus indefinitely, or PROCESS_SANSKRIT_CACHE_ENABLED=false to disable persistence. Individual calls can pass cached=False or cached=True.

See the local cache guide for paths, privacy, retention, web-worker behaviour, and ML-corpus limitations.

Process Function:

The core of the library is the process function, that accepts text in Sanskrit as input and executes an entire text processing pipeline for the text.

import process-sanskrit as ps 

ps.process("pratiprasave")

Process returns a list that contains for each word contained in the text or compounds:

  1. Word stem: ‘pratiprasava’
  2. Grammatical tagging: masculine noun/adjective ending in a
  3. Case (for nouns) or Inflection (for verbs): [('Loc', 'Sg')]
  4. Inflection table for the word as a list: ['pratiprasavaḥ', 'pratiprasavau', 'pratiprasavāḥ', 'pratiprasavam', 'pratiprasavau', 'pratiprasavān', 'pratiprasavena', 'pratiprasavābhyām', 'pratiprasavaiḥ', 'pratiprasavāya', 'pratiprasavābhyām', 'pratiprasavebhyaḥ', 'pratiprasavāt', 'pratiprasavābhyām', 'pratiprasavebhyaḥ', 'pratiprasavasya', 'pratiprasavayoḥ', 'pratiprasavānām', 'pratiprasave', 'pratiprasavayoḥ', 'pratiprasaveṣu', 'pratiprasava', 'pratiprasavau', 'pratiprasavāḥ']
  5. Original word: 'pratiprasave’
  6. Word Components according to the Monnier Williams: (in this case none) 'prati—prasava’
  7. Dictionary entries in XML format. In the form of a dictionary for all the selected dictionaries: {'mw': {'pratiprasava': ['prati—prasava a See under prati-pra- √ 1. sū.', 'prati-°prasava b m. counter-order, suspension of a general prohibition in a particular case, Śaṃkarācārya ; Kātyāyana-śrauta-sūtra , Scholiast or Commentator; Manvarthamuktāvalī, KullūkaBhaṭṭa's commentary on Manu-smṛti ', ' an exception to an exception, Taittirīya-prātiśākhya , Scholiast or Commentator', ' return to the original state, Yoga-sūtra ']}

Process automatically detects transliteration scheme and transliterate to IAST. If that is problematic, pre-transliterate to IAST first using the transliterate function.

Also, the base version of Process is optimised for single words, - if you have a sentence or book, split by spaces and pass each term to transliterate.

In the online interface it is possible to retrive the entries for the components (in this case 'prati' and 'prasava') by clicking on them. Clicking automatically sends to the dictionary entry of the components.

Dictionary Selection:

The process function returns dictionary entries for the found roots.

By default, only the Monnier Williams dictionary is selected.

In the following example we search for a word that is not in the MW: 'dvandva'. The process function automatically check if any of the dictionaries has it and automatically select it. In this case the word is found in the Macdonnell dictionary.

 
import process_sanskrit as ps
print(ps.process('dvandva'))

To use more dictionaries, process accepts as optional arguments the dictionary abbreviation. In the following code example we retrieve the entries for the word 'saṃskāra' from the Apte, Cappeller, Grassman, and Edgerton dictionaries.

import process_sanskrit as ps

print(ps.process('saṃskāra', 'ap90', 'cae', 'gra', 'bhs'))



### Available Dictionaries and Abbreviations 

Here is the list of all the currently available dictionaries with the abbreviations:
  • 'mw': 'Monier-Williams Sanskrit-English Dictionary' ,
  • 'ap90': 'Apte Practical Sanskrit-English Dictionary'
  • ‘cae': 'Cappeller Sanskrit-English Dictionary'
  • 'ddsa': 'Macdonell A Practical Sanskrit Dictionary'
  • 'gra': 'Grassmann Wörterbuch zum Rig Veda'
  • 'bhs': 'Edgerton Buddhist Hybrid Sanskrit Dictionary'
  • 'cped': 'Concise Pali English Dictionary'

All the dictionaries are slightly modified version of the *Cologne Digital Sanskrit Dictionaries*, apart from the [The Concise Pali-English Dictionary By Buddhadatta Mahathera](https://buddhistuniversity.net/content/reference/concise-pali-dictionary). The Pali dictionary was added in to handle words that appears in the late Buddhist authors. 

Cologne Digital Sanskrit Dictionaries, version 2.7.286, Cologne University, accessed on February 19, 2025, https://www.sanskrit-lexicon.uni-koeln.de


### Stemming:

The process function can be used just for simple sandhi/compound split and stemming, adding the optional flag: *mode=’roots’*.

```python
import process_sanskrit as ps

print(ps.process('yamaniyamāsanaprāṇāyāmapratyāhāradhāraṇādhyānasamādhayo', mode='roots'))

## output:
## ['yama', 'niyama', 'asana', 'prāṇāyāma', 'pratyāhāra', 'dhāraṇa', 'dhyāna', 'samādhi']

In case of ambiguity the process function does not select between the two (or three) possibilities, but returns all of them.

Transliteration:

The library offers a function to transliterate texts with auto-detection for the transliteration input format. This function is a slight adaptation from Indic-Transliteration Detect.

import process_sanskrit as ps

# Transliteration
print(ps.transliterate("patañjali", "DEVANAGARI")) ## IAST 
print(ps.transliterate("pataJjali", "DEVANAGARI")) ## HK format

## same output:
## पतञ्जलि

## In case you need to manually select the input scheme, 
## force it using the optional 'input_scheme' flag
## the scheme it's not case sensitive (slp1=SLP1): 

print(ps.transliterate('pataYjali', 'tamil', input_scheme='slp1'))

## output: பதஞ்ஜலி

The library provides the dict_search function to retrieve dictionary entries.

Pass to the dict_search a list of strings to be searched on and (optionally) a list of dictionary tags.

import process_sanskrit as ps

## unlike the process function, the dict_search wants the input in IAST format. 

# example usage for Dictionary lookup
ps.dict_search(['pratiprasava', 'saṃskāra'])

# after a list of entries, optionally add dictionary tags to search in multiple dictionaries. 

# search in Edgerton Buddhist Hybrid Sanskrit Dictionary
# and Grassmann Wörterbuch zum Rig Veda:
ps.dict_search(['pratiprasava', 'saṃskāra'], 'gra', 'bhs')

The library automatically handles the fact that the Apte records nominatives instead of un-inflected stems (i.E. yogaḥ instead of yoga).

ProcessBYT5

Experimental function: segments the text with the BYT5 model, then sends each word to the process function for stemming and grammatical results. The model needs torch and transformers, which the base package does not install, so this one feature needs the byt5 extra:

pip install process-sanskrit[byt5]
from process_sanskrit.functions.processBYT5 import processBYT5

processBYT5('śrutam āgamavijñānaṃ tat sāmānyaviṣayam')

Sources:

CLS inflect for the inflection tables: https://github.com/sanskrit-lexicon/csl-inflect

The Sanskrit Parser library by Karthik Madathil handles part of the Sandhi Splitting: https://github.com/kmadathil/sanskrit_parser

Since v1.5 a reduced, split-only copy of it is vendored under process_sanskrit/splitter/ (MIT licensed, and gratefully used). The sandhi splitting behaviour is unchanged — it is verified split-for-split against the original. See documentation/sandhi-splitter.md for what was kept, what was dropped, and why.

The split scorer uses a word2vec model trained on the Digital Corpus of Sanskrit (DCS), also from the Sanskrit Parser project: http://www.sanskrit-linguistics.org/dcs/

The BYT5 model used in the experimental version of the process function is from the https://huggingface.co/buddhist-nlp/byt5-sanskrit discussed in the paper:

One Model is All You Need: ByT5-Sanskrit, a Unified Model for Sanskrit NLP Tasks

Sebastian Nehrdich, Oliver Hellwig, Kurt Keutzer

https://arxiv.org/abs/2409.13920

Metadata

Release files for process-sanskrit 1.5.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 process-sanskrit 1.5.2
File Size Uploaded
process_sanskrit-1.5.2.tar.gz 24.4 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for process-sanskrit 1.5.2
File
process_sanskrit-1.5.2-cp39-abi3-win_amd64.whl CPython 3.9 abi3 Windows x86-64 Details
process_sanskrit-1.5.2-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.9 abi3 Linux glibc 2.17+ x86-64 Details
process_sanskrit-1.5.2-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl CPython 3.9 abi3 Linux glibc 2.17+ ARM64 Details
process_sanskrit-1.5.2-cp39-abi3-macosx_11_0_x86_64.whl CPython 3.9 abi3 macOS 11.0+ x86-64 Details
process_sanskrit-1.5.2-cp39-abi3-macosx_11_0_arm64.whl CPython 3.9 abi3 macOS 11.0+ ARM64 Details

Total release size: 137.6 MB

Release files / process_sanskrit-1.5.2.tar.gz

Download URL process_sanskrit-1.5.2.tar.gz
Size 24.4 MB
Tags Source
SHA-256 checksum
How to use checksums
06fefa6e6680e4d4e12f40ea064ac2ed8c0247f948dd17c2a993daa24eb93ed8
BLAKE2b-256 checksum
How to use checksums
8dc0a45312d0fafcfd2233ab3555240fb0a861fe4bcbf198cbf0e03bea79ad1c
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 16, 2026.

Transparency log

Release files / process_sanskrit-1.5.2-cp39-abi3-win_amd64.whl

Download URL process_sanskrit-1.5.2-cp39-abi3-win_amd64.whl
Size 22.7 MB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
8f94e8341b922df2e591c801c68fbedab62d3a610b0db2f70904c24dd43cd7cb
BLAKE2b-256 checksum
How to use checksums
2c96a147e9730bc3b494f45d21fe246c501af804681e906f936714fb96502a9d
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 16, 2026.

Transparency log

Release files / process_sanskrit-1.5.2-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL process_sanskrit-1.5.2-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 22.7 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
5bb402fc651bf2d397255230b17ffa548d13d9455aeb36589dabd070d5b32d50
BLAKE2b-256 checksum
How to use checksums
ecaced09d90f5b49801b0dfa44d1eb8f2c99622d6363029d86297868e25ac100
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 16, 2026.

Transparency log

Release files / process_sanskrit-1.5.2-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl

Download URL process_sanskrit-1.5.2-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Size 22.6 MB
Tags CPython 3.9 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
200e835f027d7c5bd880f7c427db0a044304d8e5200b8f6a0acb05aa77c1be16
BLAKE2b-256 checksum
How to use checksums
547852013b4e686d1234e350ea9824ed772b2617211ea2413a9e6a93112dd873
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 16, 2026.

Transparency log

Release files / process_sanskrit-1.5.2-cp39-abi3-macosx_11_0_x86_64.whl

Download URL process_sanskrit-1.5.2-cp39-abi3-macosx_11_0_x86_64.whl
Size 22.6 MB
Tags CPython 3.9 abi3 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
184fa059d47320f79a8909a424135d1b0abffbfaeb2339dcf656f74decd92c6d
BLAKE2b-256 checksum
How to use checksums
b24f118f38f246cb8f7a374207246466d5b7bc0f77203486f6513de46136280c
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 16, 2026.

Transparency log

Release files / process_sanskrit-1.5.2-cp39-abi3-macosx_11_0_arm64.whl

Download URL process_sanskrit-1.5.2-cp39-abi3-macosx_11_0_arm64.whl
Size 22.6 MB
Tags CPython 3.9 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
c9d8d42d82e06e39eff614958a2880b13d8caa23c06a2adb15eae90e491cd9d7
BLAKE2b-256 checksum
How to use checksums
bce822071210e88253b9a58c2eaa4ab6e62814e29ff3bb8d002ab0d691a6971d
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 16, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.5.2 This release

6 release files

1.5.1

5 release files

1.1.0

2 release files

1.0.24

2 release files

1.0.23

2 release files

1.0.22

2 release files

1.0.21

2 release files

1.0.20

2 release files

1.0.19

2 release files

1.0.18

2 release files

1.0.17

2 release files

1.0.16

2 release files

1.0.15

2 release files

1.0.14

2 release files

1.0.13

2 release files

1.0.12

2 release files

1.0.11

2 release files

1.0.10

2 release files

1.0.9

2 release files

1.0.3

2 release files

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