File size: 5,362 Bytes
56266ec
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import tensorflow as tf
import numpy as np
from keras.models import load_model
from tensorflow.keras.preprocessing.text import Tokenizer
import pickle
from tensorflow.keras.preprocessing.sequence import pad_sequences
import os
from pathlib import Path
import pandas as pd
import plotly.express as px

#Load tokenizer
fp = Path(__file__).with_name('tokenizer.pkl')
with open(fp,mode="rb") as f:
    tokenizer = pickle.load(f)

#Load LSTM
fp = Path(__file__).with_name('lstm_model.h5')
LSTM_model = tf.keras.models.load_model(fp, compile=True)

#Load GRU
fp = Path(__file__).with_name('gru_model.h5')
GRU_model = load_model(fp)


def tokenizer_pad(tokenizer,comment_text,max_length=200):
   
    comment_text = [comment_text]
    tokenized_text = tokenizer.texts_to_sequences(comment_text)

    padded_sequences = pad_sequences(sequences=tokenized_text,maxlen=max_length,padding="post",truncating="post")

    return padded_sequences

def LSTM_predict(x):
    x = tokenizer_pad(tokenizer=tokenizer,comment_text=x)

    pred_proba = LSTM_model.predict(x)[0]

    pred_proba = [round(i,2) for i in pred_proba]

    #print(pred_proba)

    return pred_proba

def GRU_predict(x):
    x = tokenizer_pad(tokenizer=tokenizer,comment_text=x)

    
    pred_proba = GRU_model.predict(x)[0]

    pred_proba = [round(i,2) for i in pred_proba]

    #print(pred_proba)

    return pred_proba

def plot(result):
  label = ['độc hại', 'cực kì độc hại', 'tục tĩu', 'đe dọa', 'xúc phạm', 'thù ghét cá nhân']
  data = pd.DataFrame()
  data['Nhãn'] = label
  data['Điểm'] = result

  #print(data)

  p = px.bar(data, x='Nhãn', y='Điểm', color='Nhãn', range_y=[0, 1] )
  return p
  pass

def judge(x):

  label = ['độc hại', 'cực kì độc hại', 'tục tĩu', 'đe dọa', 'xúc phạm', 'thù ghét cá nhân']
  result = []
  judge_result = []

  lstm_pred = LSTM_predict(x)
  gru_pred = GRU_predict(x)

  #print(result)
  
  return_result = 'Result'
  result_lstm = np.round(lstm_pred, 2)
  result_gru = np.round(gru_pred, 2)
  for i in range(6):
    result.append((result_lstm[i]+result_gru[i])/2)
  
  final_result = np.round(result, 2)

  #print(final_result)
  return_result += '\nMô hình LSTM\n'
  return_result += f"{result_lstm}\n"
  # for i in range(6):
  #   if result_lstm[i]>=0 and result_lstm[i]<0.1:
  #     return_result += "Tính {} là không có\n".format(label[i])
  #   if result_lstm[i]>=0.1 and result_lstm[i]<0.5:
  #     return_result += "Tính {} ở mức không rõ ràng, không thể xác định chính xác\n".format(label[i])
  #   if result_lstm[i]>=0.5 and result_lstm[i]<0.8:
  #     return_result += "Tính {} ở mức rõ ràng, cần xem xét\n".format(label[i])
  #   if result_lstm[i]>=0.8:
  #     return_result += "Tính {} ở mức nghiêm trọng, yêu cầu chấn chỉnh\n".format(label[i])


  return_result += '\nMô hình GRU\n'
  return_result += f"{result_gru}\n"
  # for i in range(6):
    # if result_gru[i]>=0 and result_gru[i]<0.1:
    #   return_result += "Tính {} là không có\n".format(label[i])
    # if result_gru[i]>=0.1 and result_gru[i]<0.5:
    #   return_result += "Tính {} ở mức không rõ ràng, không thể xác định chính xác\n".format(label[i])
    # if result_gru[i]>=0.5 and result_gru[i]<0.8:
    #   return_result += "Tính {} ở mức rõ ràng, cần xem xét\n".format(label[i])
    # if result_gru[i]>=0.8:
    #   return_result += "Tính {} ở mức nghiêm trọng, yêu cầu chấn chỉnh\n".format(label[i])


  another_result = ''
  another_result += "\nTổng quan kết quả trung bình:\n"
  another_result += f"{final_result}\n"

  for i in range(6):
    if final_result[i]>=0 and final_result[i]<0.1:
      another_result += "Tính {} là không có\n".format(label[i])
    if final_result[i]>=0.1 and final_result[i]<0.5:
      another_result += "Tính {} ở mức không rõ ràng, không thể xác định chính xác\n".format(label[i])
    if final_result[i]>=0.5 and final_result[i]<0.8:
      another_result += "Tính {} ở mức rõ ràng, cần xem xét\n".format(label[i])
    if final_result[i]>=0.8:
      another_result += "Tính {} ở mức nghiêm trọng, yêu cầu chấn chỉnh\n".format(label[i])

  another_result += "\nKết luận:\n"
  if max(final_result)>=0 and max(final_result)<0.1:
    another_result += "Ngôn ngữ phù hợp mọi lứa tuổi.\n"
  if max(final_result)>=0.1 and max(final_result)<0.5:
    another_result += "Ngôn ngữ cần được kiểm tra lại.\n"
  if max(final_result)>=0.5 and max(final_result)<0.8:
    another_result += "Ngôn ngữ không phù hợp, cần xem xét lại.\n"
  if max(final_result)>=0.8:
    another_result += "Ngôn ngữ vi phạm tiêu chuẩn cộng đồng nghiêm trọng, yêu cầu chấn chỉnh.\n"

  p = plot(final_result)
  return (return_result)


# if __name__ == "__main__":
#   #  print("Loading")
#   #  while(True):
#   #   string = input("\nMời nhập văn bản: ")
#   #   os.system('cls')
#   #   print(f"Văn bản đã nhập: {string}")
#   #   judge(string)
#   interface = gr.Interface(fn=judge,
#                          inputs=gr.Textbox(lines=2, placeholder='Please write something', label="Input Text"),
#                         outputs=['text','plot','text'])
#   interface.launch()