CoolFace
Apppublic

ReviewDispute/CompletePackage

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
main.py98 linesDownload Raw Back to root
1from fastapi import FastAPI, HTTPException2from pydantic import BaseModel3from transformers import pipeline4import gspread5from oauth2client.service_account import ServiceAccountCredentials6import pandas as pd7from sklearn.ensemble import RandomForestClassifier8import requests9from bs4 import BeautifulSoup10import numpy as np11import os12os.environ['TRANSFORMERS_CACHE'] = '/tmp/huggingface_cache'13 14app = FastAPI()15 16# Load AI model for content analysis17review_analyzer = pipeline("text-classification", model="bert-base-uncased")18 19# Load training data20TRAINING_DATA_PATH = "/mnt/data/new_training_data.csv"21df = pd.read_csv(TRAINING_DATA_PATH)22 23# Drop rows where Review Text is NaN24df = df.dropna(subset=["Review Text"])25 26# Define input data model27class ReviewRequest(BaseModel):28    review_text: str29    business_name: str30 31# Policy violation categories (Referenced from Google Content Policies)32POLICIES_URL = "https://support.google.com/contributionpolicy/answer/7400114"33CATEGORY_LABELS = [34    "Off Topic", "Spam", "Conflict of Interest", "Profanity",35    "Bullying or Harassment", "Discrimination or Hate Speech", "Personal Information"36]37 38# Train ML model for classification39def train_model():40    if "Review Text" in df and "Report Reason" in df:41        X = df["Review Text"]42        y = df["Report Reason"]43        44        from sklearn.feature_extraction.text import TfidfVectorizer45        from sklearn.pipeline import make_pipeline46        from sklearn.ensemble import RandomForestClassifier47        48        vectorizer = TfidfVectorizer(stop_words='english', max_features=5000)49        model = make_pipeline(vectorizer, RandomForestClassifier())50        model.fit(X, y)51        return model52    return None53 54ml_model = train_model()55 56# Function to check for Google policy updates57def check_policy_updates():58    response = requests.get(POLICIES_URL)59    if response.status_code == 200:60        soup = BeautifulSoup(response.text, "html.parser")61        online_policies = [policy.text.strip() for policy in soup.find_all("h2")]62        63        if set(online_policies) != set(CATEGORY_LABELS):64            raise HTTPException(status_code=400, detail="Please update policies list in main document. Google has updated their policies.")65    else:66        raise HTTPException(status_code=500, detail="Failed to fetch Google policies. Please check the URL.")67 68# Function to categorize reviews69def categorize_review(review_text):70    if ml_model:71        return ml_model.predict([review_text])[0]72    return "Off Topic"73 74# Function to analyze review75@app.post("/analyze_review/")76def analyze_review(request: ReviewRequest):77    check_policy_updates()78    report_reason = categorize_review(request.review_text)79    80    # Retrieve Appeal Reason and Justification from training data if available81    appeal_reason_row = df[df["Report Reason"] == report_reason].iloc[0] if not df[df["Report Reason"] == report_reason].empty else None82    appeal_reason = appeal_reason_row["Appeal Reason"] if appeal_reason_row is not None else "Unknown"83    appeal_justification = appeal_reason_row["Justification"] if appeal_reason_row is not None else "No justification available."84    85    return {"report_reason": report_reason, "appeal_reason": appeal_reason, "appeal_justification": appeal_justification}86 87# Function to update spreadsheet88@app.post("/update_spreadsheet/")89def update_spreadsheet(request: ReviewRequest):90    check_policy_updates()91    sheet = client.open_by_key(SPREADSHEET_ID).sheet192    analysis = analyze_review(request)93    94    # Update specific columns for report and appeal reasons95    sheet.append_row([request.business_name, request.review_text, "", "", "", analysis["report_reason"], "", "", "", analysis["appeal_reason"], analysis["appeal_justification"]])96    97    return {"status": "success", "message": "Spreadsheet updated successfully"}98