|
|
import gradio as gr |
|
|
from transformers import T5Tokenizer, T5ForConditionalGeneration |
|
|
import torch |
|
|
|
|
|
|
|
|
try: |
|
|
|
|
|
tokenizer = T5Tokenizer.from_pretrained("cahya/t5-base-indonesian-summarization-cased") |
|
|
model = T5ForConditionalGeneration.from_pretrained("cahya/t5-base-indonesian-summarization-cased") |
|
|
|
|
|
|
|
|
device = 0 if torch.cuda.is_available() else -1 |
|
|
if device != -1: |
|
|
model.to(f"cuda:{device}") |
|
|
|
|
|
print("Model dan tokenizer Bahasa Indonesia berhasil dimuat.") |
|
|
except Exception as e: |
|
|
tokenizer = None |
|
|
model = None |
|
|
print(f"Error saat memuat model dan tokenizer: {str(e)}") |
|
|
|
|
|
|
|
|
def summarize_text_simple(text_input, min_length_val=30, max_length_val=150): |
|
|
|
|
|
if tokenizer is None or model is None: |
|
|
return "β Error: Model ringkasan gagal dimuat. Coba lagi nanti." |
|
|
|
|
|
if not text_input.strip(): |
|
|
return "β οΈ Mohon masukkan teks yang ingin diringkas!" |
|
|
|
|
|
|
|
|
if min_length_val >= max_length_val: |
|
|
return "β οΈ Panjang minimum harus lebih kecil dari panjang maksimum!" |
|
|
if min_length_val <= 0 or max_length_val <= 0: |
|
|
return "β οΈ Panjang tidak boleh nol atau negatif!" |
|
|
|
|
|
try: |
|
|
|
|
|
|
|
|
input_ids = tokenizer.encode("summarize: " + text_input, |
|
|
return_tensors="pt", |
|
|
max_length=512, |
|
|
truncation=True) |
|
|
|
|
|
|
|
|
if device != -1: |
|
|
input_ids = input_ids.to(f"cuda:{device}") |
|
|
|
|
|
|
|
|
summary_ids = model.generate( |
|
|
input_ids, |
|
|
min_length=int(min_length_val), |
|
|
max_length=int(max_length_val), |
|
|
num_beams=4, |
|
|
early_stopping=True |
|
|
) |
|
|
|
|
|
|
|
|
summarized_text = tokenizer.decode(summary_ids[0], skip_special_tokens=True) |
|
|
|
|
|
result_message = f""" |
|
|
<h3>Teks Ringkasan Anda:</h3> |
|
|
<p>{summarized_text}</p> |
|
|
""" |
|
|
|
|
|
return result_message |
|
|
|
|
|
except Exception as e: |
|
|
return f"β Terjadi kesalahan saat meringkas: {str(e)}" |
|
|
|
|
|
|
|
|
with gr.Blocks(title="Aplikasi Ringkasan Teks Sederhana (ID)") as demo: |
|
|
gr.Markdown("# π Aplikasi Ringkasan Teks Sederhana (Bahasa Indonesia)") |
|
|
gr.Markdown("Masukkan teks panjang berbahasa Indonesia di bawah ini untuk mendapatkan versi ringkasnya.") |
|
|
|
|
|
with gr.Row(): |
|
|
text_input = gr.Textbox( |
|
|
label="Teks Asli (Bahasa Indonesia)", |
|
|
placeholder="Masukkan teks panjang berbahasa Indonesia yang ingin Anda ringkas di sini...", |
|
|
lines=10 |
|
|
) |
|
|
|
|
|
with gr.Row(): |
|
|
min_length_slider = gr.Slider( |
|
|
minimum=10, |
|
|
maximum=100, |
|
|
value=30, |
|
|
step=1, |
|
|
label="Panjang Ringkasan Minimum" |
|
|
) |
|
|
max_length_slider = gr.Slider( |
|
|
minimum=50, |
|
|
maximum=200, |
|
|
value=80, |
|
|
step=1, |
|
|
label="Panjang Ringkasan Maksimum" |
|
|
) |
|
|
|
|
|
summarize_btn = gr.Button("β¨ Ringkas Sekarang") |
|
|
|
|
|
summary_output = gr.HTML(label="Hasil Ringkasan") |
|
|
|
|
|
|
|
|
summarize_btn.click( |
|
|
fn=summarize_text_simple, |
|
|
inputs=[text_input, min_length_slider, max_length_slider], |
|
|
outputs=summary_output |
|
|
) |
|
|
|
|
|
gr.Markdown(""" |
|
|
--- |
|
|
<div style='text-align: center; margin-top: 20px;'> |
|
|
<p>Didukung oleh Hugging Face Transformers (Model: cahya/t5-base-indonesian-summarization-cased) dan Gradio.</p> |
|
|
</div> |
|
|
""") |
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
demo.launch() |