def __init__(self, paths): self.distanceMatrix = None self.distanceDict = dict() self.paths = sorted(paths, key=lambda x: x.label) self.pathNames = sorted(list(map(lambda x: x.label, paths))) self.allCourseNames = abstract.extractAllCourseNames(paths) np.set_printoptions(suppress=True)
def calculatePathDistance(self, pathA, pathB): coursesA = abstract.extractAllCourseNames([pathA]) coursesB = abstract.extractAllCourseNames([pathB]) courseNames = abstract.extractAllCourseNames([pathA, pathB]) semesterA, semesterB = abstract.createExtendedLookUpList( pathA, pathB, courseNames) distanceA = self.generateDistanceMatrix(semesterA) distanceB = self.generateDistanceMatrix(semesterB) distanceA = self.setNonOverlap(distanceA, courseNames, coursesA, 0) distanceB = self.setNonOverlap(distanceB, courseNames, coursesB, 1) distanceDiff = np.absolute(np.sign(np.subtract(distanceA, distanceB))) n, m = distanceDiff.shape size = n - 1 tri = np.fliplr(distanceDiff)[np.triu_indices(size)] distance = sum(tri) / len(tri) return distance
def calculatePathDistance(self, pathA, pathB): coursesA = abstract.extractAllCourseNames([pathA]) coursesB = abstract.extractAllCourseNames([pathB]) coursesCombined = np.intersect1d(coursesA, coursesB) courseNames = abstract.extractAllCourseNames([pathA, pathB]) semesterA, semesterB = abstract.createExtendedLookUpList( pathA, pathB, courseNames) distanceA = self.generateDistanceMatrix(semesterA) distanceB = self.generateDistanceMatrix(semesterB) #distanceA = self.setNonOverlap(distanceA, courseNames, coursesA, 0) #distanceB = self.setNonOverlap(distanceB, courseNames, coursesB, 1) distanceA = self.setNonOverlap(distanceA, courseNames, coursesA, 0) distanceB = self.setNonOverlap(distanceB, courseNames, coursesB, 1) distanceDiff = np.absolute(np.sign(np.subtract(distanceA, distanceB))) tri = distanceDiff[np.triu_indices_from(distanceDiff, 1)] distance = sum(tri) / len(tri) return distance
def createSemesterWords(self, pathA, pathB): courseNames = abstract.extractAllCourseNames([pathA, pathB]) idDict = dict() for i, n in enumerate(courseNames): idDict[n] = i semesterA, semesterB = [], [] for sem in pathA.semester: tempArr = [] for c in sem: tempArr.append(chr(idDict[c.name])) tempArr.sort() semesterA.append(''.join(tempArr)) for sem in pathB.semester: tempArr = [] for c in sem: tempArr.append(chr(idDict[c.name])) tempArr.sort() semesterB.append(''.join(tempArr)) return semesterA, semesterB
def calculatePathDistance(self, pathA, pathB): courseNames = abstract.extractAllCourseNames([pathA, pathB]) idDict = dict() for i, n in enumerate(courseNames): idDict[n] = i semesterA, semesterB = [], [] for sem in pathA.semester: tempArr = [] for c in sem: tempArr.append(chr(idDict[c.name])) tempArr.sort() semesterA.append(''.join(tempArr)) for sem in pathB.semester: tempArr = [] for c in sem: tempArr.append(chr(idDict[c.name])) tempArr.sort() semesterB.append(''.join(tempArr)) strSemesterA = ''.join(semesterA) strSemesterB = ''.join(semesterB) distance = normalized_damerau_levenshtein_distance( strSemesterA, strSemesterB) return distance
def calculatePathDistance(self, pathA, pathB): courseNames = abstract.extractAllCourseNames([pathA, pathB]) semesterA, semesterB = abstract.createExtendedLookUpList( pathA, pathB, courseNames) distance = energy_distance(semesterA, semesterB) return distance