Spaces:
Running
Running
import gradio as gr | |
from datetime import date | |
import json | |
import csv | |
import datetime | |
import smtplib | |
from email.mime.text import MIMEText | |
import requests | |
from transformers import AutoTokenizer, AutoModelWithLMHead | |
import gc | |
import os | |
import numpy as np | |
import json | |
from tqdm import trange | |
import torch | |
import torch.nn.functional as F | |
from bert_ner_model_loader import Ner | |
import pandas as pd | |
from huggingface_hub import Repository | |
import huggingface_hub | |
import socket | |
HF_TOKEN = os.environ.get("HF_TOKEN") | |
DATASET_NAME = "bert_base_ner" | |
DATASET_REPO_URL = f"https://huggingface.co/datasets/pragnakalp/{DATASET_NAME}" | |
DATA_FILENAME = "bert_base_ner_logs.csv" | |
DATA_FILE = os.path.join("bert_base_ner_logs", DATA_FILENAME) | |
DATASET_REPO_ID = "pragnakalp/bert_base_ner" | |
print("is none?", HF_TOKEN is None) | |
input_value = "The U.S. President Donald Trump came to visit Ahmedabad first time at Motera Stadium with our Prime Minister Narendra Modi in February 2020" | |
try: | |
hf_hub_download( | |
repo_id=DATASET_REPO_ID, | |
filename=DATA_FILENAME, | |
cache_dir=DATA_DIRNAME, | |
force_filename=DATA_FILENAME | |
) | |
except: | |
print("file not found") | |
repo = Repository( | |
local_dir="bert_base_ner_logs", clone_from=DATASET_REPO_URL, use_auth_token=HF_TOKEN | |
) | |
cwd = os.getcwd() | |
bert_ner_model = os.path.join(cwd) | |
Entities_Found =[] | |
Entity_Types = [] | |
k = 0 | |
def get_device_ip_address(): | |
result = {} | |
if os.name == "nt": | |
result = "Running on Windows" | |
hostname = socket.gethostname() | |
ip_address = socket.gethostbyname(hostname) | |
result['ip_addr'] = ip_address | |
result['host'] = hostname | |
print(result) | |
return result | |
elif os.name == "posix": | |
gw = os.popen("ip -4 route show default").read().split() | |
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) | |
s.connect((gw[2], 0)) | |
ipaddr = s.getsockname()[0] | |
gateway = gw[2] | |
host = socket.gethostname() | |
result['ip_addr'] = ipaddr | |
result['host'] = host | |
print(result) | |
return result | |
else: | |
result['id'] = os.name + " not supported yet." | |
print(result) | |
return result | |
def generate_emotion(article): | |
text = "Input sentence: " | |
text += article | |
model_ner = Ner(bert_ner_model) | |
output = model_ner.predict(text) | |
print(output) | |
k = 0 | |
Entities_Found.clear() | |
Entity_Types.clear() | |
save_data_and_sendmail(article,output) | |
for i in output: | |
for j in i: | |
if k == 0: | |
Entities_Found.append(j) | |
k += 1 | |
else: | |
Entity_Types.append(j) | |
k = 0 | |
result = {'Entities Found':Entities_Found, 'Entity Types':Entity_Types} | |
return pd.DataFrame(result) | |
def save_data_and_sendmail(article,output): | |
try: | |
print(">>"*30) | |
hostname = {} | |
hostname = get_device_ip_address() | |
# url = 'https://pragnakalpdev35.pythonanywhere.com/HF_space_que_gen' | |
# # url = 'http://pragnakalpdev33.pythonanywhere.com/HF_space_question_generator' | |
# myobj = {'article': article,'total_que': num_que,'gen_que':result,'ip_addr':hostname.get("ip_addr",""),'host':hostname.get("host","")} | |
# x = requests.post(url, json = myobj) | |
inputdata = article | |
ip = hostname.get("ip_addr","") | |
print(ip) | |
url = 'https://pragnakalpdev33.pythonanywhere.com/HF_space_bert_base_ner' | |
# url = 'http://pragnakalpdev33.pythonanywhere.com/HF_space_question_generator' | |
myobj = {'article': article,'gen_text':output,'ip_addr':hostname.get("ip_addr",""),'host':hostname.get("host","")} | |
x = requests.post(url, json = myobj) | |
add_csv = [inputdata,output,ip] | |
with open(DATA_FILE, "a") as f: | |
writer = csv.writer(f) | |
# write the data | |
writer.writerow(add_csv) | |
commit_url = repo.push_to_hub() | |
print("commit data :",commit_url) | |
return "Successfully save data" | |
except Exception as e: | |
return "Error while sending mail" + str(e) | |
with gr.Blocks(css = ".gradio-container {background-color: lightgray}") as demo: | |
gr.Markdown("<h1 style='text-align: center; margin-bottom: 1rem'>" | |
+ "Named Entity Recognition Using BERT" | |
+ "</h1>") | |
with gr.Row(): [Neon Coqui TTS Plugin](https://github.com/NeonGeckoCom/neon-tts-plugin-coqui) | |
with gr.Column(): | |
input=gr.Textbox(lines=5, value=input_value, label="Input Text", elem_id="inp_div") | |
sub_btn = gr.Button("Submit") | |
output = [gr.Dataframe(row_count = (3, "dynamic"), col_count=(2, "fixed"), label="Here is the Result", headers=["Entities Found","Entity Types"])] | |
gr.Markdown( | |
""" | |
Feel free to give us your <a href="https://www.pragnakalp.com/contact/"> feedback </a> on this NER demo. | |
For all your Named Entity Recognition related requirements, we are here to help you.<br /> | |
Email us your requirement at <a href="mailto:[email protected]"> [email protected] </a> . | |
And don't forget to check out more interesting <a href="https://www.pragnakalp.com/services/natural-language-processing-services/">NLP services</a> we are offering.</ br> | |
<p style='text-align: center;><b>Developed by</b> : <a href="https://www.pragnakalp.com" target="_blank">Pragnakalp Techlabs </a> | |
""") | |
event = sub_btn.click(generate_emotion, inputs=input, outputs=output) | |
demo.launch() | |
# demo = gr.Interface( | |
# generate_emotion, | |
# inputs, | |
# outputs, | |
# title="Entity Recognition For Input Text", | |
# description="Feel free to give your feedback", | |
# css=".gradio-container {background-color: lightgray} #inp_div {background-color: [#7](https://www1.example.com/issues/7)FB3D5;" | |
# ) | |
# demo.launch() |