def buildAdjacencyMatrixWithShortestPaths(tokenElements, dependencyElements, entityElements, pairElement, directed = True, weight_by_distance = False):
    #Punctuation dependencies are mostly junk
    dependencyElements = removeDependencies(dependencyElements, ["punct"])
    
    parseGraph = ParseGraph.ParseGraph(tokenElements, dependencyElements)
    parseGraph.markNamedEntities(entityElements)
    e1Id = pairElement.get("e1")
    e2Id = pairElement.get("e2")
    entity1TokenIds = parseGraph.getNamedEntityTokenIds( [e1Id] )
    entity2TokenIds = parseGraph.getNamedEntityTokenIds( [e2Id] )

    binaryPaths = parseGraph.buildBinaryPaths(entity1TokenIds, entity2TokenIds)
    shortestPaths = ParseGraph.getShortestPaths(binaryPaths)
    parseGraph.setAllDependencyWeights(0.3)
    parseGraph.setDependencyWeightsByPath(shortestPaths, 0.9)
    if weight_by_distance:
        parseGraph.reduceWeightByDistance(0.9, 0.5)
    parseGraph.setPPIPrefixForDependencies("sp", 0.9) # shortest path prefix
    parseGraph.maskNames(e1Id, e2Id)
    parseGraph.addPositionTags(entity1TokenIds, entity2TokenIds)
    
    if pairElement.get("interaction") == "True":
        output = 1.
    else:
        output = -1.

    adjMatrix, labels = parseGraph.buildAdjacencyMatrix(floattype)
    return adjMatrix, labels, output    
def buildAdjacencyMatrixWithShortestPaths(tokenElements,
                                          dependencyElements,
                                          entityElements,
                                          pairElement,
                                          directed=True,
                                          weight_by_distance=False):
    #Punctuation dependencies are mostly junk
    dependencyElements = removeDependencies(dependencyElements, ["punct"])

    parseGraph = ParseGraph.ParseGraph(tokenElements, dependencyElements)
    parseGraph.markNamedEntities(entityElements)
    e1Id = pairElement.get("e1")
    e2Id = pairElement.get("e2")
    entity1TokenIds = parseGraph.getNamedEntityTokenIds([e1Id])
    entity2TokenIds = parseGraph.getNamedEntityTokenIds([e2Id])

    binaryPaths = parseGraph.buildBinaryPaths(entity1TokenIds, entity2TokenIds)
    shortestPaths = ParseGraph.getShortestPaths(binaryPaths)
    parseGraph.setAllDependencyWeights(0.3)
    parseGraph.setDependencyWeightsByPath(shortestPaths, 0.9)
    if weight_by_distance:
        parseGraph.reduceWeightByDistance(0.9, 0.5)
    parseGraph.setPPIPrefixForDependencies("sp", 0.9)  # shortest path prefix
    parseGraph.maskNames(e1Id, e2Id)
    parseGraph.addPositionTags(entity1TokenIds, entity2TokenIds)

    if pairElement.get("interaction") == "True":
        output = 1.
    else:
        output = -1.

    adjMatrix, labels = parseGraph.buildAdjacencyMatrix(floattype)
    return adjMatrix, labels, output