Skip to main content

Stopwords for the Fulfulde language (Adamawa variant)

Project description

Fulfulde Stopwords

License: MIT Python Version PyPI version

A curated list of stopwords for the Fulfulde language (Adamawa variant), designed for Natural Language Processing (NLP) applications.

Fulfulde is a low-resource African language spoken by millions across West and Central Africa. This library provides the first comprehensive, linguistically grounded stopword list for NLP tasks such as:

  • Text classification
  • Information retrieval
  • Clustering and topic modeling
  • Text preprocessing and cleaning
  • Machine translation
  • Sentiment analysis

Features

  • Linguistically grounded: Compiled by linguists and NLP researchers
  • Comprehensive: 180+ stopwords covering all major grammatical categories
  • Easy to use: Simple Python API with no external dependencies
  • Well documented: Extensive documentation and examples
  • Tested: Comprehensive test suite
  • Open source: MIT licensed

Installation

From PyPI (recommended)

pip install fulfulde-stopwords

From source

git clone https://github.com/2zalab/fulfulde-stopwords.git
cd fulfulde-stopwords
pip install -e .

Quick Start

Basic Usage

from fulfulde_stopwords import get_stopwords, remove_stopwords, is_stopword

# Get all stopwords
stopwords = get_stopwords()
print(f"Total stopwords: {len(stopwords)}")

# Check if a word is a stopword
print(is_stopword('mi'))  # True
print(is_stopword('wuro'))  # False

# Remove stopwords from text
tokens = ['mi', 'heɓi', 'wuro', 'e', 'nder', 'Kameruun']
filtered = remove_stopwords(tokens)
print(filtered)  # ['heɓi', 'wuro', 'Kameruun']

Advanced Usage

from fulfulde_stopwords import filter_text, get_stats

# Filter an entire text
text = "mi heɓi wuro e nder Kameruun"
filtered_text = filter_text(text)
print(filtered_text)  # "heɓi wuro Kameruun"

# Get statistics
tokens = ['mi', 'heɓi', 'wuro', 'e', 'nder']
stats = get_stats(tokens)
print(stats)
# {
#     'total_tokens': 5,
#     'stopword_count': 3,
#     'content_word_count': 2,
#     'stopword_ratio': 0.6
# }

Integration with NLP Libraries

NLTK

from fulfulde_stopwords import get_stopwords
from nltk.tokenize import word_tokenize

stopwords = get_stopwords()
text = "mi heɓi wuro e nder Kameruun"
tokens = word_tokenize(text)
filtered = [w for w in tokens if w.lower() not in stopwords]

spaCy

import spacy
from fulfulde_stopwords import get_stopwords

nlp = spacy.blank("xx")  # Multi-language model
stopwords = get_stopwords()

# Add stopwords to spaCy
for word in stopwords:
    nlp.vocab[word].is_stop = True

scikit-learn

from sklearn.feature_extraction.text import TfidfVectorizer
from fulfulde_stopwords import get_stopwords

stopwords = get_stopwords()
vectorizer = TfidfVectorizer(stop_words=list(stopwords))

API Reference

get_stopwords(case_sensitive=False)

Get the set of Fulfulde stopwords.

Parameters:

  • case_sensitive (bool): If False (default), returns lowercase stopwords

Returns:

  • Set[str]: A set containing all Fulfulde stopwords

is_stopword(word, case_sensitive=False)

Check if a word is a stopword.

Parameters:

  • word (str): The word to check
  • case_sensitive (bool): If False (default), comparison is case-insensitive

Returns:

  • bool: True if the word is a stopword, False otherwise

remove_stopwords(tokens, case_sensitive=False, preserve_order=True)

Remove stopwords from a list of tokens.

Parameters:

  • tokens (List[str]): List of tokens to filter
  • case_sensitive (bool): If False (default), comparison is case-insensitive
  • preserve_order (bool): If True (default), preserves original token order

Returns:

  • List[str]: List of tokens with stopwords removed

filter_text(text, tokenizer=None, case_sensitive=False)

Remove stopwords from a text string.

Parameters:

  • text (str): The text to filter
  • tokenizer (callable): Optional tokenizer function
  • case_sensitive (bool): If False (default), comparison is case-insensitive

Returns:

  • str: The filtered text with stopwords removed

