Added semantic search interfacing
This commit is contained in:
@@ -15,12 +15,16 @@ import string # for literals shortcut
|
||||
import json # for dictionary
|
||||
import hunspell # for spell checking (not really used)
|
||||
import os
|
||||
import sys
|
||||
import logging
|
||||
import socket
|
||||
import json
|
||||
from tools import sanity_check
|
||||
from dotenv import load_dotenv
|
||||
load_dotenv()
|
||||
|
||||
SERMON_DB = os.getenv("KJV_SERMON_DB")
|
||||
SECRET_API_KEY = os.getenv("KJV_SECRET_API_KEY")
|
||||
|
||||
sequential_purge_delta: timedelta = timedelta(days=90)
|
||||
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
|
||||
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:
|
||||
current_chapter = verseid[:-3]
|
||||
@@ -271,6 +284,33 @@ def ref_parse_book(ref):
|
||||
return book
|
||||
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)
|
||||
def get_single_reference_verse_id(ref:str):
|
||||
ref = ref.split(",")[0]
|
||||
|
||||
Reference in New Issue
Block a user