FirstEver / Full_Codes.py
samiNCL
Update code
05a80ad
raw history blame
No virus
2.05 kB
import pandas as pd
import spacy
import gradio as gr
import csv
from nrclex import NRCLex
from transformers import pipeline
from rake_nltk import Rake
# Initialize objects
emotion_pipeline = pipeline('sentiment-analysis', model='nlptown/bert-base-multilingual-uncased-sentiment')
nlp = spacy.load('en_core_web_sm')
rake = Rake()
def process_csv(file):
reader = csv.DictReader(file)
emotions = []
sentiments = []
entities = []
keywords = []
for row in reader:
text = row['Content'] # Replace 'Content' with the correct column name
nrc_obj = NRCLex(text)
emotion_scores = nrc_obj.affect_frequencies
emotions.append(emotion_scores)
sentiment = analyze_emotion(text)
sentiments.append(sentiment)
entities.append(analyze_entities(text))
keywords.append(extract_keywords(text)) # Extract keywords for each text
fieldnames = reader.fieldnames + list(emotions[0].keys()) + ['sentiment', 'entities', 'keywords']
output = []
for row, emotion_scores, sentiment, entity, keyword in zip(reader, emotions, sentiments, entities, keywords):
row.update(emotion_scores) # Update the row dictionary with emotion scores
row.update({'sentiment': sentiment, 'entities': entity, 'keywords': keyword}) # Update the row dictionary with sentiment, entities and keywords
output.append({field: row.get(field, '') for field in fieldnames}) # Write row with matching fields or empty values
return pd.DataFrame(output).to_csv(index=False)
def analyze_emotion(text):
result = emotion_pipeline(text)[0]
sentiment = result['label']
return sentiment
def analyze_entities(text):
doc = nlp(text)
entities = [(ent.text, ent.label_) for ent in doc.ents]
return entities
def extract_keywords(text):
rake.extract_keywords_from_text(text)
return rake.get_ranked_phrases() # Extract keywords from text
iface = gr.Interface(fn=process_csv, inputs=gr.inputs.File(type='csv'), outputs=gr.outputs.File())
iface.launch()