Skip to content

Repository files navigation

Classifier

Gem VersionCILicense: LGPL

Text classification in Ruby. Five algorithms, native performance, streaming support.

Documentation · Tutorials · API Reference

Why This Library?

This GemOther Forks
Algorithms✅ 5 classifiers❌ 2 only
Incremental LSI✅ Brand's algorithm (no rebuild)❌ Full SVD rebuild on every add
LSI Performance✅ Native C extension (5-50x faster)❌ Pure Ruby or requires GSL
Streaming✅ Train on multi-GB datasets❌ Must load all data in memory
Persistence✅ Pluggable (file, Redis, S3, SQL, Custom)❌ Marshal only

Installation

gem'classifier'

Or install via Homebrew for CLI-only usage:

brew install cardmagic/tap/classifier

Command Line

Classify text instantly with pre-trained models—no coding required:

# Detect spam
classifier -r sms-spam-filter "You won a free iPhone"# => spam# Analyze sentiment
classifier -r imdb-sentiment "This movie was absolutely amazing"# => positive# Detect emotions
classifier -r emotion-detection "I am so happy today"# => joy# List all available models
classifier models

Train your own model:

# Train from files
classifier train positive reviews/good/*.txt
classifier train negative reviews/bad/*.txt
# Classify new text
classifier "Great product, highly recommend"# => positive

CLI Guide →

Claude Code Plugin

Install as a plugin to get skills (auto-invoked) and slash commands:

# Add the marketplace
claude plugin marketplace add cardmagic/ai-marketplace
# Install the plugin
claude plugin install classifier@cardmagic

This gives you:

  • Skill: Claude automatically classifies text when you ask about spam, sentiment, or emotions
  • Slash commands: /classifier:classify, /classifier:train, /classifier:models

Quick Start

Bayesian

classifier=Classifier::Bayes.new(:spam,:ham)classifier.train(spam: "Buy viagra cheap pills now")classifier.train(spam: "You won million dollars prize")classifier.train(ham: ["Meeting tomorrow at 3pm","Quarterly report attached"])classifier.classify("Cheap pills!")# => "Spam"

Bayesian Guide →

Logistic Regression

classifier=Classifier::LogisticRegression.new(:positive,:negative)classifier.train(positive: "love amazing great wonderful")classifier.train(negative: "hate terrible awful bad")classifier.classify("I love it!")# => "Positive"

Logistic Regression Guide →

LSI (Latent Semantic Indexing)

lsi=Classifier::LSI.newlsi.add(dog: "dog puppy canine bark fetch",cat: "cat kitten feline meow purr")lsi.classify("My puppy barks")# => "dog"

LSI Guide →

k-Nearest Neighbors

knn=Classifier::KNN.new(k: 3)%w[laptopcodingsoftwaredeveloperprogramming].each{ |w| knn.add(tech: w)}%w[footballbasketballsoccergoalteam].each{ |w| knn.add(sports: w)}knn.classify("programming code")# => "tech"

k-Nearest Neighbors Guide →

TF-IDF

tfidf=Classifier::TFIDF.newtfidf.fit(["Ruby is great","Python is great","Ruby on Rails"])tfidf.transform("Ruby programming")# => {:rubi => 1.0}

TF-IDF Guide →

Key Features

Incremental LSI

Add documents without rebuilding the entire index—400x faster for streaming data:

lsi=Classifier::LSI.new(incremental: true)lsi.add(tech: ["Ruby is elegant","Python is popular"])lsi.build_index# These use Brand's algorithm—no full rebuildlsi.add(tech: "Go is fast")lsi.add(tech: "Rust is safe")

Learn more →

Persistence

classifier.storage=Classifier::Storage::File.new(path: "model.json")classifier.saveloaded=Classifier::Bayes.load(storage: classifier.storage)

Learn more →

Streaming Training

classifier.train_from_stream(:spam,File.open("spam_corpus.txt"))

Learn more →

Performance

Native C extension provides 5-50x speedup for LSI operations:

DocumentsSpeedup
1025x
2050x
rake benchmark:compare # Run your own comparison

Development

bundle install
rake compile # Build native extension
rake test# Run tests

Authors

License

LGPL 2.1

About

A general classifier module to allow Bayesian and LSI classifications.

Topics

Resources

Stars

741 stars

Watchers

18 watching

Forks

Releases

Packages

Used by

Contributors

Languages