Added semantic search interfacing

This commit is contained in:
2024-02-16 13:04:14 -08:00
parent fbdf5e9473
commit c18ec26d31
2 changed files with 41 additions and 0 deletions
+1
View File
@@ -1 +1,2 @@
KJV_SERMON_DB="/home/tyler/kjv-api/sermon-analyzer/data/sermons.db" KJV_SERMON_DB="/home/tyler/kjv-api/sermon-analyzer/data/sermons.db"
KJV_SECRET_API_KEY="testing"
+40
View File
@@ -15,12 +15,16 @@ import string # for literals shortcut
import json # for dictionary import json # for dictionary
import hunspell # for spell checking (not really used) import hunspell # for spell checking (not really used)
import os import os
import sys
import logging import logging
import socket
import json
from tools import sanity_check from tools import sanity_check
from dotenv import load_dotenv from dotenv import load_dotenv
load_dotenv() load_dotenv()
SERMON_DB = os.getenv("KJV_SERMON_DB") SERMON_DB = os.getenv("KJV_SERMON_DB")
SECRET_API_KEY = os.getenv("KJV_SECRET_API_KEY")
sequential_purge_delta: timedelta = timedelta(days=90) sequential_purge_delta: timedelta = timedelta(days=90)
timestamp_runtime: datetime = datetime.now().strftime("%d%b%y-%H:%M") timestamp_runtime: datetime = datetime.now().strftime("%d%b%y-%H:%M")
@@ -175,6 +179,15 @@ def get_verse_id(book_id, chapter: str, verse: str) -> str:
verseid = "001" # Avoid verse_ids list IndexErrors on :- searches verseid = "001" # Avoid verse_ids list IndexErrors on :- searches
return str(book_id) + chapterid + verseid return str(book_id) + chapterid + verseid
def get_ref_from_verse_id(verse_id):
# verse_id is 00000000 (00 000 000) (book + chapter + verse)
verse_id = str(verse_id).zfill(8)
book_id = verse_id[:2]
chapter = verse_id[2:5]
verse = verse_id[5:8]
bookname = kjv_cur.execute("SELECT n FROM key_english WHERE b = ?;",(book_id,)).fetchone()[0]
return bookname + " " + chapter + ":" + verse
def get_next_prev_chapter(verseid) -> dict: def get_next_prev_chapter(verseid) -> dict:
current_chapter = verseid[:-3] current_chapter = verseid[:-3]
@@ -271,6 +284,33 @@ def ref_parse_book(ref):
return book return book
return False return False
def request_semantic_search(query):
HOST = 'localhost'
PORT = 1613
data = {"query": query}
data_string = json.dumps(data).encode()
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(data_string)
print(f"sent {data_string}")
data = b''
while True:
part = s.recv(1024)
if not part:
break
print(part)
data += part
return json.loads(data.decode())
@app.get("/semantic/<key>/<query>")
def do_semantic_search(key:str, query:str):
if key != SECRET_API_KEY:
return jsonify({'error': "Invalid Authorization"})
result = request_semantic_search(query=query)
return jsonify(result)
@app.get("/ref/<ref>") # find database verse_id by english scripture reference (1John5:7) @app.get("/ref/<ref>") # find database verse_id by english scripture reference (1John5:7)
def get_single_reference_verse_id(ref:str): def get_single_reference_verse_id(ref:str):
ref = ref.split(",")[0] ref = ref.split(",")[0]