File size: 4,009 Bytes
a442b3b 99813f5 92058eb df87c45 5dfac06 df87c45 8a665cc df87c45 92058eb df87c45 5dfac06 256ba3f df87c45 92058eb 5dfac06 851150d b737817 397ab84 b737817 6c49ecf b737817 6c49ecf b737817 6c49ecf b737817 7bdc614 b737817 92058eb 5dfac06 92058eb df87c45 5dfac06 92058eb 256ba3f 92058eb 5dfac06 256ba3f 92058eb 256ba3f 92058eb 5dfac06 92058eb 256ba3f 92058eb 5dfac06 92058eb 5dfac06 92058eb 5dfac06 92058eb 5dfac06 92058eb |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
#include non-patent literature (NPL) - arxiv, mdpi, ncbi, random web articles + remove patent numbers which belong to the same family!
# ranking should be based on title, abstract, claims, summary of the patent rather than a particular embodiment!
import os
import streamlit as st
from main import generate_search_terms, search_on_google_patents, check_similarity_of_patents
# Streamlit app starts here
st.title("Patent Similarity Search App (RAG + GOOGLE PATENTS SEARCH)")
st.subheader("User Input")
user_input = st.text_area("Enter Patent Data", "Paste your patent details here...")
# Sidebar for user input
with st.sidebar:
number_of_generated_search_terms = st.number_input("Number of Search Terms to Generate", value=5, min_value=1)
top_k_patents = st.number_input("Top K Patents to Search", value=10, min_value=1)
model_name = st.text_input("OpenAI Model Name", "gpt-4-0125-preview")
# Fetch API keys from environment variables
openai_key = os.getenv("OPENAI_API_KEY", "")
serpapi_key = os.getenv("SERP_API_KEY", "")
# Allow user to input missing keys
if not openai_key:
openai_key = st.text_input("Missing: OpenAI API Key (OPENAI_API_KEY)", "")
if not serpapi_key:
serpapi_key = st.text_input("Missing: SERP API Key (SERP_API_KEY)", "")
# Check which API keys are missing and notify the user
missing_keys = []
if not openai_key:
missing_keys.append("OpenAI API Key")
if not serpapi_key:
missing_keys.append("SERP API Key")
if missing_keys:
st.error(f"Unable to fetch {', '.join(missing_keys)}")
else:
# Main content
if st.button("Find Similar Patents"):
try:
# Generate search terms
with st.spinner('Generating search terms...'):
generated_search_terms = generate_search_terms(user_input, number_of_generated_search_terms)
st.success("Search terms generated!")
st.write("Generated search terms: ", generated_search_terms)
# Search patents using generated terms
with st.spinner('Searching for patents...'):
search_terms_patents = search_on_google_patents(generated_search_terms)
st.success("Patents search completed!")
st.subheader("Top Patents Found for Search Terms")
for search_term, patents in search_terms_patents.items():
st.write(f"Top {top_k_patents} patents found for search term: {search_term}")
if len(patents) == 0:
st.write(f"No patents found for search term: {search_term}")
else:
patent_titles = [patent['patentTitle'] for patent in patents]
st.json(patent_titles[:top_k_patents])
# Check similarity of patents
patents_list = []
with st.spinner('Checking similarities of patents...'):
for search_term, patents in search_terms_patents.items():
patents_list.extend(patents[:top_k_patents])
similarities = check_similarity_of_patents(user_input, patents_list)
st.success("Similarity check completed!")
# Enrich patents with similarity scores and sort them
for patent in similarities['listOfPatents']:
for p in patents_list:
if patent['patentNumber'] == p['patentNumber']:
p['similarityScore'] = patent['similarityScore']
p['patentGoogleUrl'] = f"https://patents.google.com/patent/{p['patentNumber']}"
break
patents_list = list(sorted(patents_list, key=lambda x: x.get('similarityScore', 0), reverse=True))
# Display top similar patents
st.subheader("Top Similar Patents")
st.json(patents_list)
except KeyError as e:
st.error(f"Key error encountered: {e}")
except Exception as e:
st.error(f"An error occurred: {e}")
|