Add search

This commit is contained in:
Tyler Perkins 2023-02-24 13:41:56 -05:00
parent 7c0393bc5d
commit 3347fd95b4
3 changed files with 62 additions and 2 deletions

View File

@ -3,6 +3,7 @@ from flask_restx import reqparse
from api.clientGetter import getClientSafely from api.clientGetter import getClientSafely
from api.get import getExactFile as getApi from api.get import getExactFile as getApi
from flask import abort from flask import abort
import nlp
import logging import logging
# Exported namespace # Exported namespace
@ -24,8 +25,35 @@ class exactSearch(Resource):
if query in client.getCurrentMemeList(): if query in client.getCurrentMemeList():
return { return {
"found" : True, "found" : True,
"url" : "/resource/exact/" + query "url" : "/resource/exact/" + query,
"name" : query
} }
else: else:
return { "found" : False } return { "found" : False }
@api.route('/close/<string:query>')
@api.doc(params={
'query' : 'Search query to attempt to compare against'
},description="FInd a meme thats close using levenshtein distance")
class textualClose(Resource):
def get(self, query):
client = getClientSafely()
if client is None:
abort(500, "S3 failed to start")
foundMemes = nlp.getCloseMemes(client.getCurrentMemeList(), query)
listToReturn = []
for meme in foundMemes:
entry = {
"found" : True,
"url" : "/resource/exact/" + meme,
"name" : meme
}
listToReturn.append(entry)
return {
"results" : listToReturn,
"numberOfResults" : len(foundMemes)
}

View File

@ -6,7 +6,7 @@ from api import api
import os import os
import logging import logging
logging.basicConfig(level=logging.INFO) logging.basicConfig(level=logging.DEBUG)
isDebug = True isDebug = True

32
src/nlp.py Normal file
View File

@ -0,0 +1,32 @@
from fuzzywuzzy import fuzz, process
from api.clientGetter import getClientSafely
import logging
def getCloseMemes(allPossibleMemes: set, query: str):
if not isinstance(allPossibleMemes, set):
raise Exception("Expected set for allPossibleMemes")
if not isinstance(query, str):
raise Exception("Expected str for query")
topMeme = ''
topMemes = []
topScore = 0
for meme in allPossibleMemes:
currentScore = fuzz.partial_ratio(query, meme)
if currentScore > topScore:
topMeme = meme
topScore = currentScore
if currentScore == 100:
topMemes.append(meme)
topMeme = meme
logging.info('Top memes for given query (' + query + ")")
logging.info('topMemes: ' + str(topMemes))
logging.info('topMeme : ' + topMeme)
if len(topMemes) == 0:
topMemes.append(topMeme)
return topMemes