get_stopword_count(tokens, case_sensitive=False)

Count the number of stopwords in a list of tokens.

Parameters:

  • tokens (List[str]): List of tokens to analyze
  • case_sensitive (bool): If False (default), comparison is case-insensitive

Returns:

  • int: The number of stopwords found

get_stopword_ratio(tokens, case_sensitive=False)

Calculate the ratio of stopwords to total tokens.

Parameters:

  • tokens (List[str]): List of tokens to analyze
  • case_sensitive (bool): If False (default), comparison is case-insensitive

Returns:

  • float: The ratio of stopwords (between 0 and 1)

get_stats(tokens, case_sensitive=False)

Get comprehensive statistics about stopwords in a list of tokens.

Parameters:

  • tokens (List[str]): List of tokens to analyze
  • case_sensitive (bool): If False (default), comparison is case-insensitive

Returns:

  • dict: Statistics including total tokens, stopword count, content word count, and stopword ratio

Language Information

Variant and Orthography

  • Language: Fulfulde (Adamawa variant)
  • Region: Cameroon and Northern Nigeria
  • Script: Latin alphabet with special characters (ɓ, ɗ, ŋ, etc.)
  • ISO 639-3: fub (Adamawa Fulfulde)

Linguistic Features

Fulfulde is characterized by:

  • Nominal class system: 20+ noun classes with corresponding pronouns
  • Agglutinative morphology: Extensive use of suffixes and prefixes
  • VSO word order: Verb-Subject-Object as default
  • Grammatical particles: Heavy reliance on particles rather than articles

Stopword Categories

The stopword list includes:

  1. Personal pronouns: mi, a, o, ɓe, en, on
  2. Demonstratives: ɗo, ɗon, oo, ɓee
  3. Prepositions: haa, e, nder, dow, ley
  4. Conjunctions: bee, koo, ammaa, niai
  5. Auxiliaries: woni, ɗon, woodi, jogi
  6. Discourse particles: nden, ni, boo, tan
  7. Negations: ai, ataa, naa, fay
  8. Interrogatives: mo, ko, moy, ndeeye
  9. Nominal class pronouns: ɗum, ka, ki, nde, ndi, etc.
  10. Temporal/spatial adverbs: ɗoo, toon, hande

Areas for contribution:

  • Additional stopwords from other Fulfulde variants (Maasina, Pulaar, etc.)
  • Extended stopword lists with domain-specific terms
  • Integration examples with popular NLP frameworks
  • Benchmarks on NLP tasks
  • Translations and documentation

Citation

If you use this library in your research, please cite:

@article{fulfulde_stopwords_2026,
  title={Fulfulde Stopwords: A Linguistic Resource for NLP in a Low-Resource African Language},
  author={Isaac Touza},
  year={2026},
}

License

This project is licensed under the MIT License - see the LICENSE file for details.

Contact

For questions, suggestions, or collaborations:

Changelog

Version 1.0 (2026-01-14)

  • Initial release
  • 180+ stopwords for Adamawa Fulfulde
  • Complete Python API
  • Comprehensive documentation
  • Test suite

Project details


Release history Release notifications | RSS feed

This version

1.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fulfulde_stopwords-1.0.tar.gz (29.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fulfulde_stopwords-1.0-py3-none-any.whl (9.3 kB view details)

Uploaded Python 3

File details

Details for the file fulfulde_stopwords-1.0.tar.gz.

File metadata

  • Download URL: fulfulde_stopwords-1.0.tar.gz
  • Upload date:
  • Size: 29.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for fulfulde_stopwords-1.0.tar.gz
Algorithm Hash digest
SHA256 fbad21084eab1f7bb1d944c1229880c76ef3f54393848fa616f337491d414a0b
MD5 e976ad44371a065c8a0398678c853d84
BLAKE2b-256 6b755ad4489b3dd73f47e91eb56d391d0c94dd36e1a653a9e2d7251081a45687

See more details on using hashes here.

File details

Details for the file fulfulde_stopwords-1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for fulfulde_stopwords-1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f0408bd808a7f4051be700a575b842f25ed45828446a458101a4c2205b78ff73
MD5 55e3df32a270cdc1857a86c27ec4cf8d
BLAKE2b-256 59c757479e6890a988cafb2722425c01ed82df4ff5c6a8dcd3dce89da73c00da

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page