Ejemplo n.º 1
0
    def rank_article(self, article_as_dict):
        article_vendor = self.get_vendor(article_as_dict)

        if article_vendor is None:
            logger.error("No vendor for '%s'" % article_as_dict['news_vendor'])
            return

        stored_article = self.save_article(article_vendor, article_as_dict)

        if stored_article is None:
            logger.error("Could not save article")
            return

        #get users for vendor
        users = User.objects(subscriptions=article_vendor)

        #rank article for each user to her profile
        for u in users:
            user_model = UserModelCentroid(user_id=u.id, extractor=self.feature_extractor_)
            ranking = user_model.rank(stored_article)
            self.save_rating(u, stored_article, ranking)
            logger.info("Store rating for user: " + str(ranking))
Ejemplo n.º 2
0
    def setUp(self):
        logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.DEBUG)

        config = load_config(file_path="/vagrant/config.yaml", logger=logger, exit_with_error=True)

        #Connect to test database
        connect("nyan_test", port=27017)
        fill_database()
        #connect(config['database']['db-name'], 
        #        username= config['database']['user'], 
        #        password= config['database']['passwd'], 
        #        port = config['database']['port'])

        self.user_id = User.objects(email=u'*****@*****.**').first().id

        #self.feature_extractor = EsaFeatureExtractor(prefix = config['prefix'])
        self.feature_extractor = TfidfFeatureExtractor(prefix=config['prefix'])
        self.trainer = UserModelCentroid(self.user_id, extractor=self.feature_extractor)
Ejemplo n.º 3
0
class UserModelCentroidTest(unittest.TestCase):
    def setUp(self):
        logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.DEBUG)

        config = load_config(file_path="/vagrant/config.yaml", logger=logger, exit_with_error=True)

        #Connect to test database
        connect("nyan_test", port=27017)
        fill_database()
        #connect(config['database']['db-name'], 
        #        username= config['database']['user'], 
        #        password= config['database']['passwd'], 
        #        port = config['database']['port'])

        self.user_id = User.objects(email=u'*****@*****.**').first().id

        #self.feature_extractor = EsaFeatureExtractor(prefix = config['prefix'])
        self.feature_extractor = TfidfFeatureExtractor(prefix=config['prefix'])
        self.trainer = UserModelCentroid(self.user_id, extractor=self.feature_extractor)

    def tearDown(self):
        clear_database()

    @unittest.skip("not for now")
    def test_train(self):
        self.trainer.train()

        self.assertAlmostEqual(self.trainer.learned_user_model.data[0][1],
                               0.1553, 4)

    @unittest.skip("no saving yet")
    def test_save(self):
        self.trainer.train()
        self.trainer.save()

        user_model = UserModel.objects(user_id=self.user_id).first()

        self.assertAlmostEqual(user_model.data[0][1],
                               0.0021, 4)
Ejemplo n.º 4
0
    logging.basicConfig(format="%(asctime)s : %(levelname)s : %(message)s", level=logging.DEBUG, filename=options.log)

    # load config
    logger = logging.getLogger("main")
    logging.info("Load config")

    config_ = load_config(options.config, logger, exit_with_error=True)

    if config_ is None:
        logger.error("No config. Exit.")
        sys.exit(1)

    # Connect to mongo database
    connect(
        config_["database"]["db-name"],
        username=config_["database"]["user"],
        password=config_["database"]["passwd"],
        port=config_["database"]["port"],
    )

    feature_extractor = TfidfFeatureExtractor(prefix=config_["prefix"])

    logger.info("Learn user model...")
    users = User.objects()
    for u in users:
        logger.info("for %s" % u.name)
        trainer = UserModelCentroid(user_id=u.id, extractor=feature_extractor)
        trainer.train()
        trainer.save()
    logger.info("...done.")