File size: 6,348 Bytes
3e0cc3d
3038296
3e0cc3d
2e29a2a
3e0cc3d
4fbea90
3e0cc3d
 
 
 
6520201
3e0cc3d
09c365d
3e0cc3d
 
 
 
be6f283
 
c9ea1f0
a95d70c
 
1910baa
0b65517
12409b9
02ce532
517905d
02ce532
 
 
d4c5a4f
02ce532
b523034
02ce532
 
 
 
 
 
 
 
 
 
 
 
cb87008
02ce532
 
3e0cc3d
 
dc3f0d2
3e0cc3d
 
 
8cb6315
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0197658
f4c86b6
 
 
 
 
dc3f0d2
f4c86b6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3e0cc3d
 
89475a9
02ce532
35ee8bc
8cb6315
 
 
 
 
 
 
be1022c
 
 
 
 
 
 
c2a7c44
8cb6315
c2a7c44
 
02ce532
 
 
35ee8bc
02ce532
 
ce84bdc
3e6975a
156b1d4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f4c86b6
156b1d4
 
a546517
07775da
f4c86b6
 
e5e1033
f4c86b6
e5e1033
156b1d4
 
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
import json
import gradio as gr
import datetime
from datetime import date
import smtplib
import csv
from email.mime.text import MIMEText
import requests
import os
import numpy as np
import json
from tqdm import trange
import gc
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
from urllib.request import urlopen
import re as r
from transformers import AutoTokenizer, AutoModelWithLMHead 


HF_TOKEN = os.environ.get("HF_TOKEN")
DATASET_NAME = "bert_based_ner_dataset"
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_based_ner_dataset"
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 getIP():
	d = str(urlopen('http://checkip.dyndns.com/')
			.read())

	return r.compile(r'Address: (\d+\.\d+\.\d+\.\d+)').search(d).group(1)

def get_location(ip_addr):
    ip=ip_addr

    req_data={
        "ip":ip,
        "token":"pkml123"
    }
    url = "https://demos.pragnakalp.com/get-ip-location"

    # req_data=json.dumps(req_data)
    # print("req_data",req_data)
    headers = {'Content-Type': 'application/json'}

    response = requests.request("POST", url, headers=headers, data=json.dumps(req_data))
    response = response.json()
    print("response======>>",response)
    return response
    
def generate_ner(article):
    result = {'Entities Found':[], 'Entity Types':[]}
    if article.strip():
        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)
    else:
        raise gr.Error("Please enter text in inputbox!!!!")


def save_data_and_sendmail(article,output):
    try:
        print("welcome")
        ip_address = ''

        ip_address= getIP()
        print(ip_address)
        location = get_location(ip_address)
        print(location)
        add_csv = [article,output,ip_address,location]
        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)
        
        url = 'https://pragnakalpdev33.pythonanywhere.com/HF_space_bert_base_ner'
        myobj = {'article': article,'gen_text':output,'ip_addr':ip_address,"location":location}
        x = requests.post(url, json = myobj) 
        
        return "Successfully save data"
    
    except Exception as e:
        print("error")
        return "Error while sending mail" + str(e)
        
input=gr.Textbox(lines=3, value=input_value, label="Input Text")
output = [gr.Dataframe(row_count = (2, "dynamic"), col_count=(2, "fixed"), headers=["Entities Found","Entity Types"], lable="Here is the result",wrap=True)]
# with gr.Blocks(css=".gradio-container {background-color: lightgray}") as demo:
#     gr.Markdown("<h1 style='text-align: center;'>"+ "Named Entity Recognition Using BERT" + "</h1><br/><br/>")
#     with gr.Row():
#         with gr.Column():
#             input=gr.Textbox(lines=5, value=input_value, label="Input Text")
#             sub_btn = gr.Button("Submit")
#         output = gr.Dataframe(row_count = (3, "dynamic"), col_count=(2, "fixed"), headers=["Entities Found","Entity Types"])
#     gr.Markdown(
#                 """
#                 <p style='text-align: center;'>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:letstalk@pragnakalp.com"> letstalk@pragnakalp.com </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/>
#                 <b>Developed by</b> : <a href="https://www.pragnakalp.com" target="_blank">Pragnakalp Techlabs </a></p>
#                 """)
                
#     event = sub_btn.click(generate_emotion, inputs=input, outputs=output)
# demo.launch()

demo = gr.Interface(
    generate_ner,
    input,
    output,
    title="Named Entity Recognition Using BERT",
    css=".gradio-container {background-color: lightgray}  #inp_div {background-color: #7FB3D5;",
    article="""<p style='text-align: center;'>Feel free to give us your <a href="https://www.pragnakalp.com/contact/" target="_blank">feedback</a> on this NER demo. 
                For all your Named Entity Recognition related requirements, we are here to help you. Email us your requirement at
                <a href="mailto:letstalk@pragnakalp.com" target="_blank">letstalk@pragnakalp.com</a>. And don't forget to check out more interesting 
                <a href="https://www.pragnakalp.com/services/natural-language-processing-services/" target="_blank">NLP services</a> we are offering.
                    <p style='text-align: center;'>Developed by :<a href="https://www.pragnakalp.com" target="_blank"> Pragnakalp Techlabs</a></p>"""
)
demo.launch()