def _collabrativeFiltering(query,models,issues):
	# collaborative filtering through cos-sim scoring
	result = {}
	scores = cosSim.scoreEntries(query,models)
	for issue in issues:
		tools.updateDictValues(issue['entries'],scores[issue['_id']],additive=False)
		tools.mergeDicts(result,issue['entries'])
	return result
Esempio n. 2
0
def selectCandidates(profile, storage, cf=True):
    def prepareQueryMatrix(topics, wordBag, pool):
        # standardization
        words = topics.viewkeys() | wordBag.viewkeys()
        query = deepcopy(topics)
        bag = deepcopy(wordBag)
        tools.updateDictValues(query,
                               1.0 / sum(query.values()),
                               additive=False)  # nornmalize query
        tools.completeDict(query, words, default=0)
        tools.completeDict(bag, words, default=0)
        matrix = _getMatrix(pool, words)
        return query, matrix, bag

    topics = profile['topics']
    entries = storage.getLatestEntries()
    wordBag = storage.getKeywordWeights()
    topicBag = storage.getTopicWeights()
    query, matrix, wordWeights = prepareQueryMatrix(topics, wordBag,
                                                    _getPool(entries))

    import languageModel as lang
    import cosSim as cos
    import ensemble

    candidates = {}
    candidates['cosSim'] = cos.scoreEntries(query, matrix)
    candidates['languageModel'] = lang.scoreEntries(query, matrix, wordWeights)

    if 'model' not in profile or not profile[
            'model']:  # if profile is not a topic model
        models = _getPool(storage.getLatestProfiles(), model=True)
        issues = storage.getLatestIssues()
        query, models = prepareQueryMatrix(topics, topicBag, models)

        import collabrativeFiltering as coFilter
        candidtates['collabrativeFiltering'] = coFilter.scoreEntries(
            query, models, issues)

    return ensemble.scoreEntries(candidates, topics, topicBag, pool, wordBag)
Esempio n. 3
0
def selectCandidates(profile, storage, cf=True):
    def prepareQueryMatrix(topics, wordBag, pool):
        # standardization
        words = topics.viewkeys() | wordBag.viewkeys()
        query = deepcopy(topics)
        bag = deepcopy(wordBag)
        tools.updateDictValues(query, 1.0 / sum(query.values()), additive=False)  # nornmalize query
        tools.completeDict(query, words, default=0)
        tools.completeDict(bag, words, default=0)
        matrix = _getMatrix(pool, words)
        return query, matrix, bag

    topics = profile["topics"]
    entries = storage.getLatestEntries()
    wordBag = storage.getKeywordWeights()
    topicBag = storage.getTopicWeights()
    query, matrix, wordWeights = prepareQueryMatrix(topics, wordBag, _getPool(entries))

    import languageModel as lang
    import cosSim as cos
    import ensemble

    candidates = {}
    candidates["cosSim"] = cos.scoreEntries(query, matrix)
    candidates["languageModel"] = lang.scoreEntries(query, matrix, wordWeights)

    if "model" not in profile or not profile["model"]:  # if profile is not a topic model
        models = _getPool(storage.getLatestProfiles(), model=True)
        issues = storage.getLatestIssues()
        query, models = prepareQueryMatrix(topics, topicBag, models)

        import collabrativeFiltering as coFilter

        candidtates["collabrativeFiltering"] = coFilter.scoreEntries(query, models, issues)

    return ensemble.scoreEntries(candidates, topics, topicBag, pool, wordBag)