def resultFromXML(xmlString): """Returns a PlagResult object from the given XML representation. @param xmlString XML representation (whole file with a single PlagResult) @return A PlagResult object of the given XML representation. """ from xml.dom import minidom dom_object = minidom.parseString(xmlString) # get all PlagResult tags in the XML representation list = dom_object.getElementsByTagName("PlagResult") # get the first PlagResult tag plagResultTag = list[0] # create a PlagResult object plagResult = PlagResult() # read attributes from XML and fill PlagResult plagResult.setIdentifier( plagResultTag.getElementsByTagName("Identifier")[0].getAttribute("Id1"), plagResultTag.getElementsByTagName("Identifier")[0].getAttribute("Id2"), ) plagResult.setAlgorithmName(plagResultTag.getElementsByTagName("Algorithm")[0].firstChild.data) plagResult.setNormalizerName(plagResultTag.getElementsByTagName("Normalizer")[0].firstChild.data) plagResult.setSimilarity(float(plagResultTag.getElementsByTagName("Similarity")[0].firstChild.data)) plagResult.setSuspectedPlagiarism( bool(plagResultTag.getElementsByTagName("SuspectedPlagiarism")[0].firstChild.data) ) tileTags = plagResultTag.getElementsByTagName("Tiles")[0].getElementsByTagName("Tile") tiles = [] for tileTag in tileTags: tile = ( int(tileTag.getAttribute("posId1")), int(tileTag.getAttribute("posId2")), int(tileTag.getAttribute("length")), ) tiles.append(tile) plagResult.setTiles(tiles) plagResult.setIdStringLength( int(plagResultTag.getElementsByTagName("IdStringLength")[0].getAttribute("lengthId1")), int(plagResultTag.getElementsByTagName("IdStringLength")[0].getAttribute("lengthId2")), ) return plagResult
def resultFromXML(xmlString): """Returns a PlagResult object from the given XML representation. @param xmlString XML representation (whole file with a single PlagResult) @return A PlagResult object of the given XML representation. """ from xml.dom import minidom dom_object = minidom.parseString(xmlString) #get all PlagResult tags in the XML representation list = dom_object.getElementsByTagName("PlagResult") #get the first PlagResult tag plagResultTag = list[0] #create a PlagResult object plagResult = PlagResult() #read attributes from XML and fill PlagResult plagResult.setIdentifier(plagResultTag.getElementsByTagName("Identifier")[0].getAttribute("Id1"), plagResultTag.getElementsByTagName("Identifier")[0].getAttribute("Id2")) plagResult.setAlgorithmName(plagResultTag.getElementsByTagName("Algorithm")[0].firstChild.data) plagResult.setNormalizerName(plagResultTag.getElementsByTagName("Normalizer")[0].firstChild.data) plagResult.setSimilarity(float(plagResultTag.getElementsByTagName("Similarity")[0].firstChild.data)) plagResult.setSuspectedPlagiarism(bool(plagResultTag.getElementsByTagName("SuspectedPlagiarism")[0].firstChild.data)) tileTags = plagResultTag.getElementsByTagName("Tiles")[0].getElementsByTagName("Tile") tiles = [] for tileTag in tileTags: tile = (int(tileTag.getAttribute("posId1")), int(tileTag.getAttribute("posId2")), int(tileTag.getAttribute("length"))) tiles.append(tile) plagResult.setTiles(tiles) plagResult.setIdStringLength(int(plagResultTag.getElementsByTagName("IdStringLength")[0].getAttribute("lengthId1")), int(plagResultTag.getElementsByTagName("IdStringLength")[0].getAttribute("lengthId2"))) return plagResult
"""Returns a list with all positive PlagResult objects from the result list. @param resultList list containing PlagResult objects @return A list containing only positive, i.e. suspected, PlagResult objects. """ return [r for r in resultList if r.isSuspectPlagiarism()] #=============================================================================== # Test #=============================================================================== if __name__ == '__main__': print "Start Tests - PlagResultList helper methods" #create Test PlagResult1 plagResult = PlagResult("Test1", "Test2") plagResult.setAlgorithmName("NGRAM") plagResult.setNormalizerName("NORMAL") plagResult.setSimilarity(0.65) plagResult.setSuspectedPlagiarism(True) plagResult.setIdStringLength(52, 45) plagResult.setTiles([(3, 5, 4), (12, 23, 5), (34, 2, 3)]) #create Test PlagResult2 plagResult2 = PlagResult("Test3", "Test4") plagResult2.setAlgorithmName("NGRAM") plagResult2.setNormalizerName("NORMAL") plagResult2.setSimilarity(0.45) plagResult2.setSuspectedPlagiarism(False) plagResult2.setIdStringLength(152, 145) plagResult2.setTiles([(3, 5, 4), (12, 23, 5), (34, 2, 3)]) #create Test PlagResult3 plagResult3 = PlagResult("Test5", "Test6")
tile = (int(tileTag.getAttribute("posId1")), int(tileTag.getAttribute("posId2")), int(tileTag.getAttribute("length"))) tiles.append(tile) plagResult.setTiles(tiles) plagResult.setIdStringLength(int(plagResultTag.getElementsByTagName("IdStringLength")[0].getAttribute("lengthId1")), int(plagResultTag.getElementsByTagName("IdStringLength")[0].getAttribute("lengthId2"))) return plagResult #=============================================================================== # Test #=============================================================================== if __name__ == '__main__': print "Start Test - Transfrom PlagResult to XML and Back" #create Test PlagResult plagResult = PlagResult("Test1", "Test2") plagResult.setAlgorithmName("NGRAM") plagResult.setNormalizerName("NORMAL") plagResult.setSimilarity(0.65) plagResult.setSuspectedPlagiarism(True) plagResult.setIdStringLength(52, 45) plagResult.setTiles([(3,5,4),(12,23,5),(34,2,3)]) #test transfrom to xml and back should result in the same PlagResult object result = resultFromXML(resultToXML(plagResult)) assert plagResult.__eq__(plagResult), "plagResult changed through transformation to xml and back" print "End Test - Transfrom PlagResult to XML and Back"