Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import pandas as pd | |
| from openai import OpenAI | |
| import os | |
| import io | |
| import json | |
| from transformers import pipeline | |
| # Modello NLP open-source locale per il primo livello di analisi | |
| sentiment_pipeline = pipeline("sentiment-analysis", model="nlptown/bert-base-multilingual-uncased-sentiment") | |
| # Funzione per analizzare i commenti con GPT solo se necessario | |
| def analyze_comments(texts): | |
| """ Usa prima un modello NLP locale, poi GPT-3.5/GPT-4 solo se serve.""" | |
| client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY")) | |
| results = [] | |
| to_send_gpt = [] | |
| index_map = {} | |
| # 1️⃣ Analisi iniziale con modello open-source | |
| for i, text in enumerate(texts): | |
| local_result = sentiment_pipeline(text)[0]['label'] | |
| rating = int(local_result.split()[0]) | |
| if rating > 3: | |
| results.append("Positive") | |
| elif rating < 3: | |
| results.append("Negative") | |
| else: | |
| results.append("Neutral") | |
| return results | |
| def analyze_file(file): | |
| """Carica un file e analizza il sentiment dei commenti nella prima colonna.""" | |
| try: | |
| file_extension = os.path.splitext(file.name)[-1].lower() | |
| if file_extension == ".csv": | |
| df = pd.read_csv(file) | |
| elif file_extension in [".xls", ".xlsx"]: | |
| df = pd.read_excel(file, engine='openpyxl') | |
| else: | |
| return "Error: Unsupported file format.", None | |
| if df.empty or df.shape[1] < 1: | |
| return "Error: No valid data in the file.", None | |
| df = df.rename(columns={df.columns[0]: "Comment"}) | |
| batch_size = 10 | |
| sentiments = [] | |
| for i in range(0, len(df), batch_size): | |
| batch = df['Comment'][i:i+batch_size].tolist() | |
| sentiments.extend(analyze_comments(batch)) | |
| df["Sentiment"] = sentiments | |
| output = io.BytesIO() | |
| with pd.ExcelWriter(output, engine='openpyxl') as writer: | |
| df.to_excel(writer, index=False) | |
| output.seek(0) | |
| return df, output | |
| except Exception as e: | |
| return f"Error processing file: {str(e)}", None | |
| def sentiment_analysis_interface(): | |
| """Interfaccia Gradio per caricare file e ottenere analisi del sentiment.""" | |
| file_input = gr.File(label="📥 Upload a file (CSV, XLSX)") | |
| results_output = gr.Dataframe() | |
| download_button = gr.File(label="📥 Download Excel") | |
| def process_file(uploaded_file): | |
| df, excel_data = analyze_file(uploaded_file) | |
| if isinstance(df, str): | |
| return df, None | |
| with open("sentiment_analysis.xlsx", "wb") as f: | |
| f.write(excel_data.read()) | |
| return df, "sentiment_analysis.xlsx" | |
| return gr.Interface( | |
| fn=process_file, | |
| inputs=[file_input], | |
| outputs=[results_output, download_button], | |
| title="📊 Sentiment Analysis", | |
| description="Upload a file with comments and get sentiment analysis using an NLP model!" | |
| ) | |
| iface = sentiment_analysis_interface() | |
| if __name__ == "__main__": | |
| iface.launch(share=True) | |