Skip to main content

BulStem-py: A Python Re-implementation of BulStem - inflectional stemmer for Bulgarian

Build PyPI License

Introduction

This is the Python version of the BulStem stemming algorithm. It follows the algorithm presented in

Nakov, P. BulStem: Design and evaluation of inflectional stemmer for Bulgarian. In Workshop on 
Balkan Language Resources and Tools (Balkan Conference in Informatics).

See http://people.ischool.berkeley.edu/~nakov/bulstem/ for the homepage of the algorithm. Also, check the original paper for more details and examples.

Implementation

This implementation, in contrast of the other available uses a Trie, instead of Dictionary/Hashtable/, in order to find the longest possible rule, that can be applied to a token.

Basic algorithm steps:

  1. Find the position of the first vowel in the token.
  2. Find the longest possible rule by traversing the string in reverse order until there is a matching suffix, or down to the position of the first vowel (found in Step. 1).
  3. Prepend the non-stemmed prefix to the stemmed suffix (Step. 2).

Installation

This library is compatible with Python >= 3.6.

Clone the repository and run:

With pip

pip install -e .
pip install -r requirements.txt

Test

A set of tests are included in the project, under the tests folder. The test suit can be run as follows:

pip install -e ".[testing]"
pip install -r requirements-test.txt
python -m unittest

Usage

The library works with a set of rules used for stemming. The rules can be either passed as a list to the BulStemmer constructor, or as a path to a file.

For both options the rules need to be formatted as follows:

word ==> stem ==> freq

A pre-defined set of rules is included in the package, and can be used directly. The stemming rules can be found here. (examples: Reading the rules from an external file)

Manually loading rules

from bulstem.stem import BulStemmer

stemmer = BulStemmer(["ой ==> о 10"], min_freq=0, left_context=2)
stemmer.stem('порой')# Excepted output: 1. 'поро'

BulStemmer constructor params:

  1. rules - Iterable of strings containing rules.
  2. min_freq - The minimum frequency of a rule to be used when stemming.
  3. left_context - Size of the prefix which will not be stemmed.

Reading the rules from an external file

from bulstem.stem import BulStemmer


# Pre-defined names of rule sets
PRE_DEFINED_RULES = ['stem-context-1', 
                     'stem-context-2',
                     'stem-context-3']

# Excepted output:
# 1 втор
# 2 втори
# 3 вторият
for i, rules_name in enumerate(PRE_DEFINED_RULES, start=1):
    stemmer = BulStemmer.from_file(rules_name, min_freq=2, left_context=i)
    print(i, stemmer.stem('вторият'))

stemmer = BulStemmer.from_file('stem_rules_context_2_utf8.txt', min_freq=2, left_context=i)
stemmer.stem('вторият') # Excepted output: 1. 'втори'
stemmer.stem('вероятен') # Excepted output: 1. 'вероят'

BulStemmer.from_file params:

  1. path - Path (or pre-defined name) to the rules file formatted as follows: word ==> stem ==> freq.
  2. min_freq - The minimum frequency of a rule to be used when stemming.
  3. left_context - Size of the prefix which will not be stemmed.

Other implementations

Perl (Original), Java (JDK 1.4), Ruby, C#, Python2, GATE plugin (Java)

License

For license information, see LICENSE.

Metadata

Release files for bulstem 0.3.3

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

Source distribution (sdist)

Source distribution for bulstem 0.3.3
File Size Uploaded
bulstem-0.3.3.tar.gz 5.3 kB Details

Built distribution (wheel)

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

Total release size: 836.9 kB

Release files / bulstem-0.3.3.tar.gz

Download URL bulstem-0.3.3.tar.gz
Size 5.3 kB
Tags Source
SHA-256 checksum
How to use checksums
bfac590eb3ac8ecafca6e618cbad473fb78f3f4fc2f484d53ed0f136a49df5fa
BLAKE2b-256 checksum
How to use checksums
6ac97b7b451e20accf2cb1087f95aaf335dcf01f36e9284ac0fee2253ff391b1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0.post20200714 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.10

Release files / bulstem-0.3.3-py3-none-any.whl

Download URL bulstem-0.3.3-py3-none-any.whl
Size 831.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fb1cb8ddc4d46149292f1f5aee3837c708447d1747f5b28891f07de5b3e4382d
BLAKE2b-256 checksum
How to use checksums
14516bea2dfe7088dcb5faa33bd7491753c30cbebd6e9bea4af8de662bd26463
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0.post20200714 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.10

Release history Release notifications | RSS feed

This release

0.3.3 This release

2 release files

0.3.2

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