Spaces:
Running
Running
update app
Browse files
app.py
CHANGED
@@ -1,12 +1,12 @@
|
|
1 |
# app.py
|
2 |
"""
|
3 |
-
Gradio App for Smart Web Analyzer Plus
|
4 |
|
5 |
Key Features:
|
6 |
- Accepts a URL
|
7 |
- Lets users select analysis modes (Clean Text, Summarization, Sentiment, Topic)
|
8 |
-
- Fetches and processes content
|
9 |
-
- Displays
|
10 |
- Includes example URLs
|
11 |
"""
|
12 |
|
@@ -29,50 +29,67 @@ def analyze_url(url, modes):
|
|
29 |
modes (list): list of selected modes
|
30 |
|
31 |
Returns:
|
32 |
-
|
33 |
"""
|
34 |
-
|
|
|
|
|
|
|
|
|
35 |
|
36 |
-
#
|
37 |
try:
|
38 |
html_content = fetch_web_content(url)
|
39 |
except Exception as e:
|
40 |
-
|
|
|
|
|
41 |
|
42 |
-
# Clean the
|
43 |
cleaned = clean_text(html_content)
|
44 |
|
45 |
-
#
|
46 |
if "Clean Text Preview" in modes:
|
47 |
-
|
48 |
|
|
|
49 |
if "Summarization" in modes:
|
50 |
-
|
|
|
|
|
|
|
|
|
|
|
51 |
|
|
|
52 |
if "Sentiment Analysis" in modes:
|
53 |
-
|
|
|
|
|
|
|
|
|
54 |
|
|
|
55 |
if "Topic Detection" in modes:
|
56 |
topics = detect_topic(cleaned)
|
|
|
57 |
if isinstance(topics, dict) and "error" in topics:
|
58 |
-
|
59 |
else:
|
60 |
-
# Format
|
61 |
-
|
62 |
-
|
63 |
-
|
|
|
64 |
|
65 |
-
return
|
66 |
|
67 |
-
# Build Gradio Interface
|
68 |
def build_app():
|
69 |
with gr.Blocks(title="Smart Web Analyzer Plus") as demo:
|
70 |
-
gr.Markdown("
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
)
|
75 |
-
|
76 |
with gr.Row():
|
77 |
url_input = gr.Textbox(
|
78 |
label="Enter URL",
|
@@ -84,17 +101,25 @@ def build_app():
|
|
84 |
choices=["Clean Text Preview", "Summarization", "Sentiment Analysis", "Topic Detection"],
|
85 |
value=["Clean Text Preview", "Summarization", "Sentiment Analysis", "Topic Detection"]
|
86 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
87 |
|
88 |
-
output_box = gr.JSON(label="Analysis Results")
|
89 |
-
|
90 |
-
# Button to run analysis
|
91 |
analyze_button = gr.Button("Analyze")
|
92 |
|
93 |
-
#
|
94 |
analyze_button.click(
|
95 |
fn=analyze_url,
|
96 |
inputs=[url_input, mode_selector],
|
97 |
-
outputs=
|
98 |
)
|
99 |
|
100 |
# Example URLs
|
@@ -107,8 +132,9 @@ def build_app():
|
|
107 |
inputs=url_input,
|
108 |
label="Click an example to analyze"
|
109 |
)
|
|
|
110 |
return demo
|
111 |
|
112 |
if __name__ == "__main__":
|
113 |
-
|
114 |
-
|
|
|
1 |
# app.py
|
2 |
"""
|
3 |
+
Gradio App for Smart Web Analyzer Plus - Human-Readable Outputs
|
4 |
|
5 |
Key Features:
|
6 |
- Accepts a URL
|
7 |
- Lets users select analysis modes (Clean Text, Summarization, Sentiment, Topic)
|
8 |
+
- Fetches and processes content (smart_web_analyzer.py)
|
9 |
+
- Displays each result in its own tab for readability
|
10 |
- Includes example URLs
|
11 |
"""
|
12 |
|
|
|
29 |
modes (list): list of selected modes
|
30 |
|
31 |
Returns:
|
32 |
+
tuple of str: (clean_text_result, summarization_result, sentiment_result, topics_result)
|
33 |
"""
|
34 |
+
# Default messages if a mode is not selected
|
35 |
+
clean_text_result = "Mode not selected."
|
36 |
+
summarization_result = "Mode not selected."
|
37 |
+
sentiment_result = "Mode not selected."
|
38 |
+
topics_result = "Mode not selected."
|
39 |
|
40 |
+
# 1) Fetch/clean the web content
|
41 |
try:
|
42 |
html_content = fetch_web_content(url)
|
43 |
except Exception as e:
|
44 |
+
# Return the error in each field for clarity
|
45 |
+
error_msg = f"**Error fetching URL**: {e}"
|
46 |
+
return (error_msg, error_msg, error_msg, error_msg)
|
47 |
|
48 |
+
# Clean the text (keeping <script> and <style>)
|
49 |
cleaned = clean_text(html_content)
|
50 |
|
51 |
+
# 2) If the user requested a text preview
|
52 |
if "Clean Text Preview" in modes:
|
53 |
+
clean_text_result = preview_clean_text(cleaned, max_chars=500)
|
54 |
|
55 |
+
# 3) Summarization
|
56 |
if "Summarization" in modes:
|
57 |
+
result = summarize_text(cleaned)
|
58 |
+
# If the result starts with "Error", we can highlight it
|
59 |
+
if isinstance(result, str) and "Error" in result:
|
60 |
+
summarization_result = f"**Error during summarization**: {result}"
|
61 |
+
else:
|
62 |
+
summarization_result = result
|
63 |
|
64 |
+
# 4) Sentiment Analysis
|
65 |
if "Sentiment Analysis" in modes:
|
66 |
+
result = analyze_sentiment(cleaned)
|
67 |
+
if isinstance(result, str) and "Error" in result:
|
68 |
+
sentiment_result = f"**Error during sentiment analysis**: {result}"
|
69 |
+
else:
|
70 |
+
sentiment_result = f"**Predicted Sentiment**: {result}"
|
71 |
|
72 |
+
# 5) Topic Detection
|
73 |
if "Topic Detection" in modes:
|
74 |
topics = detect_topic(cleaned)
|
75 |
+
# Check if there's an error
|
76 |
if isinstance(topics, dict) and "error" in topics:
|
77 |
+
topics_result = f"**Error during topic detection**: {topics['error']}"
|
78 |
else:
|
79 |
+
# Format the topics into a readable string
|
80 |
+
formatted = ""
|
81 |
+
for t, score in topics.items():
|
82 |
+
formatted += f"- **{t}**: {score:.2f}\n"
|
83 |
+
topics_result = formatted if formatted else "No topics detected."
|
84 |
|
85 |
+
return (clean_text_result, summarization_result, sentiment_result, topics_result)
|
86 |
|
|
|
87 |
def build_app():
|
88 |
with gr.Blocks(title="Smart Web Analyzer Plus") as demo:
|
89 |
+
gr.Markdown("## Smart Web Analyzer Plus\n"
|
90 |
+
"Analyze web content for **summarization**, **sentiment**, and **topics**. "
|
91 |
+
"Choose your analysis modes and enter a URL below.")
|
92 |
+
|
|
|
|
|
93 |
with gr.Row():
|
94 |
url_input = gr.Textbox(
|
95 |
label="Enter URL",
|
|
|
101 |
choices=["Clean Text Preview", "Summarization", "Sentiment Analysis", "Topic Detection"],
|
102 |
value=["Clean Text Preview", "Summarization", "Sentiment Analysis", "Topic Detection"]
|
103 |
)
|
104 |
+
|
105 |
+
# We'll display results in separate tabs for clarity
|
106 |
+
with gr.Tabs():
|
107 |
+
with gr.Tab("Clean Text Preview"):
|
108 |
+
preview_output = gr.Markdown()
|
109 |
+
with gr.Tab("Summarization"):
|
110 |
+
summary_output = gr.Markdown()
|
111 |
+
with gr.Tab("Sentiment Analysis"):
|
112 |
+
sentiment_output = gr.Markdown()
|
113 |
+
with gr.Tab("Topic Detection"):
|
114 |
+
topic_output = gr.Markdown()
|
115 |
|
|
|
|
|
|
|
116 |
analyze_button = gr.Button("Analyze")
|
117 |
|
118 |
+
# The "analyze_url" function returns a tuple of four strings
|
119 |
analyze_button.click(
|
120 |
fn=analyze_url,
|
121 |
inputs=[url_input, mode_selector],
|
122 |
+
outputs=[preview_output, summary_output, sentiment_output, topic_output]
|
123 |
)
|
124 |
|
125 |
# Example URLs
|
|
|
132 |
inputs=url_input,
|
133 |
label="Click an example to analyze"
|
134 |
)
|
135 |
+
|
136 |
return demo
|
137 |
|
138 |
if __name__ == "__main__":
|
139 |
+
demo = build_app()
|
140 |
+
demo.launch()
|