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
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)
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)