if / app.py
galihhermawan's picture
Update app.py
6356014 verified
import sys
import subprocess
# Memeriksa dan menginstal sentencepiece jika belum terinstal
try:
import sentencepiece
except ImportError:
subprocess.check_call([sys.executable, "-m", "pip", "install", "sentencepiece"])
import sentencepiece
from transformers import T5ForConditionalGeneration, T5Tokenizer
import gradio as gr
import re
# Memuat model dan tokenizer T5
model_name = "t5-base" # Anda bisa mengganti dengan "t5-large" jika diperlukan
tokenizer = T5Tokenizer.from_pretrained(model_name)
model = T5ForConditionalGeneration.from_pretrained(model_name)
def extract_seminar_info(chunk):
# Menyusun prompt yang spesifik untuk ekstraksi informasi
prompt = (
"Ekstrak informasi berikut dari jadwal seminar berikut:\n"
"- NO\n"
"- NIM\n"
"- Nama\n"
"- Judul Seminar\n"
"- Reviewer & Pembimbing\n"
"- Waktu\n\n"
f"{chunk}"
)
# Tokenisasi input dengan pemotongan jika terlalu panjang
inputs = tokenizer.encode(prompt, return_tensors="pt", max_length=512, truncation=True)
# Menghasilkan respons dengan parameter yang diatur
outputs = model.generate(
inputs,
max_length=150,
num_beams=5,
early_stopping=True
)
# Mendekode respons
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
return response
def process_file():
# Membaca isi file seminar.txt
with open('seminar.txt', 'r', encoding='utf-8') as file:
content = file.read()
# Menghapus karakter yang tidak perlu dan memperbaiki spasi
content = re.sub(r'\n+', ' ', content) # Mengganti garis baru yang berlebihan dengan spasi
content = re.sub(r'\s+', ' ', content) # Mengganti spasi yang berlebihan dengan satu spasi
# Membagi konten berdasarkan nomor seminar (NO)
seminar_entries = re.split(r'\b\d{1,3}\s+\d{6}\s+', content)
# Mengambil semua nomor seminar yang ditemukan
no_pattern = r'\b(\d{1,3})\s+\d{6}\s+'
nos = re.findall(no_pattern, content)
seminar_info = ""
for no, entry in zip(nos, seminar_entries[1:]):
# Menambahkan nomor seminar ke entri
entry = f"{no} {entry}"
# Ekstrak informasi menggunakan model
info = extract_seminar_info(entry)
seminar_info += f"{info}\n\n"
return seminar_info
# Membuat antarmuka Gradio
iface = gr.Interface(
fn=process_file,
inputs=None, # Tidak ada input karena file sudah ada di direktori
outputs="text",
title="Ekstrak Informasi Seminar",
description="Aplikasi ini membaca file seminar.txt dan mengekstrak informasi seperti NO, NIM, Nama, Judul Seminar, Reviewer & Pembimbing, dan Waktu."
)
# Menjalankan antarmuka
iface.launch()