Exemplo n.º 1
0
    def test_get_newsitem_title_returns_title_when_news_item_is_not_none(self):
        news_item = NewsItem()
        news_item.title = 'foo'
        corpus = Corpus()
        corpus.news_item = news_item

        admin = CorpusAdmin(Corpus, AdminSite())
        self.assertEquals('foo', admin.get_news_item_title(corpus))
Exemplo n.º 2
0
 def run(self, queue_item, classification):
     if classification == 'pos':
         corpus = Corpus()
         corpus.news_item = queue_item
         corpus.positive = True
         corpus.active = False
         corpus.save()
Exemplo n.º 3
0
    def test_changelist_view_returns_metrics_when_corpora_exist_and_query_is_on_the_added_at_date(
            self):
        news_item = NewsItem()
        news_item.title = 'foo'
        news_item.save()

        corpus = Corpus()
        corpus.news_item = news_item
        corpus.positive = True
        corpus.added_at = '2018-12-02 21:00:00+00:00'
        corpus.save()

        superuser = self.create_superuser('superuser')
        request = self.mocked_authenticated_request(
            '/admin/rss/corpusmetric/?added_at__month=12&added_at__year=2018',
            superuser)
        response = self.admin.changelist_view(request)

        expected_metrics = [{'positive': True, 'total': 1}]
        expected_metrics_total = {'total': 1}

        self.assertEquals(expected_metrics,
                          response.context_data['corpus_metrics'])
        self.assertEquals(expected_metrics_total,
                          response.context_data['corpus_metrics_total'])
Exemplo n.º 4
0
class CorpusTestCase(TestCase):

    corpus = None

    def setUp(self):
        news_item = NewsItem()
        self.corpus = Corpus()
        self.corpus.news_item = news_item

    def test_get_classification_returns_pos_when_positive_is_true(self):
        self.corpus.positive = True
        self.assertEquals('pos', self.corpus.get_classification())

    def test_get_classification_returns_neg_when_positive_is_false(self):
        self.corpus.positive = False
        self.assertEquals('neg', self.corpus.get_classification())

    def test_str_returns_newsitem_title_and_classification(self):
        self.corpus.positive = True
        self.corpus.news_item.title = 'foo'
        self.assertEquals('foo: POS', str(self.corpus))
Exemplo n.º 5
0
    def test_get_classifier_uses_unique_corpora(self):
        # mock the shuffle list method
        classify.shuffle = mock.MagicMock()
        # regenerate the command class being tested as we mocked an extra module above
        self.command = classify.Command()

        # create dummy news items and corpora with same title and classification
        for index in range(1, 3):
            news_item = NewsItem()
            news_item.title = 'foo'
            news_item.save()

            corpus = Corpus()
            corpus.news_item = news_item
            corpus.positive = True
            corpus.save()

        # test that two corpora exist
        corpora = Corpus.objects.all()
        self.assertEquals(2, len(corpora))

        # call the method being tested
        classifier = self.command.get_classifier()

        # shuffled the corpora with only one of the identical corpora
        classify.shuffle.assert_called_once_with([('foo', 'pos')])
Exemplo n.º 6
0
    def test_get_classifier_returns_naive_bayes_classifier_with_corpora_when_corpora_exist(
            self):
        # mock the shuffle list method
        classify.shuffle = mock.MagicMock()
        # regenerate the command class being tested as we mocked an extra module above
        self.command = classify.Command()

        # create a dummy news item and corpus
        news_item = NewsItem()
        news_item.title = 'foo'
        news_item.save()

        corpus = Corpus()
        corpus.news_item = news_item
        corpus.positive = True
        corpus.save()

        # call the method being tested
        classifier = self.command.get_classifier()

        # shuffled the corpora
        classify.shuffle.assert_called_once_with([('foo', 'pos')])
        # a classifier with corpora was created
        classify.NaiveBayesClassifier.assert_called_once_with([('foo', 'pos')])
        # the method returned a non-empty result
        self.assertTrue(classifier != None)
Exemplo n.º 7
0
    def test_changelist_view_returns_metrics_when_accurate_and_inaccurate_newsitems_exist_and_finally_one_of_each_class(self):
        news_item = NewsItem()
        news_item.title = 'foo'
        news_item.score = 1
        news_item.added_at = '2018-12-03 21:00:00+00:00'
        news_item.save()

        corpus = Corpus()
        corpus.positive = False
        corpus.news_item = news_item
        corpus.save()

        news_item = NewsItem()
        news_item.title = 'bar'
        news_item.score = 1
        news_item.added_at = '2018-12-03 22:00:00+00:00'
        news_item.save()

        superuser = self.create_superuser('superuser')
        request = self.mocked_authenticated_request('/admin/rss/newsitemmetric/', superuser)
        response = self.admin.changelist_view(request)

        self.assertEquals(2, response.context_data['news_items_count'])
        self.assertEquals(0, response.context_data['news_items_unclassified'])
        self.assertEquals(2, response.context_data['classification_initial']['positive'])
        self.assertEquals(0, response.context_data['classification_initial']['negative'])
        self.assertEquals(1, response.context_data['classification_supervised']['positive'])
        self.assertEquals(1, response.context_data['classification_supervised']['negative'])
        self.assertEquals(0, response.context_data['corpus_count']['positive'])
        self.assertEquals(1, response.context_data['corpus_count']['negative'])
        self.assertEquals([{'accuracy': 50, 'added_at': '2018-12-03'}], response.context_data['accuracy'])
