| | import gradio as gr |
| | import pandas as pd |
| | import google.generativeai as genai |
| | import os |
| | import json |
| | import re |
| |
|
| | |
| | os.environ["API_KEY"] = "AIzaSyAFHyRhWWEVGTzNXH3xHq8vBx229DzVkPM" |
| | genai.configure(api_key=os.environ["API_KEY"]) |
| | model = genai.GenerativeModel("gemini-1.5-flash") |
| |
|
| | |
| | with open("./scheme.json", "r") as f: |
| | gemini_flash_schema = json.load(f) |
| |
|
| | |
| | def preprocess_text(text): |
| | stopwords = { |
| | "the", "is", "in", "at", "on", "a", "an", "and", "or", "for", "to", "of", "with", "that", "by", "it", |
| | } |
| | text = re.sub(r"\d+|[^\w\s]|\s+", " ", text.lower()).strip() |
| | return " ".join([word for word in text.split() if word not in stopwords]) |
| |
|
| | |
| | def generate_review_grade_with_sentiment(review_text): |
| | try: |
| | prompt = f""" |
| | Analyze the following review: {review_text}. |
| | Determine its sentiment (positive, neutral, or negative) based on your analysis... |
| | """ |
| | response = model.generate_content(prompt) |
| |
|
| | |
| | sentiment_match = re.search(r"(positive|negative|neutral)", response.text, re.IGNORECASE) |
| | grade_match = re.search(r"\d(\.\d+)?", response.text) |
| |
|
| | if sentiment_match and grade_match: |
| | sentiment_label = sentiment_match.group().upper() |
| | grade = float(grade_match.group()) |
| | return sentiment_label, grade |
| | else: |
| | return "Unknown", None |
| | except Exception as e: |
| | return f"Error: {e}" |
| |
|
| | |
| | def analyze_product_reviews(product_name): |
| | default_encoding = "latin1" |
| | result = {} |
| | try: |
| | df = pd.read_csv("/content/English_Reviews_WithNewDateISO&IDColumn-WhichIdon'tAgreeOn.csv", encoding=default_encoding) |
| | except UnicodeDecodeError as e: |
| | return f"Error reading file: {e}" |
| |
|
| | filtered_reviews = df[df["product_name"].str.contains(product_name, case=False)] |
| | |
| | if not filtered_reviews.empty: |
| | combined_reviews_text = " ".join(filtered_reviews["product_review_name"].tolist()) |
| | |
| | |
| | summary = generate_summary(combined_reviews_text) |
| | |
| | |
| | pros, cons = generate_pros_and_cons(combined_reviews_text) |
| | |
| | |
| | grades = [] |
| | for _, row in filtered_reviews.iterrows(): |
| | review_text = preprocess_text(row["product_review_name"]) |
| | sentiment_label, grade = generate_review_grade_with_sentiment(review_text) |
| | grades.append({ |
| | "review": row['product_review_name'], |
| | "sentiment": sentiment_label, |
| | "grade": grade |
| | }) |
| | |
| | result = { |
| | "summary": summary, |
| | "pros": pros, |
| | "cons": cons, |
| | "grades": grades, |
| | } |
| | else: |
| | result = {"error": "No reviews found for product."} |
| |
|
| | return result |
| |
|
| | |
| | interface = gr.Interface( |
| | fn=analyze_product_reviews, |
| | inputs=gr.Textbox(label="Enter Product Name"), |
| | outputs=gr.JSON(label="Analysis Result"), |
| | title="Product Review Analyzer and Grader", |
| | description="Analyze product reviews to generate summary, pros, cons, and grading." |
| | ) |
| |
|
| | if __name__ == "__main__": |
| | |
| | interface.launch(server_name="0.0.0.0", server_port=7860, share=True) |
| |
|