def create_commit_matrix(revisions): import functools from gitlog import get_commit_hashes, get_files commit_hashes = get_commit_hashes(revisions) files = get_files(revisions) commit_mtrx = {} for f in files: commit_mtrx.update([(f, [0 for i in range(len(commit_hashes))])]) for commit_index in range(len(revisions)): commit = revisions[commit_index] for f in commit["files"]: commit_mtrx[f][commit_index] = 1 return commit_mtrx
def recommend(path): from jubatus.recommender import client from jubatus.recommender import types from jubatus.common import Datum from commit_matrix import create_commit_matrix from gitlog import dump, get_files, get_commit_hashes json_frmt_log = dump(path) mtrx=create_commit_matrix(json_frmt_log) commit_hashes=get_commit_hashes(json_frmt_log) recommender = client.Recommender(_host, _port, _name) for filename,cmts in mtrx.items(): d={} for i in range(len(cmts)): d.update([(commit_hashes[i], cmts[i])]) recommender.update_row(filename, Datum(d)) recommended={} for f in get_files(json_frmt_log): r = [x.id for x in recommender.similar_row_from_id(f, 4)] recommended.update([(f, [x for x in r[1:]])]) return recommended