index=tempIndex)) # Classifiers classifiers = ClassifierFinder.getSelectedClassifierModules() classifications = pandas.DataFrame() print("") trainingQuestions = {k: v for k, v in questions.items() if v['isTraining']} testingQuestions = {k: v for k, v in questions.items() if not v['isTraining']} for classifier in classifiers: print("Running classifier '" + classifier + "'") classifierClass = globals()[classifier].__dict__[classifier]() classifications[classifier] = classifierClass.classify( trainingQuestions, testingQuestions, featureNames) print('\nSample entries from Classifiers combined output:') pprint(classifications[0:10]) # Merge results of individual classifiers together to get final scores print('\nMerging results') output = Merger.merge(classifications) # Done! Write scoring file. outputfile = 'output.pred' print('\nWriting output to ' + outputfile) OutputFileWriter.write(output, outputfile, questions) print("\nFinished")
class DAThread(QtCore.QObject): onFolderUpdate = QtCore.pyqtSignal() onDoubleUpdate = QtCore.pyqtSignal() onProgressChange = QtCore.pyqtSignal(float) def __init__(self, dbPath): QtCore.QObject.__init__(self) self.db = DatabaseHandler('DAThread', dbPath) self.merger = Merger() self.sha = QtCore.QCryptographicHash(QtCore.QCryptographicHash.Sha1) return def __del__(self): return @QtCore.pyqtSlot() def closeEvent(self): self.db = None self.thread().exit() return @QtCore.pyqtSlot(QtCore.QString) def onFolderAdded(self, path): queries = [ ('INSERT INTO folders (name, os, computerName) VALUES (:name, :os, :computerName)', { ':name': path, ':os': platform.system(), ':computerName': platform.node() } ) ] self.db.processQueries(queries) self.onFolderUpdate.emit() return def sha1(self, path): s = QtCore.QFile(path) s.open(QtCore.QIODevice.ReadOnly) self.sha.addData(s.readAll()) s.close() res = self.sha.result().toHex() self.sha.reset() return res def processFile(self, t): absPath, path, fileName, size = t query = 'INSERT INTO files (hash, absPath, name, path, size, searchTag) VALUES (:hash, :absPath, :name, :path, :size, :searchTag)' dic = { ':hash': self.sha1(absPath), ':absPath': absPath, ':name': fileName, ':path': path, ':size': QtCore.QString(unicode(size)), ':searchTag': self.currentTag } self.queries.append((query, dic)) return def progressFun(self, percent): if percent == 0: return elif percent != -1: self.progress += percent self.onProgressChange.emit(self.progress) else: self.onProgressChange.emit(-1) return def createSession(self): timestamp = QtCore.QString(unicode(int(time.time()))) computerName = QtCore.QString(platform.node()) h = QtCore.QCryptographicHash(QtCore.QCryptographicHash.Sha1) h.addData(computerName) h.addData(timestamp) currentTag = h.result().toHex() query = 'INSERT INTO tags (searchTag, timestamp, computerName) VALUES (:searchTag, :timestamp, :computerName)' dic = { ':searchTag': currentTag, ':timestamp': timestamp, ':computerName': computerName } self.db.processQueries([(query, dic)]) self.queries = [] self.progress = 0.0 self.currentTag = currentTag return def saveProgress(self, d): queries = self.queries self.queries = [] query = 'REPLACE INTO lastSearch (searchTag, lastPercent, lastPath) VALUES (:searchTag, :lastPercent, :lastPath)' dic = { ':searchTag': self.currentTag, ':lastPercent': self.progress, ':lastPath': d } queries.append((query, dic)) self.db.processQueries(queries) self.onDoubleUpdate.emit() return @QtCore.pyqtSlot(list, float) def onSearchAsked(self, cl, percent): self.createSession() for d in cl: walk(d, self.processFile, percent, self.progressFun) self.saveProgress(d) self.onDoubleUpdate.emit() self.onProgressChange.emit(-1) self.onDoubleUpdate.emit() return @QtCore.pyqtSlot(QtCore.QString) def onFolderRemoved(self, path): if path.isNull(): return queries = [ ('DELETE FROM folders where name = :name', { ':name': path } ) ] self.db.processQueries(queries) self.onFolderUpdate.emit() return @QtCore.pyqtSlot(list, QtCore.QString) def onMergerCalled(self, srcs, dst): self.merger.merge(srcs, dst) return