File size: 4,300 Bytes
64c5f29
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# Import packages:

import numpy as np
import matplotlib.pyplot as plt
import re
# tensorflow imports:
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import losses
from tensorflow.keras import layers
from tensorflow.keras.layers.experimental import preprocessing
from tensorflow.keras.optimizers import RMSprop
# # keras imports:
from keras.models import Model
from keras.layers import LSTM, Activation, Dense, Dropout, Input, Embedding, RepeatVector, TimeDistributed
from keras.preprocessing.text import Tokenizer
from keras_preprocessing import sequence
from tensorflow.keras.utils import to_categorical
from keras.callbacks import EarlyStopping
from keras.models import Sequential
from keras import layers
from keras.backend import clear_session
import pickle
import gradio as gr
import yake
import spacy
from spacy import displacy
import streamlit as st
import spacy_streamlit
nlp = spacy.load('en_core_web_sm')

kw_extractor = yake.KeywordExtractor()
custom_kw_extractor = yake.KeywordExtractor(lan="en", n=2, dedupLim=0.2, top=10, features=None)

max_words = 2000
max_len = 111

# load the model from disk
filename = 'resil_lstm_model.sav'
lmodel = pickle.load(open(filename, 'rb'))

# load the model from disk
filename = 'tokenizer.pickle'
tok = pickle.load(open(filename, 'rb'))

def process_final_text(text):
    X_test = str(text).lower()
    l = []
    l.append(X_test)
    test_sequences = tok.texts_to_sequences(l)
    test_sequences_matrix = sequence.pad_sequences(test_sequences,maxlen=max_len)
    lstm_prob = lmodel.predict(test_sequences_matrix.tolist()).flatten()
    lstm_pred = np.where(lstm_prob>=0.5,1,0)
    
    # Get Keywords:
    keywords = custom_kw_extractor.extract_keywords(X_test)
    letter = []
    score = []
    for i in keywords:
        if i[1]>0.4:
            a = "+++"
        elif (i[1]<=0.4) and (i[1]>0.1):
            a = "++"
        elif (i[1]<=0.1) and (i[1]>0.01):
            a = "+"
        else: 
            a = "NA"
    
        letter.append(i[0])
        score.append(a)
    
    keywords = [(letter[i], score[i]) for i in range(0, len(letter))]
    
    # Get NER:
        # NER: 
    doc = nlp(text)
    sp_html = displacy.render(doc, style="ent", page=True, jupyter=False)
    NER = (
        ""
        + sp_html
        + ""
    )
    return {"Resilience": float(lstm_prob[0]), "Non-Resilience": 1-float(lstm_prob[0])},keywords,NER
    
def main(prob1):
    text = str(prob1)
    obj = process_final_text(text)
    return obj[0],obj[1],obj[2]
    
title = "Welcome to **ResText** πŸͺ"
description1 = """
Just add your text and hit Create & Analyze ✨   
"""

description2 = """
Although encouraged, you don't have to fill all the boxes. Just try the ones that matter to you. After getting your first score, modify your answers and hit Create & Analyze again 🀞
""" 

with gr.Blocks(title=title) as demo:
    gr.Markdown(f"## {title}")
    gr.Markdown("""![marketing](file/marketing.jpg)""")
    gr.Markdown(description1)
    gr.Markdown("""---""")
    gr.Markdown(description2)
    gr.Markdown("""---""")
    prob1 = gr.Textbox(label="Enter Your Text Here:",lines=2, placeholder="Type it here ...")
    submit_btn = gr.Button("Create & Analyze")
    #text = gr.Textbox(label="Text:",lines=2, placeholder="Please enter text here ...")
    #submit_btn2 = gr.Button("Analyze")

    with gr.Column(visible=True) as output_col:
        label = gr.Label(label = "Predicted Label")
        impplot = gr.HighlightedText(label="Important Words", combine_adjacent=False).style(
        color_map={"+++": "royalblue","++": "cornflowerblue",
         "+": "lightsteelblue", "NA":"white"})
        NER = gr.HTML(label = 'NER:')

    submit_btn.click(
        main,
        [prob1],
        [label,impplot,NER], api_name="ResTalk"
    )

    
    
    gr.Markdown("### Click on any of the examples below to see how it works:")
    gr.Examples([["It is difficult to write persuasive product descriptions."], ["Talking to your friends about their problems with drugs and alcohol might not be easy."], ["When experiencing depression, I couldn't get out of bed or focus.", ["Up to 6 million homeless animals enter shelters nationwide every year."]], [prob1], [label,impplot,NER], main, cache_examples=True)
    
demo.launch()