project_2b / app.py
hiba9's picture
Rename project_2b.py to app.py
5114235 verified
raw
history blame contribute delete
No virus
3.29 kB
import streamlit as st
import os
import os
os.system('pip install transformers')
import os
os.system('pip install torch')
import os
os.system('pip install tensorflow')
import os
os.system('pip install soundfile')
import soundfile as sf
from transformers import VitsModel, AutoTokenizer
import numpy as np
import io
import torch
print(torch.__version__)
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, confusion_matrix
import matplotlib.pyplot as plt
import seaborn as sns
import nltk
nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')
from wordcloud import WordCloud
import zipfile
import os
model = VitsModel.from_pretrained("facebook/mms-tts-eng")
tokenizer = AutoTokenizer.from_pretrained("facebook/mms-tts-eng")
def generate_speech(text):
df = pd.read_csv("sample_data/Restaurant_Reviews.tsv", sep='\t')
df=df.head(200)
df.shape
df.head()
sns.countplot(x='Liked', data=df)
plt.title('Sentiment Distribution (0 = Negative, 1 = Positive)')
plt.show()
example=df['Review'][56]
example
vectorizer = TfidfVectorizer(max_features=5000)
X = vectorizer.fit_transform(df['Review'])
y = df['Liked']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
model = LogisticRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))
cm = confusion_matrix(y_test, y_pred)
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=model.classes_, yticklabels=model.classes_)
plt.xlabel('Predicted')
plt.ylabel('Actual')
plt.title('Confusion Matrix')
plt.show()
import ipywidgets as widgets
from IPython.display import display
def predict_sentiment(review):
# Transform the input review using the vectorizer
input_vector = vectorizer.transform([review])
# Predict sentiment
prediction = model.predict(input_vector)[0]
# Return the sentiment prediction
return "Positive" if prediction == 1 else "Negative"
# Text input widget
review_input = widgets.Text(
placeholder='Enter your review here...',
description='Review:',
disabled=False
)
# Button widgets for sample reviews
sample_reviews = [
"The food was delicious and the service was excellent!",
"Terrible experience, food was cold and service was slow."
]
sample_buttons = [widgets.Button(description=review) for review in sample_reviews]
def on_button_click(b):
review_input.value = b.description
for button in sample_buttons:
button.on_click(on_button_click)
# Output widget for displaying predictions
output = widgets.Output()
def update_output(change):
output.clear_output()
with output:
prediction = predict_sentiment(change['new'])
print(f"Predicted Sentiment: {prediction}")
review_input.observe(update_output, names='value')
# Display widgets
display(review_input)
display(widgets.HBox(sample_buttons))
display(output)