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