**Foreword**

**Artificial intelligence is not just for C/C++. With ***PHP*, you can implement neural networks in your Web applications. To self learning and get experience in artificial intelligence I try project application to recognition negative comments based on artificial intelligence in particular Naive Bayes algorithm. I’m using the wikipedia entry http://en.wikipedia.org/wiki/Bayesian_spam_filtering to develop my classification code. Training data derived from: http://help.sentiment140.com/for-students/

**What is it?**

**grime**detector is a text classification application with a focus on reuse, customizability and performance. Particularly useful in detecting negative (or positive) comments or just texts. Application based on a Naive Bayes statistical classifier.

**Introduction to the Bayes Theorem**

Naive Bayes classifier is one of the methods of machine learning, used to solve the problem of sorting decision classes. The task Bayes classifier to assign a new case to one of the classes, with their collection must be finite and defined a priori.

**Mathematical foundation**

Implemented code calculate probability that text is negative given that it contains a specific word by implementing the following formula:

**Pr(S|W)** is the probability that a comment is negative, knowing that the word “replica” is in it;
**Pr(S)** is the overall probability that any given comment is negative;
**Pr(W|S)** is the probability that the word “replica” appears in negative comment;
**Pr(H)** is the overall probability that any given comment is positive;
**Pr(W|H)** is the probability that the word “replica” appears in positive comments.

Implemented code to combine the probabilities of all the unique words in a test comment to determine negative text based on the following formula:

The result p is typically compared to a given threshold to decide whether the comment is negative or not. If p is lower than the threshold, the comment is considered as likely positive, otherwise it is considered as likely negative.

**Implementation Naive Bayes Classifier in PHP**

class NaiveBayesClassifier
{
/** @var WordRepository $wordRepository */
private $wordRepository;
public function __construct(WordRepository $wordRepository)
{
$this->wordRepository = $wordRepository;
}
public function classify($words)
{
$probabilityProducts = 1;
$probabilitySums = 1;
foreach ($words as $word) {
$probability = $this->wordProbability($word);
$probabilityProducts *= $probability;
$probabilitySums *= (1 - $probability);
}
$grimeProbability = $probabilityProducts / ($probabilityProducts + $probabilitySums);
return round($grimeProbability, 2);
}
public function wordProbability($word)
{
$ps = $this->probabilityContentIsGrime();
$ph = $this->probabilityContentIsHam();
$pws = $this->probabilityWordInGrime($word);
$pwh = $this->probabilityWordInHam($word);
$psw = ($pws * $ps) / ($pws * $ps + $pwh * $ph);
$psw = $psw == 1 ? 0.99 : $psw;
$psw = $psw == 0 ? 0.01 : $psw;
return $psw;
}
public function probabilityContentIsGrime()
{
return $this->wordRepository->getGrimeCount() / $this->wordRepository->getWordsCount();
}
public function probabilityContentIsHam()
{
return $this->wordRepository->getHamCount() / $this->wordRepository->getWordsCount();
}
public function probabilityWordInGrime($word)
{
/** @var Word $word */
$word = $this->wordRepository->getWordByName($word);
if (!$word) {
return 0.5;
}
return $word->getGrimeCount() / $this->wordRepository->getGrimeCount();
}
public function probabilityWordInHam($word)
{
/** @var Word $word */
$word = $this->wordRepository->getWordByName($word);
if (!$word) {
return 0.5;
}
return $word->getHamCount() / $this->wordRepository->getHamCount();
}
}

Source from: https://github.com/tarnawski/grime-detector-api