|
|
import tensorflow as tf
|
|
|
from tensorflow import keras
|
|
|
import numpy as np
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
model_path = "my_rnn_model_imdb.keras"
|
|
|
try:
|
|
|
loaded_model = keras.models.load_model(model_path)
|
|
|
print(f"'{model_path}' ๋ชจ๋ธ์ ์ฑ๊ณต์ ์ผ๋ก ๋ถ๋ฌ์์ต๋๋ค.")
|
|
|
except Exception as e:
|
|
|
print(f"๋ชจ๋ธ ๋ก๋ฉ ์ค ์ค๋ฅ ๋ฐ์: {e}")
|
|
|
exit()
|
|
|
|
|
|
|
|
|
word_index = keras.datasets.imdb.get_word_index()
|
|
|
|
|
|
|
|
|
word_index = {k: (v + 3) for k, v in word_index.items()}
|
|
|
word_index["<pad>"] = 0
|
|
|
word_index["<start>"] = 1
|
|
|
word_index["<unk>"] = 2
|
|
|
word_index["<unused>"] = 3
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MAX_LEN = 256
|
|
|
|
|
|
def preprocess_text(text):
|
|
|
"""
|
|
|
์๋ก์ด ํ
์คํธ๋ฅผ ๋ชจ๋ธ ์
๋ ฅ ํ์์ ๋ง๊ฒ ์ ์ฒ๋ฆฌํฉ๋๋ค.
|
|
|
"""
|
|
|
|
|
|
tokens = [word_index.get(word, 2) for word in text.lower().split()]
|
|
|
|
|
|
|
|
|
tokens = [word_index["<start>"]] + tokens
|
|
|
|
|
|
|
|
|
padded_sequence = keras.preprocessing.sequence.pad_sequences(
|
|
|
[tokens], maxlen=MAX_LEN, padding='pre'
|
|
|
)
|
|
|
|
|
|
return padded_sequence
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("\n์ํ ๋ฆฌ๋ทฐ ๊ฐ์ฑ ๋ถ์๊ธฐ (์ข
๋ฃํ๋ ค๋ฉด 'exit'๋ฅผ ์
๋ ฅํ์ธ์)")
|
|
|
print("-" * 50)
|
|
|
|
|
|
while True:
|
|
|
|
|
|
review_text = input("๋ฆฌ๋ทฐ๋ฅผ ์
๋ ฅํ์ธ์: ")
|
|
|
|
|
|
if review_text.lower() == 'exit':
|
|
|
print("ํ๋ก๊ทธ๋จ์ ์ข
๋ฃํฉ๋๋ค.")
|
|
|
break
|
|
|
|
|
|
if not review_text.strip():
|
|
|
print("์
๋ ฅ๋ ๋ด์ฉ์ด ์์ต๋๋ค. ๋ค์ ์๋ํด์ฃผ์ธ์.")
|
|
|
continue
|
|
|
|
|
|
|
|
|
processed_input = preprocess_text(review_text)
|
|
|
|
|
|
|
|
|
prediction = loaded_model.predict(processed_input)
|
|
|
|
|
|
|
|
|
score = prediction[0][0]
|
|
|
sentiment = "๊ธ์ (Positive)" if score > 0.5 else "๋ถ์ (Negative)"
|
|
|
|
|
|
print(f"๊ฒฐ๊ณผ: {sentiment} (์์ธก ์ ์: {score:.4f})")
|
|
|
print("-" * 50) |