|
import gradio as gr |
|
import pandas as pd |
|
from utils import get_textrank_summary |
|
|
|
def textrank_summarizer(text, level, max_tokens, verbose): |
|
summary, verbose_info = get_textrank_summary(text=text, level=level, token_count=max_tokens, verbose=verbose) |
|
return summary, verbose_info |
|
|
|
def option2_summarizer(text, max_tokens): |
|
return f"[Option2 Summary]\n{text[:max_tokens]}...", "" |
|
|
|
def option3_summarizer(text, max_tokens): |
|
return f"[Option3 Summary]\n{text[:max_tokens]}...", "" |
|
|
|
def summarize_text(text, method, level, max_tokens, verbose): |
|
if method == "TextRank": |
|
return textrank_summarizer(text, level, max_tokens, verbose) |
|
elif method == "Option2": |
|
return option2_summarizer(text, max_tokens) |
|
elif method == "Option3": |
|
return option3_summarizer(text, max_tokens) |
|
return "Invalid method selected.", "Invalid method selected." |
|
|
|
def process_file(file, method, level, max_tokens, verbose): |
|
try: |
|
if file.name.endswith(".csv"): |
|
df = pd.read_csv(file.name) |
|
elif file.name.endswith(".xlsx"): |
|
df = pd.read_excel(file.name) |
|
else: |
|
return "Unsupported file format.", "" |
|
|
|
summaries = [] |
|
logs = [] |
|
for column in df.columns: |
|
column_summary, verbose_log = summarize_text( |
|
" ".join(df[column].astype(str).tolist()), |
|
method, level, max_tokens, verbose |
|
) |
|
summaries.append({"Column": column, "Summary": column_summary}) |
|
logs.append(f"Column: {column}\n{verbose_log}") |
|
|
|
return pd.DataFrame(summaries), "\n\n".join(logs) |
|
except Exception as e: |
|
return f"Error processing file: {e}", "" |
|
|
|
with gr.Blocks() as demo: |
|
with gr.Tabs(): |
|
with gr.TabItem("Text Summarization"): |
|
text_input = gr.TextArea(label="Text", placeholder="Enter your text here...", lines=5) |
|
summarization_method = gr.Radio([ |
|
"TextRank", "Option2", "Option3" |
|
], value="TextRank", label="Summarization Method") |
|
level_selector = gr.Radio([ |
|
"sentence", "paragraph" |
|
], value="sentence", label="Level", visible=True) |
|
max_tokens_slider = gr.Slider(0, 4096, value=100, label="Max Tokens") |
|
verbose_checkbox = gr.Checkbox(label="Verbose Mode", value=False) |
|
summarize_button = gr.Button("Summarize", interactive=False) |
|
output = gr.TextArea(label="Summary", interactive=False, lines=5, show_copy_button=True) |
|
verbose_output = gr.Markdown(label="Verbose Logs") |
|
|
|
def toggle_level_selector(method): |
|
return gr.update(visible=(method == "TextRank")) |
|
|
|
def toggle_summarize_button(method): |
|
return gr.update(interactive=(len(method) != 0)) |
|
|
|
def toggle_verbose_logs(verbose_mode): |
|
return gr.update(visible=verbose_mode) |
|
|
|
|
|
summarization_method.change(toggle_level_selector, inputs=summarization_method, outputs=level_selector) |
|
text_input.change(toggle_summarize_button, inputs=text_input, outputs=summarize_button) |
|
verbose_checkbox.change(toggle_verbose_logs, inputs=verbose_checkbox, outputs=verbose_output) |
|
|
|
summarize_button.click( |
|
summarize_text, |
|
inputs=[text_input, summarization_method, level_selector, max_tokens_slider, verbose_checkbox], |
|
outputs=[output, verbose_output], |
|
show_progress=True |
|
) |
|
|
|
with gr.TabItem("File Processing"): |
|
file_input = gr.File(label="Upload File (xlsx, csv)") |
|
summarization_method_file = gr.Radio([ |
|
"TextRank", "Option2", "Option3" |
|
], value="TextRank", label="Summarization Method") |
|
level_selector_file = gr.Radio([ |
|
"sentence", "paragraph" |
|
], value="sentence", label="Level", visible=True) |
|
max_tokens_slider_file = gr.Slider(0, 4096, value=100, label="Max Tokens") |
|
verbose_checkbox_file = gr.Checkbox(label="Verbose Mode", value=False) |
|
load_button = gr.Button("Load and Process") |
|
file_output = gr.Dataframe() |
|
verbose_file_output = gr.TextArea(label="Verbose Logs", interactive=False, lines=10) |
|
|
|
def toggle_level_selector_file(method): |
|
return gr.update(visible=(method == "TextRank")) |
|
|
|
summarization_method_file.change(toggle_level_selector_file, inputs=summarization_method_file, outputs=level_selector_file) |
|
|
|
load_button.click( |
|
process_file, |
|
inputs=[file_input, summarization_method_file, level_selector_file, max_tokens_slider_file, verbose_checkbox_file], |
|
outputs=[file_output, verbose_file_output], |
|
show_progress=True |
|
) |
|
|
|
demo.launch() |
|
|