Skip to main content

Rishe: fast Persian NLP

Rishe (ریشه)

Fast Persian NLP and morphology for Python. Prebuilt wheels, no Python dependencies, and the base pipeline needs no model downloads.

Install

pip install rishe

Python 3.9+. Linux (glibc and musl), macOS and Windows wheels are published.

Quickstart

from rishe import Pipeline

pipe = Pipeline()
doc = pipe("اون داره تو خونه کتاب میخونه، چیه؟")

doc.tokens       # ['آن', 'دارد', 'تو', 'خانه', 'کتاب', 'می‌خواند', '،', 'چیست', '؟']
doc.lemmas       # ['آن', 'داشت', 'تو', 'خانه', 'کتاب', 'خواند', '،', 'چیست', '؟']
doc.formal_text  # 'آن دارد تو خانه کتاب می‌خواند، چیست؟'

pipe.normalize, word_tokenize, sent_tokenize, lemmatize, stem, conjugate, spell_correct and the rest are methods on the same object. pipe(text) rewrites colloquial forms; word_tokenize tokenizes the surface text without rewriting.

Class-based API

The same engine is available as small, reusable classes:

from rishe import (
    Lemmatizer,
    Normalizer,
    SentenceTokenizer,
    Stemmer,
    TokenSplitter,
    WordTokenizer,
    sent_tokenize,
    word_tokenize,
)

Normalizer().normalize("مي كنم")             # 'می‌کنم'
WordTokenizer().tokenize("رفته است")         # ['رفته_است']
SentenceTokenizer().tokenize("یک. دو.")
Lemmatizer().lemmatize("می‌روم")              # 'رفت#رو'
Stemmer().stem("کتاب‌ها")                    # 'کتاب'
TokenSplitter().split_token_words("بهش")     # [('به', 'او')]

word_tokenize("رفته است")                    # ['رفته_است']
sent_tokenize("یک. دو.")

No lexicon paths are needed: the classes use Rishe's compiled-in lexicons. WordTokenizer accepts the same options as the pipeline tokenizer (join_verb_parts, replace_emails, replace_links, and so on).

Features

  • Normalization, tokenization, sentence splitting and lemmatization.
  • Stemming, conjugation, inflection, clitic splitting, spell correction, stopwords and ezafe detection.
  • Static fastText/word2vec embeddings with sentence pooling.
  • Optional POS, NER and learned ezafe model packs.

Feature tour

Morphology and utilities

pipe.stem("کتاب‌ها")                      # 'کتاب'
pipe.conjugate("رفت")["present"][:3]      # ['می‌روم', 'می‌روی', 'می‌رود']
pipe.comparative("بزرگ")                  # 'بزرگ‌تر'
pipe.superlative("بزرگ")                  # 'بزرگ‌ترین'
pipe.plural("کتاب")                       # 'کتاب‌ها'
pipe.possessive("خانه", 0)                # 'خانه‌ام'
pipe.split_token("بهش")                   # ['به', 'او']
pipe.spell_correct("سسلام بر ششما")       # 'سلام بر شما'
pipe.tokenize_spans("سلام دنیا")          # [('سلام', 0, 4), ('دنیا', 5, 9)]

Normalization and masking

normalize_stages applies individual operators in the order you list them; mask_stages removes or masks URLs, emails, mentions, hashtags, HTML, digits, diacritics, punctuation, stopwords, offensive words and non-Persian text.

pipe.normalize_stages("﷽ 1𝟮3٤٥⓺", ["arabic_unicode", "digits"])
# 'بسم الله الرحمن الرحیم ۱۲۳۴۵۶'

pipe.mask_stages("سلام @user، به https://rishe.dev یا info@rishe.dev بنویس.",
                 ["url", "email", "mention"])
# 'سلام   به <URL> یا <EMAIL> بنویس.'

Utilities, keywords and transliteration

pipe.number_to_words(1404)                 # 'یک هزار و چهارصد و چهار'
pipe.ngrams("این یک متن", 1, 2)             # ['این', 'یک', 'متن', 'این یک', 'یک متن']
pipe.persianize("فایل را با کامپیوتر باز کن")  # 'پرونده را با رایانه باز کن'
pipe.rake(text, top_n=5)
pipe.textrank(text, top_n=5)
pipe.to_tajik("خانه")                      # 'хона'
pipe.to_persian("хона")                    # 'خانه'

