|
from util import * |
|
import gradio as gr |
|
from deepmultilingualpunctuation import PunctuationModel |
|
|
|
cp_aug = 'minnehwg/finetune-newwiki-summarization-ver-augmented' |
|
|
|
|
|
def get_model(cp): |
|
checkpoint = cp |
|
tokenizer, model = load_model(checkpoint) |
|
return tokenizer, model |
|
|
|
tokenizer, model = get_model(cp_aug) |
|
restore_model = PunctuationModel() |
|
|
|
def execute_func(url, model, tokenizer, punc_model): |
|
trans, sub = get_subtitles(url) |
|
sub = restore_punctuation(sub, punc_model) |
|
vie_sub = translate_long(sub) |
|
vie_sub = processed(vie_sub) |
|
chunks = split_into_chunks(vie_sub, 700, 2) |
|
sum_para = [] |
|
for i in chunks: |
|
tmp = summarize(i, model, tokenizer, num_beams=3) |
|
sum_para.append(tmp) |
|
suma = ''.join(sum_para) |
|
del sub, vie_sub, sum_para, chunks |
|
suma = post_processing(suma) |
|
re = display(suma) |
|
return re |
|
|
|
def generate_summary(url): |
|
results = execute_func(url, model, tokenizer, restore_model) |
|
summary = "\n".join(results) |
|
return summary |
|
|
|
def generate_summary_and_video(url): |
|
summary = generate_summary(url) |
|
summary_html = summary.replace("\n", "<br>") |
|
try: |
|
video_id = url.split("v=")[1].split("&")[0] |
|
iframe = f'<iframe width="300" height="200" src="https://www.youtube.com/embed/{video_id}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>' |
|
return f"{iframe}<br><br>Những ý chính trong video:<br><br>{summary_html}" |
|
except IndexError: |
|
return f"**Summary:**\n{summary}\n\nInvalid YouTube URL for video display." |
|
|
|
css = """ |
|
.output-html { |
|
font-size: 40px; |
|
} |
|
""" |
|
|
|
demo = gr.Interface( |
|
fn=generate_summary_and_video, |
|
inputs=gr.Textbox(lines=2, placeholder="Enter URL..."), |
|
outputs=gr.HTML(label="Results"), |
|
title="Summarizer", |
|
description="Enter the URL to display the YouTube video and summarize the content.", |
|
css=css |
|
) |
|
|
|
|
|
demo.launch(server_name="0.0.0.0", server_port=7860, share=True) |