NERGPT / app.py
chandralegend's picture
added the initial implementation
8dcfc9b
import streamlit as st
import openai
import os
import re
import ast
openai.api_key = os.getenv("OPENAI_API_KEY")
SYSTEM_PROMPT = "You are a smart and intelligent Named Entity Recognition (NER) system. I will provide you the definition of the entities you need to extract, the sentence from where your extract the entities and the output format with examples."
USER_PROMPT_1 = "Are you clear about your role?"
ASSISTANT_PROMPT_1 = "Sure, I'm ready to help you with your NER task. Please provide me with the necessary information to get started."
GUIDELINES_PROMPT = (
"Entity Definition:\n"
"1. PERSON: Short name or full name of a person from any geographic regions.\n"
"2. DATE: Any format of dates. Dates can also be in natural language.\n"
"3. LOC: Name of any geographic location, like cities, countries, continents, districts etc.\n"
"\n"
"Output Format:\n"
"{{'PERSON': [list of entities present], 'DATE': [list of entities present], 'LOC': [list of entities present]}}\n"
"If no entities are presented in any categories keep it None\n"
"\n"
"Examples:\n"
"\n"
"1. Sentence: Mr. Jacob lives in Madrid since 12th January 2015.\n"
"Output: {{'PERSON': ['Mr. Jacob'], 'DATE': ['12th January 2015'], 'LOC': ['Madrid']}}\n"
"\n"
"2. Sentence: Mr. Rajeev Mishra and Sunita Roy are friends and they meet each other on 24/03/1998.\n"
"Output: {{'PERSON': ['Mr. Rajeev Mishra', 'Sunita Roy'], 'DATE': ['24/03/1998'], 'LOC': ['None']}}\n"
"\n"
"3. Sentence: {}\n"
"Output: "
)
COLORED_ENTITY = {"PERSON": "red", "DATE": "blue", "LOC": "green"}
def openai_chat_completion_response(final_prompt):
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": USER_PROMPT_1},
{"role": "assistant", "content": ASSISTANT_PROMPT_1},
{"role": "user", "content": final_prompt},
],
)
return response["choices"][0]["message"]["content"].strip(" \n")
my_sentence = st.text_input("Your Sentence")
if st.button("Submit"):
GUIDELINES_PROMPT = GUIDELINES_PROMPT.format(my_sentence)
ners = openai_chat_completion_response(GUIDELINES_PROMPT)
ners_dictionary = ast.literal_eval(ners)
for entity_type, entity_list in ners_dictionary.items():
entity_list = list(set(entity_list))
for ent in entity_list:
if ent != "None":
my_sentence = re.sub(
ent,
":"
+ COLORED_ENTITY[entity_type]
+ "["
+ ent
+ "\["
+ entity_type
+ "\]"
+ "]",
my_sentence,
)
st.markdown(my_sentence)