keyboard_noise, ocr_noise and whitespace_noise add reproducible typing, OCR and spacing noise; pass seed= for deterministic output.

Tokenizer options

pipe.word_tokenize_with("رفته است", join_verb_parts=True)   # ['رفته_است']
pipe.word_tokenize_with("info@a.co", replace_emails=True)   # ['EMAIL']

Options include join_verb_parts, join_abbreviations, separate_emoji, replace_links, replace_ids, replace_emails, replace_numbers and replace_hashtags.

Corpora

from rishe import ConlluReader, PeymaReader, PlainTextReader

for sentence in ConlluReader("data/corpora/fa_perdt-ud-test.conllu"):
    print(sentence.text, sentence.tokens[0].lemma)

ConlluReader handles CoNLL-U, PeymaReader reads the PEYMA format and PlainTextReader reads one sentence per line.

Model packs

POS, NER and ezafe are separate, checksum-verified downloads. They run inside the package without ONNX Runtime or a Python ML stack.

rishe hub pull pos-compact       # also: ner-compact, ezafe-compact
from rishe import ModelPack, hub

pos = ModelPack(hub.path_pack("pos-compact"))
pos.tag("کتاب‌های خوب را به دوستانم می‌دهم.")
# [('کتاب‌های', 'NOUN'), ('خوب', 'ADJ'), ('را', 'ADP'), ('به', 'ADP'),
#  ('دوستانم', 'NOUN'), ('می‌دهم', 'VERB'), ('.', 'PUNCT')]

pos.tag_words(["کتاب‌های", "خوب"])   # pre-tokenized input

ner = ModelPack(hub.pull_pack("ner-compact"))
ezafe = ModelPack(hub.pull_pack("ezafe-compact"))

Use hub.pull_pack(name) to download and return the directory, or hub.path_pack(name) for an existing cache entry.

Embeddings

rishe hub pull hazm-fasttext-300   # optional 2.3 GB static embedding file
from rishe import Embeddings, hub

emb = Embeddings(hub.path("hazm-fasttext-300"))
emb.dim, len(emb)                      # vector size, vocabulary size
emb.vector("کتاب")                     # list[float] or None
emb.sentence_vector("این کتاب خوب است") # mean of in-vocab token vectors
emb.most_similar("کتاب", 5)            # [(word, cosine), ...]

CLI

rishe normalize "مي كنم"
rishe tokenize "سلام دنیا" --json
rishe mask "info@a.co" --stages email

Docs

License

Dual-licensed under Apache-2.0 or MIT, at your option. Lexicon attributions are in NOTICE.md.

Built by Mahdi Alikhah.

Metadata

Release files for rishe 0.5.1

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

Source distribution (sdist)

Source distribution for rishe 0.5.1
File Size Uploaded Provenance Actions
rishe-0.5.1.tar.gz 1.8 MB With provenance Details for rishe-0.5.1.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for rishe 0.5.1
File Actions
rishe-0.5.1-cp39-abi3-win_amd64.whl CPython 3.9 abi3 Windows x86-64 Details for rishe-0.5.1-cp39-abi3-win_amd64.whl
rishe-0.5.1-cp39-abi3-musllinux_1_2_x86_64.whl CPython 3.9 abi3 Linux musl 1.2+ x86-64 Details for rishe-0.5.1-cp39-abi3-musllinux_1_2_x86_64.whl
rishe-0.5.1-cp39-abi3-musllinux_1_2_aarch64.whl CPython 3.9 abi3 Linux musl 1.2+ ARM64 Details for rishe-0.5.1-cp39-abi3-musllinux_1_2_aarch64.whl
rishe-0.5.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 abi3 Linux glibc 2.17+ x86-64 Details for rishe-0.5.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
rishe-0.5.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.9 abi3 Linux glibc 2.17+ ARM64 Details for rishe-0.5.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
rishe-0.5.1-cp39-abi3-macosx_11_0_arm64.whl CPython 3.9 abi3 macOS 11.0+ ARM64 Details for rishe-0.5.1-cp39-abi3-macosx_11_0_arm64.whl
rishe-0.5.1-cp39-abi3-macosx_10_12_x86_64.whl CPython 3.9 abi3 macOS 10.12+ x86-64 Details for rishe-0.5.1-cp39-abi3-macosx_10_12_x86_64.whl

