From 80415da2e0089013a88c89bcdaca0bccdc1b62fb Mon Sep 17 00:00:00 2001 From: IsolatedSushi <simen.vanherpt@gmail.com> Date: Mon, 15 Feb 2021 14:37:01 +0100 Subject: [PATCH] Update knnServer.py --- backend/grpcKNN/knnServer.py | 66 ++++++++++++++---------------------- 1 file changed, 25 insertions(+), 41 deletions(-) diff --git a/backend/grpcKNN/knnServer.py b/backend/grpcKNN/knnServer.py index 3d15085..2cc3cac 100644 --- a/backend/grpcKNN/knnServer.py +++ b/backend/grpcKNN/knnServer.py @@ -52,50 +52,34 @@ class KNNService(rpc.KNNServicer): self.clientList.append(Data()) print("New id: ",clientID) return knn.ID(id=str(clientID)) - + + def calculateFinalVector(self,dataObject,request): + strippedWord = "".join(request.words.split()) + wordList = re.split('-|\+',strippedWord) + + wordList = [x.lower() for x in wordList] + for word in wordList: + if word not in dataObject.wordToID: + return knn.Neighbours() + + orderedOperators = ''.join(c for c in request.words if c in ["-","+"]) + firstID = dataObject.wordToID[wordList[0]] + resultedVector = np.array(dataObject.allData[firstID]) + + for i in range(1,len(wordList)): + nextID = dataObject.wordToID[wordList[i]] + resultedVector = ops[orderedOperators[i-1]](resultedVector, np.array(dataObject.allData[nextID])) + + return resultedVector #Do simple linalg expression with 3 vector, improve later def getKNNRequest(self,request,context): ops = { "+": operator.add, "-": operator.sub } - try: - dataObject = self.clientList[self.metaToID(context)] - print("Words ",request.words) - strippedWord = "".join(request.words.split()) - wordList = re.split('-|\+',strippedWord) - print("WordList",wordList) - - wordList = [x.lower() for x in wordList] - for word in wordList: - if word not in dataObject.wordToID: - print("Word", word, " not in the set") - return knn.Neighbours() - - orderedOperators = ''.join(c for c in request.words if c in ["-","+"]) - print("ordererdOperators",orderedOperators) - print("test",dataObject.wordToID[wordList[0]]) - firstID = dataObject.wordToID[wordList[0]] - resultedVector = np.array(dataObject.allData[firstID]) - print("resultedVector",resultedVector) - - for i in range(1,len(wordList)): - print("i",i) - nextID = dataObject.wordToID[wordList[i]] - resultedVector = ops[orderedOperators[i-1]](resultedVector, np.array(dataObject.allData[nextID])) - - - - - # if words[0] not in dataObject.wordToID or words[1] not in dataObject.wordToID or words[2] not in dataObject.wordToID: - # print("a word is not in the set") - # return - # vector1 = dataObject.allData[dataObject.wordToID[words[0]]] - # vector2 = dataObject.allData[dataObject.wordToID[words[1]]] - # vector3 = dataObject.allData[dataObject.wordToID[words[2]]] - - # linVector = np.array(vector1) - np.array(vector2) + np.array(vector3) - neighbours = self.knnVector(resultedVector,10,dataObject) - return neighbours - except Exception as e: - print(e) + dataObject = self.clientList[self.metaToID(context)] + + resultedVector = self.calculateFinalVector(dataObject,request) + neighbours = self.knnVector(resultedVector,10,dataObject) + return neighbours + #Perform actual KNN -- GitLab