Spaces:
Runtime error
Runtime error
File size: 5,942 Bytes
1ffe3f3 |
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 |
import streamlit as st
st.set_page_config(page_title="VNU Summarizer", layout="wide")
# Chèn JavaScript để thay đổi tiêu đề ngay lập tức
st.markdown(
"""
<script>
document.title = "VNU Summarizer";
</script>
""",
unsafe_allow_html=True
)
from summarization import MultiDocSummarizationAPI
import fitz
from docx import Document
# Cấu hình tiêu đề trang ngay từ đầu
# Ẩn footer "Made with Streamlit"
hide_streamlit_style = """
<style>
#MainMenu {visibility: hidden;}
footer {visibility: hidden;}
</style>
"""
st.markdown(hide_streamlit_style, unsafe_allow_html=True)
st.image("./Logo_UET.png", width=150)
def extract_text_from_pdf(uploaded_file):
pdf_text = ""
try:
with fitz.open(stream=uploaded_file.read(), filetype="pdf") as doc:
for page in doc:
pdf_text += page.get_text("text") + "\n"
except Exception as e:
st.error(f"Lỗi khi xử lý PDF: {e}")
return pdf_text
def extract_text_from_docx(uploaded_file):
try:
doc = Document(uploaded_file)
return "\n".join([para.text for para in doc.paragraphs])
except Exception as e:
st.error(f"Lỗi khi xử lý DOCX: {e}")
return ""
def add_text_area():
st.session_state.additional_texts.append("")
def remove_text_area(index):
st.session_state.additional_texts.pop(index)
if "show_summary" not in st.session_state:
st.session_state.show_summary = False
if "additional_texts" not in st.session_state:
st.session_state.additional_texts = []
st.markdown("<h1>Hệ thống tóm tắt đa văn bản tiếng Việt</h1>", unsafe_allow_html=True)
col1, col2 = st.columns([3, 1])
with col1:
st.markdown("### ✍️ Nhập văn bản")
input_method = st.radio("Phương thức nhập liệu:", ["Nhập văn bản", "Kéo thả tệp"], horizontal=True)
texts = []
if input_method == "Nhập văn bản":
if st.button("➕ Thêm vùng nhập văn bản"):
add_text_area()
for i, text in enumerate(st.session_state.additional_texts):
with st.expander(f"📌 Văn bản {i + 1}", expanded=True):
col_expander = st.columns([13, 0.5])
with col_expander[0]:
updated_text = st.text_area("", text, height=200, key=f"text_{i}")
st.session_state.additional_texts[i] = updated_text
with col_expander[1]:
if st.button("🗑", key=f"delete_{i}", help="Xóa văn bản"):
remove_text_area(i)
st.experimental_rerun()
texts.append(st.session_state.additional_texts[i])
else:
uploaded_files = st.file_uploader(
"📂 Kéo thả tệp văn bản:",
type=["txt", "pdf", "docx"],
accept_multiple_files=True
)
if uploaded_files:
for uploaded_file in uploaded_files:
all_texts = ""
if uploaded_file.type == "text/plain":
all_texts = uploaded_file.getvalue().decode("utf-8")
elif uploaded_file.type == "application/pdf":
all_texts = extract_text_from_pdf(uploaded_file)
elif uploaded_file.type == "application/vnd.openxmlformats-officedocument.wordprocessingml.document":
all_texts = extract_text_from_docx(uploaded_file)
texts.append(all_texts)
# st.markdown("### 🎯 Nhập tóm tắt mẫu")
# golden_ext = st.text_area("📑 Tóm tắt tóm lược", height=100)
# golden_abs = st.text_area("📝 Tóm tắt trích rút", height=100)
with col2:
st.markdown("### ⚙️ Tuỳ chọn tóm tắt")
summary_method = st.selectbox("Chọn phương thức rút gọn:", ["Số câu", "Tỷ lệ"])
if summary_method == "Tỷ lệ":
compress_ratio = st.slider("🔽 Chọn tỷ lệ rút gọn:", 0, 50, 15, step=1, format="%d%%") / 100
else:
compress_ratio = st.number_input("🔢 Số câu đầu ra:", min_value=1, max_value=20, value=5, step=1)
if st.button("🚀 Tóm tắt") and any(texts):
summary_results = MultiDocSummarizationAPI(
texts, compress_ratio#, golden_ext=golden_ext or None, golden_abs=golden_abs or None
)
st.session_state.extractive_summary = summary_results.get("extractive_summ", "Không có kết quả")
st.session_state.abstractive_summary = summary_results.get("abstractive_summ", "Không có kết quả")
st.session_state.rouge_ext = summary_results.get("score_ext", ("None", "None", "None"))
st.session_state.rouge_abs = summary_results.get("score_abs", ("None", "None", "None"))
st.session_state.show_summary = True
st.experimental_rerun()
if st.session_state.get("show_summary", False):
col_summary = st.columns(2)
rouge_ext = st.session_state.rouge_ext if st.session_state.rouge_ext is not None else ("None", "None", "None")
rouge_abs = st.session_state.rouge_abs if st.session_state.rouge_abs is not None else ("None", "None", "None")
with col_summary[0]:
st.markdown("### 📑 Tóm tắt tóm lược")
# st.markdown(f"**🔹 ROUGE 1:** {rouge_ext[0]}")
# st.markdown(f"**🔹 ROUGE 2:** {rouge_ext[1]}")
# st.markdown(f"**🔹 ROUGE L:** {rouge_ext[2]}")
st.text_area("📑 Tóm tắt trích lược:", st.session_state.extractive_summary, height=250)
# with col_summary[1]:
# st.markdown("### 📝 Tóm tắt trích rút")
# st.markdown(f"**🔹 ROUGE 1:** {rouge_abs[0]}")
# st.markdown(f"**🔹 ROUGE 2:** {rouge_abs[1]}")
# st.markdown(f"**🔹 ROUGE L:** {rouge_abs[2]}")
# st.text_area("Văn bản tóm tắt trích rút:", st.session_state.abstractive_summary, height=250)
|