示例#1
0
 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)
示例#2
0
    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
示例#4
0
 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
示例#6
0
 def calculatePathDistance(self, pathA, pathB):
     courseNames = abstract.extractAllCourseNames([pathA, pathB])
     semesterA, semesterB = abstract.createExtendedLookUpList(
         pathA, pathB, courseNames)
     distance = energy_distance(semesterA, semesterB)
     return distance