srbstp je biblioteka inspirisana TextBlob‑om, prilagođena srpskom jeziku. Nudi osnovne funkcionalnosti za:
- ✅ Tokenizaciju (reči i rečenice)
- ✅ Rad sa stop rečima i osnovnim leksikonom
- ✅ Normalizaciju i konverziju ćirilica ↔ latinica
- ✅ Analizu sentimenta (leksikon‑bazirani pristup)
- ✅ Klasifikaciju (Naive Bayes)
- ✅ Part‑of‑Speech (POS) tagovanje (sopstveni model uz NLTK ili integracija s drugim alatima)
Pruža jednostavan API za uranjanje u uobičajene zadatke obrade prirodnog jezika (NLP), kao što su označavanje dela govora, izdvajanje imenskih fraza, analiza osećanja, klasifikacija i još mnogo toga.
- Instalacija
- Tokenizacija
- Stop reči i leksikon
- Normalizacija
- Analiza sentimenta
- Klasifikacija (Naive Bayes)
- POS Tagger
- Testovi
- Doprinos i razvoj
Projekat koristi pyproject.toml, tako da možete instalirati paket (i sve zavisnosti) tako što ćete klonirati ovaj repo i pokrenuti:
pip install -e .- nltk
- regex
- pytest (za testove, opcionalno)
Modul: srbstp/tokenizers/sr_tokenizer.py
from srbstp.tokenizers.sr_tokenizer import SrTokenizer
tokenizer = SrTokenizer()
text = "Ovo je prva rečenica. Druga rečenica?! Treća rečenica."
sentences = tokenizer.tokenize_sentences(text)
print(sentences)
# ["Ovo je prva rečenica", "Druga rečenica", "Treća rečenica"]
words = tokenizer.tokenize_words(sentences[0])
print(words)
# ["Ovo", "je", "prva", "rečenica"]- Metod tokenize_sentences(text) deli tekst na rečenice po . ! ?.
- Metod tokenize_words(text) deli tekst na reči koristeći regex.
Folder: srbstp/data/
- Sadrži skup (set) srpskih stop reči i metode:
- is_stopword(token: str) -> bool
- get_stopwords() -> set[str]
from srbstp.data.sr_stopwords import is_stopword
print(is_stopword("i")) # True
print(is_stopword("kompjuter")) # False- Sadrži rečnike za različite potrebe, na primer:
- SENTIMENT_LEXICON (mapa reč → polaritet)
- get_sentiment_polarity(word: str) -> float (vraća -1 do +1, 0 ako je reč nepoznata)
from srbstp.data.sr_lexicon import get_sentiment_polarity
print(get_sentiment_polarity("dobar")) # 1
print(get_sentiment_polarity("užasan")) # -1
print(get_sentiment_polarity("kompjuter")) # 0 (nepoznato)Modul: srbstp/utils/sr_normalizer.py
- cyr_to_lat(text: str) -> str – ćirilica → latinica
- lat_to_cyr(text: str) -> str – latinica → ćirilica
- remove_diacritics(text: str) -> str – uklanja dijakritike (š, đ, ž, ć, č → s, d, z, c, c)
- normalize_text(text, to_lat=True, lowercase=True, strip_diacritics=False) -> str – omotač koji radi sve korake odjednom
from srbstp.utils.sr_normalizer import cyr_to_lat, lat_to_cyr, remove_diacritics
text_cyr = "Ово је пример ћириличног текста."
text_lat = cyr_to_lat(text_cyr)
print(text_lat)
# Ovo je primer ćiriličnog teksta.
back_to_cyr = lat_to_cyr(text_lat)
print(back_to_cyr)
# Ово је пример ћириличног текста.
no_diacritics = remove_diacritics(text_lat)
print(no_diacritics)
# Ovo je primer cirilicnog teksta.- Modul: srbstp/sentiments/sr_sentiment_analyzer.py
Primer:
from srbstp.sentiments.sr_sentiment_analyzer import SrSentimentAnalyzer
analyzer = SrSentimentAnalyzer()
score = analyzer.analyze("Ovo je odličan i sjajan dan!")
print(score)
# Pozitivan skor (npr. > 0)- Modul: srbstp/classifiers/sr_naive_bayes.py
- Klasa SrNaiveBayesClassifier implementira osnovni Bag‑of‑Words pristup s Laplace smoothing‑om.
Primer:
from srbstp.classifiers.sr_naive_bayes import SrNaiveBayesClassifier
training_data = [
("Ovo je fantastično!", "pozitivno"),
("Užasno, grozno...", "negativno"),
# ...
]
clf = SrNaiveBayesClassifier()
clf.train(training_data)
print(clf.classify("Ovo je odlično")) # "pozitivno"Snimanje/Učitavanje modela:
clf.save_model("nb_model.json")
# ...
new_clf = SrNaiveBayesClassifier()
new_clf.load_model("nb_model.json")- Folder: srbstp/taggers/
- Sopstveni model (sr_tagger.py)
- Koristi NLTK i HMM (Hidden Markov Model):
from srbstp.taggers.sr_tagger import SrPosTagger
tagger = SrPosTagger()
# 1) Treniranje: tagger.train(tagged_sentences)
# 2) Tagovanje
tokens = ["Ovo", "je", "test", "."]
print(tagger.tag(tokens))
# [("Ovo", "DET"), ("je", "AUX"), ("test", "NOUN"), (".", "PUNCT")]- train_pos_tagger.py – skripta za treniranje (čuva .pkl model)
- use_pos_tagger.py – skripta za učitavanje i korišćenje modela
Svi testovi su u folderu tests/, npr:
- test_tokenizer.py
- test_stopwords.py
- test_lexicon.py
- test_normalizer.py
- test_sentiment.py
- test_naive_bayes.py
- test_tagger.py
Pokreću se komandom:
pytest tests- Fork/Clone: Napravite fork ili klonirajte repo.
- Razvojne zavisnosti: Instalirajte pytest, nltk, googletrans itd.
- Izmena koda: Dodajte nove funkcionalnosti ili optimizacije.
- Testiranje: Obezbedite testove za svoju izmenu.
- Pull Request: Napravite PR s opisom izmena.
- Bogatiji srpski sentiment leksikon
- Naprednija obrada negacije i modaliteta
- Offline prevod (npr. MarianMT)
- Named Entity Recognition (NER) za srpski
- Konverzija ćirilice↔latinice zasnovana na zvaničnim standardima (velika/mala slova, digrafi, itd.)