Skip to content

syzer/level-naive-bayes

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

47 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

level-naive-bayes

Naive Bayes text classifier that runs on top of leveldb. Based on the bayes module. It returns log-probabilities. Log_probaility

npm install syzer-level-naive-bayes

build status Dependency Status devDependency Status Code Coverage

Usage

var bayes = require('syzer-level-naive-bayes')

var nb = bayes(db) // where db is a levelup instance

nb.train('positive', 'amazing, awesome movie!! Yeah!! Oh boy.', function() {
  nb.train('positive', 'this is incredibly, amazing, perfect, great!', function() {
    nb.train('negative', 'terrible, shitty thing. Damn. Sucks!!', function() {
      nb.classify('awesome, cool, amazing!! Yay.', function(err, category) {
        console.log('category is '+category)
      })
    })
  })
})

API

nb = bayes(db, [options])

Creates a new instance. db should be a levelup. Options include:

{
  tokenize: function(str) {
    return str.split(' ') // pass in custom tokenizer
  }
}

nb.train(category, text, cb)

Train the classifier with the given text for a category. If the text is already tokenized pass in an array of tokens instead of text

nb.classify(text, cb)

Classify the given text into a category. If the text is already tokenized pass in an array of tokens instead of text

nb.trainAsync(category, text)

Returns a promise of finished training, usage:

nb.trainAsync('positive', 'amazing, awesome movie!! Yeah!! Oh boy.').then(function () {
  return nb.classify('awesome, cool, amazing!! Yay.', function (err, category) {
    console.log('positive', category);
  })
})

nb.classifyAsync(text)

Returns a promise of finished classification

var thingsToDo = [
  nb.trainAsync('positive', 'Sweet, this is incredibly, amazing, perfect, great!!'),
  nb.trainAsync('positive', 'amazing, awesome movie!! Yeah!! Oh boy.'),
  nb.trainAsync('negative', 'terrible, shitty thing. Damn. Sucks!!')
];

q.all(thingsToDo)
  .then(function () {
    return nb.classifyAsync('awesome, cool, amazing!! Yay.')
  })
  .then(function (category) {
    console.log(category, 'should be positive')
  })

nb.classifyLabelsAsync(text)

Returns a promise of finished classification, usage:

var thingsToDo = [
  nb.trainAsync('positive', 'Sweet, this is incredibly, amazing, perfect, great!!'),
  nb.trainAsync('neutral', 'amazing, awesome movie!! Yeah!! Oh boy.'),
  nb.trainAsync('negative', 'terrible, shitty thing. Damn. Sucks!!')
];

q.all(thingsToDo)
  .then(() => (nb.classifyLabelsAsync('awesome, cool, amazing!! Yay.')))
  .then((labels) => {
    console.log(labels[0].label, 'should be neutral') 
    console.log(labels[0].logProb, 'should be logProbability')
    console.log(labels[1].label, 'should be second guess')
    console.log(labels[1].logProb, 'should be logProbability')
  })

Tests

npm test

License

MIT

Packages

No packages published

Languages

  • JavaScript 100.0%