From c18ec26d31217d3f6a0d3ec7507070fe5cc78459 Mon Sep 17 00:00:00 2001 From: Tyler Date: Fri, 16 Feb 2024 13:04:14 -0800 Subject: [PATCH] Added semantic search interfacing --- .env | 1 + app.py | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/.env b/.env index c5f2edf..fbbfaa8 100644 --- a/.env +++ b/.env @@ -1 +1,2 @@ KJV_SERMON_DB="/home/tyler/kjv-api/sermon-analyzer/data/sermons.db" +KJV_SECRET_API_KEY="testing" diff --git a/app.py b/app.py index 91b6dbc..07f58a2 100644 --- a/app.py +++ b/app.py @@ -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//") +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/") # find database verse_id by english scripture reference (1John5:7) def get_single_reference_verse_id(ref:str): ref = ref.split(",")[0]