Spaces:
Sleeping
Sleeping
import gradio as gr | |
import numpy as np | |
from tensorflow.keras.models import load_model | |
from tensorflow.keras.preprocessing.sequence import pad_sequences | |
from sklearn.preprocessing import StandardScaler | |
import json | |
import re | |
from konlpy.tag import Okt | |
from tensorflow.keras.preprocessing.text import tokenizer_from_json | |
import pickle | |
import os | |
import logging | |
# λ‘κ·Έ μ€μ | |
logging.basicConfig(filename='app.log', level=logging.DEBUG, format='%(asctime)s:%(levelname)s:%(message)s') | |
# νκ²½ λ³μ μ€μ | |
os.environ['JAVA_HOME'] = '/usr/lib/jvm/java-11-openjdk-amd64' | |
os.environ['PATH'] = os.environ['JAVA_HOME'] + '/bin:' + os.environ['PATH'] | |
# λͺ¨λΈ λ° ν ν¬λμ΄μ νμΌ λ‘λ | |
try: | |
model = load_model('deep_learning_model(okt_drop).h5', compile=False) | |
logging.info("Model loaded successfully.") | |
with open('tokenizer(okt_drop).json', 'r', encoding='utf-8') as f: | |
tokenizer_data = f.read() | |
tokenizer = tokenizer_from_json(tokenizer_data) | |
logging.info("Tokenizer loaded successfully.") | |
with open('scaler.pkl', 'rb') as f: | |
scaler = pickle.load(f) | |
logging.info("Scaler loaded successfully.") | |
except Exception as e: | |
logging.error("Error loading model, tokenizer, or scaler: %s", str(e)) | |
raise e | |
def calculate_sentence_stats(paragraph): | |
paragraph = re.sub(r'\.{2,}', '.', paragraph) | |
sentences = re.split(r'[.!?]', paragraph) | |
sentence_lengths = [len(s.strip()) for s in sentences if s.strip()] | |
sentence_count = len(sentence_lengths) | |
average_length = sum(sentence_lengths) / len(sentence_lengths) if sentence_lengths else 0 | |
return sentence_count, average_length | |
def process_text(text): | |
try: | |
okt = Okt() | |
texts = ' '.join(okt.nouns(text)) | |
sequences = tokenizer.texts_to_sequences([texts]) | |
max_len = 301 | |
X = pad_sequences(sequences, maxlen=max_len) | |
return X | |
except Exception as e: | |
logging.error("Error processing text: %s", str(e)) | |
raise e | |
def predict_text(text, grade): | |
try: | |
X = process_text(text) | |
sentence_count, sentence_average = calculate_sentence_stats(text) | |
length = len(text) | |
emoticon = 0 | |
numeric_features = np.array([[int(grade), length, emoticon, sentence_count, sentence_average]]) | |
numeric_features = scaler.transform(numeric_features) | |
prediction = model.predict([X, numeric_features]) | |
predicted_label = 'μΈκ³΅μ§λ₯μ΄ μμ±ν λ μκ°μλ¬Έμ λλ€.' if prediction[0][0] > 0.5 else 'μ¬λμ΄ μμ±ν λ μκ°μλ¬Έμ λλ€.' | |
return predicted_label | |
except Exception as e: | |
logging.error("Error predicting text: %s", str(e)) | |
raise e | |
iface = gr.Interface( | |
fn=predict_text, | |
inputs=[gr.Textbox(lines=10, placeholder="Enter Text Here..."), gr.Textbox(label="Grade")], | |
outputs="text", | |
title="λ μκ°μλ¬Έ λΆμκΈ°", | |
description="μ΄ λ μκ°μλ¬Έμ΄ νμμ μν΄ μμ±λμλμ§, μΈκ³΅μ§λ₯μ μν΄ μμ±λμλμ§ λΆμν©λλ€." | |
) | |
iface.launch(debug=True) | |