Beispiel #1
0
                     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