Total release size: 81.4 MB

Release files / rishe-0.5.1.tar.gz

Download URL rishe-0.5.1.tar.gz
Size 1.8 MB
Tags Source
SHA-256 checksum
How to use checksums
07604d596cb45a60e0db263e0ec23a470bdf9453bb2974a17abefd42a3a22c59
BLAKE2b-256 checksum
How to use checksums
9663a2641bd0d3a09581e80b608488564ae039aa9de3dc32b1ad79001e47d7c4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 26, 2026.

Transparency log

Release files / rishe-0.5.1-cp39-abi3-win_amd64.whl

Download URL rishe-0.5.1-cp39-abi3-win_amd64.whl
Size 10.4 MB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
1a2e5340fe01bc267ec291099dfbe53077cffa49b98a6aee1b148d54c7a8e346
BLAKE2b-256 checksum
How to use checksums
8ff55a6ada0ea7f1c47dee0944067fae496af35f423493a7c07feeea1e6dfc3a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 26, 2026.

Transparency log

Release files / rishe-0.5.1-cp39-abi3-musllinux_1_2_x86_64.whl

Download URL rishe-0.5.1-cp39-abi3-musllinux_1_2_x86_64.whl
Size 12.8 MB
Tags CPython 3.9 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
821ca0eb634fc0f4e1ebdbc468f10af65b473380ee9ab727065725122a60e8b8
BLAKE2b-256 checksum
How to use checksums
195cd2908a746a30cb0745bff2031444bea7554bcf8ae7130970aa7a3a98cc07
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 26, 2026.

Transparency log

Release files / rishe-0.5.1-cp39-abi3-musllinux_1_2_aarch64.whl

Download URL rishe-0.5.1-cp39-abi3-musllinux_1_2_aarch64.whl
Size 11.8 MB
Tags CPython 3.9 Linux musl 1.2+ ARM64 abi3
SHA-256 checksum
How to use checksums
c33f9b599474e0fd8777b9c97629537d00d3e749321634cd6c7a2a1cd203b129
BLAKE2b-256 checksum
How to use checksums
98ce56ecd71d22eaf740a8e76e8ff9b6774ae5df87fcdfaa106f926cd19db2c3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 26, 2026.

Transparency log

Release files / rishe-0.5.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL rishe-0.5.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 11.8 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
522944710ae9a30f37a00c1325063de2a3f2439237051aa8127b8e503ca62518
BLAKE2b-256 checksum
How to use checksums
c2d8361a8da3fb6c7e48cf85c19dd225a5cc8f4dd8cbd09556a976f43436cb7b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 26, 2026.

Transparency log

Release files / rishe-0.5.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL rishe-0.5.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 11.6 MB
Tags CPython 3.9 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
5586f81f27b530fee6428e1494c8fdc6e2def71dc6839d09de3347c305d6051a
BLAKE2b-256 checksum
How to use checksums
9d3ce89af5671f037cd0d95375cd9b6e3d0d40bb2c3eee760650717bb1ced800
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 26, 2026.

Transparency log

Release files / rishe-0.5.1-cp39-abi3-macosx_11_0_arm64.whl

Download URL rishe-0.5.1-cp39-abi3-macosx_11_0_arm64.whl
Size 10.2 MB
Tags CPython 3.9 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
24af41d114297c094c933be0dbda2661cfa0fa3eccfb1623a956f3db3769740e
BLAKE2b-256 checksum
How to use checksums
e939c57049291c678e2f734c9018034ae485b5b95d072444d1cec945f06b2328
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 26, 2026.

Transparency log

Release files / rishe-0.5.1-cp39-abi3-macosx_10_12_x86_64.whl

Download URL rishe-0.5.1-cp39-abi3-macosx_10_12_x86_64.whl
Size 11.0 MB
Tags CPython 3.9 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
b68783b894f5f6bbdeada7d0932af9b3e21d07130be7114214373abbd5df9695
BLAKE2b-256 checksum
How to use checksums
09e09ee2c57db1fd9f03e959e1f3de8171daa51bddd5e1ee813021418f16c4f5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 26, 2026.

Transparency log

Security for rishe 0.5.1

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 8 files in this release have been uploaded with provenance metadata.

Select from 8 files

Attestation for rishe-0.5.1.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 Oct 26, 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