Exemplo n.º 8
0
def corpus_create_negative(model_admin, request, query_set):
    for news_item in query_set:
        corpus = Corpus()
        corpus.news_item = news_item
        corpus.positive = False
        corpus.save()

    if query_set:
        enqueue_corpus_creation()
Exemplo n.º 9
0
    def test_get_accuracy_total_returns_0_percent_when_only_not_accurate_newsitems_exist(
            self):
        news_item = NewsItem()
        news_item.score = 1
        news_item.added_at = '2018-11-24 01:00:00+00:00'
        news_item.save()

        corpus = Corpus()
        corpus.news_item = news_item
        corpus.positive = False
        corpus.save()

        accuracy = self.newsitem_metric.get_accuracy_total(self.date_range)
        self.assertEquals(0.0, accuracy)
Exemplo n.º 10
0
    def test_get_accuracy_returns_0_percent_when_only_not_accurate_newsitems_exist(
            self):
        news_item = NewsItem()
        news_item.score = 1
        news_item.added_at = '2018-11-24 01:00:00+00:00'
        news_item.save()

        corpus = Corpus()
        corpus.news_item = news_item
        corpus.positive = False
        corpus.save()

        metrics = self.newsitem_metric.get_accuracy(self.date_range)
        self.assertEquals(1, len(metrics))
        self.assertEquals(0, metrics[0]['accuracy'])
        self.assertEquals('2018-11-24', metrics[0]['added_at'])
Exemplo n.º 11
0
    def test_get_accuracy_total_uses_two_day_statistics_when_exist(self):
        news_item = NewsItem()
        news_item.score = 1
        news_item.added_at = '2018-11-24 01:00:00+00:00'
        news_item.save()

        corpus = Corpus()
        corpus.news_item = news_item
        corpus.positive = False
        corpus.save()

        news_item = NewsItem()
        news_item.score = 1
        news_item.added_at = '2018-11-25 01:00:00+00:00'
        news_item.save()

        accuracy = self.newsitem_metric.get_accuracy_total(self.date_range)
        self.assertEquals(50.0, accuracy)
Exemplo n.º 12
0
    def test_get_classifier_uses_corpora_clean_of_stopwords(self):
        # mock the shuffle list method
        classify.shuffle = mock.MagicMock()
        # regenerate the command class being tested as we mocked an extra module above
        self.command = classify.Command()

        # create dummy news item (having title that contains stopwords) and corpora
        news_item = NewsItem()
        news_item.title = 'when foo then bar'
        news_item.save()

        corpus = Corpus()
        corpus.news_item = news_item
        corpus.positive = True
        corpus.save()

        # call the method being tested
        classifier = self.command.get_classifier()

        # shuffled the corpora with only one of the identical corpora
        classify.shuffle.assert_called_once_with([('foo bar', 'pos')])
Exemplo n.º 13
0
    def test_get_accuracy_returns_two_day_statistics_when_newsitems_for_two_days_exist(
            self):
        news_item = NewsItem()
        news_item.score = 1
        news_item.added_at = '2018-11-24 01:00:00+00:00'
        news_item.save()

        corpus = Corpus()
        corpus.news_item = news_item
        corpus.positive = False
        corpus.save()

        news_item = NewsItem()
        news_item.score = 1
        news_item.added_at = '2018-11-25 01:00:00+00:00'
        news_item.save()

        metrics = self.newsitem_metric.get_accuracy(self.date_range)
        self.assertEquals(2, len(metrics))
        self.assertEquals('2018-11-24', metrics[0]['added_at'])
        self.assertEquals(0, metrics[0]['accuracy'])
        self.assertEquals('2018-11-25', metrics[1]['added_at'])
        self.assertEquals(100, metrics[1]['accuracy'])
Exemplo n.º 14
0
    def test_changelist_view_returns_negative_metrics_when_only_negative_corpora_exist(
            self):
        news_item = NewsItem()
        news_item.title = 'foo'
        news_item.save()

        corpus = Corpus()
        corpus.news_item = news_item
        corpus.positive = False
        corpus.save()

        superuser = self.create_superuser('superuser')
        request = self.mocked_authenticated_request('/admin/rss/corpusmetric/',
                                                    superuser)
        response = self.admin.changelist_view(request)

        expected_metrics = [{'positive': False, 'total': 1}]
        expected_metrics_total = {'total': 1}

        self.assertEquals(expected_metrics,
                          response.context_data['corpus_metrics'])
        self.assertEquals(expected_metrics_total,
                          response.context_data['corpus_metrics_total'])
Exemplo n.º 15
0
 def setUp(self):
     news_item = NewsItem()
     self.corpus = Corpus()
     self.corpus.news_item = news_item