Added semantic search interfacing
This commit is contained in:
@@ -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"
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|||||||
Reference in New Issue
Block a user