train('mexican', tokenize('taco nacho enchilada burrito')); $nb->train('american', tokenize('hamburger burger fries pop')); $this->assertEquals(['mexican', 'american'], array_keys ( $nb->predict(tokenize('my favorite food is a burrito')))); $this->assertEquals(['american', 'mexican'], array_keys ( $nb->predict(tokenize('my favorite food is pop and fries')))); } public function testMovieReviews() { if( getenv('SKIP_TEST')) { return; } try { get_storage_path('corpora/movie_reviews'); } catch(\Exception $ex) { return; } $posFilePaths = scan_dir(get_storage_path('corpora/movie_reviews/pos')); $nb = naive_bayes(); foreach($posFilePaths as $filePath) { $nb->train('positive', $this->getTokenizedReviews($filePath)); } $negFilePaths = scan_dir(get_storage_path('corpora/movie_reviews/neg')); foreach($negFilePaths as $filePath) { $nb->train('negative', $this->getTokenizedReviews($filePath)); } $movieReviewTokens = tokenize($this->getMovieReview()); $stopWords = get_stop_words(VENDOR_DIR."yooper/stop-words/data/stop-words_english_1_en.txt"); filter_stopwords($movieReviewTokens, $stopWords); filter_tokens($movieReviewTokens, 'PunctuationFilter'); filter_tokens($movieReviewTokens, 'QuotesFilter'); $movieReviewTokens = stem($movieReviewTokens); $this->assertEquals('positive', array_keys($nb->predict($movieReviewTokens))[0]); } protected function getTokenizedReviews(string $filePath) : array { static $stopWords = null; if(!$stopWords) { $stopWords = get_stop_words(VENDOR_DIR."yooper/stop-words/data/stop-words_english_1_en.txt"); } $tokens = tokenize(file_get_contents($filePath)); filter_tokens($tokens, 'PunctuationFilter'); filter_tokens($tokens, 'QuotesFilter'); filter_stopwords($tokens, $stopWords); $tokens = stem($tokens); $tokens = filter_empty($tokens); return $tokens; } /** * Taken from https://www.rollingstone.com/movies/reviews/incredibles-2-movie-review-pixar-w521419 * @return string */ protected function getMovieReview() : string { return <<