Ejemplo n.º 1
0
    def __mark_as__(self, entry, pool, guesser, force=False):
        """ when forced the entry is updated even if the db says it is already """

        log.debug("entry.id: %s" % entry.id)
        classy = meta.Session\
                .query(model.Classification)\
                .filter_by(user_id = c.user.id, entry_id=entry.id).first()

        if not classy:
            classy = model.Classification()
            classy.user_id = c.user.id
            classy.entry_id = entry.id
            classy.pool = pool
            meta.Session.add(classy)

            untrain_id = None
        else:
            if classy.pool == pool and not force:
                h.flash("entry was already classified as %s" % pool)
                return h.go_back(h.url_for(controller='feed', action='show_feed', id=entry.feed_id))

            classy.pool = pool
            meta.Session.add(classy)

            untrain_id = entry.id

        meta.Session.commit()

        guesser.trainer.train(pool, __relevant__(entry), entry.id)

        if pool == 'spam':
            other_pool = 'ham'
        elif pool == 'ham':
            other_pool = 'spam'
        else:
            raise "bad pool"

#        if untraind_id:
#            guesser.trainer.untrain(other_pool, __relevant__(entry), untrain_id)
        guesser.save()

        if not force:
            h.flash("now known as %s: %s" % (pool, entry.id))
            return h.go_back(h.url_for(controller='feed', action='show_feed', id=entry.feed_id))
Ejemplo n.º 2
0
    def change_intervall(self, id):
        word = request.params.get('word')
        settings = meta.Session\
                   .query(model.BayesFeedSetting)\
                   .filter_by(user_id = c.user.id, feed_id=id).first()
        if settings:
            meta.Session.add(settings)
        else:
            settings = model.BayesFeedSetting()
            settings.user_id = c.user.id
            settings.feed_id = id
            meta.Session.add(settings)

        settings.summarize_at = word
        meta.Session.commit()
        h.flash('changed intervall to %s' % word)
        return h.go_back()
Ejemplo n.º 3
0
    def redo(self, id):
        if not c.user:
            return redirect(url(controller='login', action='signin', id=None, return_to=url.current()))

        c.feed = meta.find(model.Feed, id)

        query = meta.Session\
                .query(model.Classification)\
                .join(model.FeedEntry)\
                .filter_by(feed_id=id)

        guesser = Guesser(c.feed, c.user, config)
        guesser.clear()

        cnt = 0
        needles_cnt = 0
        for entry in query:
#            h.flash("%s :%s" % (entry.pool, __relevant__(entry.entry)))
#            guesser.trainer.train(entry.pool, __relevant__(entry.entry))

            if guesser.is_spam(entry.entry, use_classified=False) and (entry.pool == 'spam'):
                needles_cnt += 1
            elif not guesser.is_spam(entry.entry, use_classified=False) and (entry.pool == 'ham'):
                needles_cnt += 1

            self.__mark_as__(entry.entry, entry.pool, guesser, True)
            cnt+=1

        guesser.save()
        log.debug("FOOOOOO")


        if needles_cnt > 0:
            h.flash("%d entries were needlessly trained (total: %s)" % (needles_cnt, cnt))
        else:
            h.flash("learned %s entries" % cnt)

        return h.go_back()
Ejemplo n.º 4
0
 def update(self, id):
     #~ feed = meta.Session.query(model.Feed).get(id)
     feed = meta.find(model.Feed, id)
     cnt_added = feed.fetch()
     h.flash("added %s entries" % cnt_added)
     return h.go_back()