Afaan Oromoo Corpus
Overview
Qubee-NLP is developed and evaluated using a large-scale Afaan Oromoo corpus containing over 50,000 sentences.
The Qubee-NLP Corpus module provides a complete pipeline for building, processing, and saving Afaan Oromoo NLP corpora. It supports:
Building raw text corpora
Loading and saving corpora
Text normalization
Tokenization
Stemming
Data Collection
The corpus was collected from diverse publicly available sources, including:
News media
Educational texts
Government publications
Encyclopedic content
Linguistic Coverage
The dataset represents:
Multiple registers of Afaan Oromoo
Orthographic variations in Qubee
Rich morphological structures
Role in Qubee-NLP
The corpus is used for:
Unit testing preprocessing modules
Rule validation for stemming and syllabification
Baseline machine learning experiments
How to Use the Corpus with Qubee-NLP
The following workflow demonstrates how to integrate the corpus with the tokenizer, stemmer, and normalizer.
#Import Modules
from qubee_nlp.corpus.afaan_oromoo_nlp_corpus import quick_build
from qubee_nlp.tokenizer import QubeeTokenizer
from qubee_nlp.stemmer import QubeeStemmer
from qubee_nlp.normalizer import TextNormalizer
Build the Corpus
corpus = quick_build(output_dir=”my_afaan_oromoo_corpus”)
corpus is now a dictionary of categories:
```python
print(corpus.keys())
# dict_keys(['university', 'news_media', 'government', 'cultural', 'alternative', 'processed'])
Initialize NLP Components
tokenizer = QubeeTokenizer() # Tokenizer for Afaan Oromoo text
stemmer = QubeeStemmer() # Rule-based stemmer
normalizer = TextNormalizer() # Normalizes spelling, punctuation, and special characters
Process Corpus Step by Step
processed_corpus = {}
for category, articles in corpus.items():
processed_corpus[category] = []
for article in articles:
text = article.get("content", "")
title = article.get("title", "")
source = article.get("source", "")
# 1️⃣ Normalize text
norm_text = normalizer.normalize(text)
# 2️⃣ Tokenize text
tokens = tokenizer.tokenize(norm_text)
# 3️⃣ Stem each token
stems = [stemmer.stem(tok) for tok in tokens]
# Save processed article
processed_corpus[category].append({
"title": title,
"original": text,
"normalized": norm_text,
"tokens": tokens,
"stems": stems,
"source": source,
})
✅ processed_corpus now contains everything: original, normalized, tokenized, and stemmed words.
#Inspect a Processed Article
first_article = processed_corpus['university'][0]
print("Title:", first_article['title'])
print("Original:", first_article['original'])
print("Normalized:", first_article['normalized'])
print("Tokens:", first_article['tokens'])
print("Stems:", first_article['stems'])
Example Output (stub data):
Title: university example
Original: Kun Afaan Oromoo fakkeenya barruu dha.
Normalized: KUN AFAAN OROMOO FAKKEENYA BARRUU DHA
Tokens: ['KUN', 'AFAAN', 'OROMOO', 'FAKKEENYA', 'BARRUU', 'DHA']
Stems: ['KUN', 'AFAAN', 'OROM', 'FAKKEENYA', 'BARR', 'DHA']
Full End-to-End Usage Script
from qubee_nlp.corpus.afaan_oromoo_nlp_corpus import AfaanOromooCorpusBuilder
from qubee_nlp.corpus.corpus_builder import CorpusBuilder
from qubee_nlp.corpus.loaders import CorpusLoader
from qubee_nlp.corpus.corpus_processor import CorpusProcessor
from qubee_nlp.corpus.corpus_saver import CorpusSaver
from pathlib import Path
# 1️⃣ Build raw corpus
builder = AfaanOromooCorpusBuilder(output_dir=Path("raw_corpus"))
raw_data = builder.run_complete_pipeline()
# 2️⃣ Save raw corpus
raw_writer = CorpusBuilder(output_dir=Path("raw_corpus"))
raw_writer.save(raw_data)
# 3️⃣ Load raw corpus
loader = CorpusLoader(corpus_dir=Path("raw_corpus"))
raw_text = loader.load()
# 4️⃣ Process corpus
processor = CorpusProcessor()
processed = processor.process(raw_text)
# 5️⃣ Save processed corpus
output_dir = Path("processed_corpus")
saver = CorpusSaver(output_dir=output_dir)
output_path = saver.save(processed)
print("✔ Corpus pipeline completed. Saved to:", output_path)