Spaces:
Runtime error
Runtime error
# from flask import Flask | |
# from PIL import Image | |
# import numpy as np | |
# import tensorflow as tf | |
# import requests | |
# import io | |
# import os | |
# os.system("python3 -m http.server 7860 -b 0.0.0.0 &") | |
# # Initialize the Flask application | |
# app = Flask(__name__) | |
# # Load the trained model | |
# model = tf.keras.models.load_model('./save_model.h5',compile=False) | |
# @app.route('/') | |
# def aaa(): | |
# return "hi" | |
# # Route for object detection | |
# @app.route('/detect-object/<id>', methods=['POST','GET']) | |
# def detect_pothole(id): | |
# # Get the image file from the request | |
# try : | |
# image_file = io.BytesIO(requests.get(f"https://firebasestorage.googleapis.com/v0/b/miniproj-2f595.appspot.com/o/{id}.jpg?alt=media&token=eca9d563-f526-4d9f-b443-72eb653b30d0").content) | |
# print(f"https://firebasestorage.googleapis.com/v0/b/miniproj-2f595.appspot.com/o/{id}.jpg?alt=media&token=eca9d563-f526-4d9f-b443-72eb653b30d0") | |
# # Load and preprocess the image | |
# image = Image.open(image_file) | |
# image = image.resize((64, 64)) | |
# image = np.array(image) | |
# image = image / 255.0 | |
# image = np.expand_dims(image, axis=0) | |
# # Debug statements | |
# print('Image shape:', image.shape) | |
# print('Image data:', image) | |
# # Make predictions | |
# result = model.predict(image) | |
# # Convert the prediction to a label | |
# if result[0][0] == 1: | |
# prediction = 'pothole' | |
# else: | |
# prediction = 'Normal' | |
# except : | |
# prediction = 'error' | |
# # Return the prediction as a JSON response | |
# response = {'prediction': prediction} | |
# return response | |
# # Run the Flask application | |
# if __name__ == '__main__': | |
# app.run() | |
from flask import Flask | |
from flask import render_template | |
import random | |
from flask import Flask, request | |
import pandas as pd | |
import tensorflow as tf | |
import tensorflow_hub as hub | |
import numpy as np | |
import nltk | |
from nltk.corpus import stopwords | |
import emoji | |
import re | |
from sklearn.pipeline import Pipeline | |
MAX_LENGTH = 50 | |
MAX_CURRENCY_FLAG = 2 | |
MAX_SPAM_WORDS = 1 | |
MAX_EMOJI = 2 | |
MAX_CONATANS = 1 | |
MAX_EMAIL= 1 | |
MAX_PHONE = 1 | |
class RemoveStopWordsPunctuation: | |
def fit(self, x, y=None): | |
return self | |
def __remove_punctuation_stopwords(self, text): | |
pattern = re.compile("[{}]".format(re.escape("!\"#&'()*,-/:;<=>?[\\]^_`{|}~"))) | |
text = " ".join( | |
[ | |
word.strip() | |
for word in pattern.sub(" ", text.lower()).split() | |
if word not in set(stopwords.words("english")) | |
] | |
) | |
return text | |
def transform(self, df): | |
df["Comment"] = df["Comment"].apply(self.__remove_punctuation_stopwords) | |
return df | |
class AddLengthFlag: | |
def fit(self, x, y=None): | |
return self | |
def transform(self, X): | |
X["length"] = X["Comment"].str.len().astype(np.float32) / MAX_LENGTH | |
return X | |
class AddCurrencyFlag: | |
def __init__(self) -> None: | |
self.currency_symbols = ["₤", "₨", "€", "₹", "₿", "$"] | |
self.pattern = "([\$₤₨€₹₿]+ *[0-9]* *[\.,]?[0-9]*)|([0-9]* *[\.,]?[0-9]* *[\$₤₨€₹₿]+)" | |
def fit(self, x, y=None): | |
return self | |
def __add_currency_count(self, text): | |
return len(re.findall(self.pattern, text)) / MAX_CURRENCY_FLAG | |
# def __add_currency_count(self,text): | |
# return sum(text.count(symbol) for symbol in self.currency_symbols ) | |
def transform(self, df): | |
df["currency"] = df["Comment"].apply(self.__add_currency_count).astype(np.float32) | |
return df | |
class AddSpamWordsFlag: | |
def __init__(self) -> None: | |
self.spam_words = [ | |
"morning", | |
"good" | |
"urgent", | |
"exclusive", | |
"limited time", | |
"free", | |
"guaranteed", | |
"act now", | |
"discount", | |
"special offer", | |
"prize", | |
"instant", | |
"cash", | |
"save", | |
"win", | |
"best", | |
"secret", | |
"incredible", | |
"congratulations", | |
"approved", | |
"risk free", | |
"hidden", | |
"bonus", | |
"sale", | |
"amazing", | |
"extra cash", | |
"opportunity", | |
"easy", | |
"double your", | |
"best price", | |
"cash back", | |
"deal", | |
"earn", | |
"money", | |
"no obligation", | |
"profit", | |
"results", | |
"exciting", | |
"unbelievable", | |
"jackpot", | |
"fantastic", | |
"instant access", | |
"million dollars", | |
"discounted", | |
"last chance", | |
"exclusive offer", | |
"big savings", | |
"limited offer", | |
"free trial", | |
"special promotion", | |
"secret revealed", | |
"valuable", | |
"money-back guarantee", | |
"lowest price", | |
"save money", | |
"make money", | |
"no risk", | |
"exclusive deal", | |
"limited supply", | |
"huge", | |
"incredible offer", | |
"prize winner", | |
"earn extra income", | |
"limited spots", | |
"new offer", | |
"best deal", | |
"don't miss out", | |
"great savings", | |
"top offer", | |
"double your income", | |
"discount code", | |
"fast cash", | |
"top-rated", | |
"best value", | |
"no cost", | |
"elite", | |
"act fast", | |
"unbeatable", | |
"cash prize", | |
"limited availability", | |
"special discount", | |
"quick cash", | |
"no catch", | |
"instant approval", | |
"big discount", | |
"easy money", | |
"insider", | |
"invitation", | |
"free shipping", | |
"huge discount", | |
"extra income", | |
"secret formula", | |
"no strings attached", | |
"money-making", | |
"dream come true", | |
"massive", | |
"free gift", | |
"incredible opportunity", | |
"risk-free trial", | |
"instant money", | |
"special price", | |
"no purchase necessary", | |
"now", | |
] | |
def fit(self, x, y=None): | |
return self | |
def __add_currency_count(self, text): | |
return float(sum(text.count(symbol) for symbol in self.spam_words) / MAX_SPAM_WORDS) | |
def transform(self, df): | |
df["spam_word"] = df["Comment"].apply(self.__add_currency_count).astype(np.float32) | |
return df | |
class AddEmojiFlag: | |
def __init__(self) -> None: | |
self.emoji_symbols = "[💭|🔝|🆗|🎉|🎊|📯|🙌|😂|💸|👉|📢|🚀|💲|💣|🔱|💼|🆙|⏳|✨|💌|💎|🆕|🔞|💡|💰|👑|⭐|🌟|🎤|⚡|📈|💵|🏆|💪|🔓|🆓|🎰|⌚|🚨|💢|📮|🔥|🎈|🎥|🔔|💯|🎶|🔗|🎁|📚|🔊|👍|👏|📱|📝|🤑|🏅|🔒|📣|💥]" | |
def fit(self, x, y=None): | |
return self | |
def __add_currency_count(self, text): | |
return float(len(re.findall(self.emoji_symbols, text)) / MAX_EMOJI) | |
def transform(self, df): | |
df["emoji"] = df["Comment"].apply(self.__add_currency_count).astype(np.float32) | |
return df | |
class AddContainFlag: | |
def fit(self, x, y=None): | |
return self | |
def __add_first_count(self, text): | |
pattern = "[0-9]*%|T&C" | |
return len(re.findall(pattern, text)) | |
def __add_second_count(self, text): | |
pattern = "(https:\/\/www\.|http:\/\/www\.|https:\/\/|http:\/\/)?[a-zA-Z0-9]{2,}(\.[a-zA-Z0-9]{2,})(\.[a-zA-Z0-9]{2,})?" | |
return len(re.findall(pattern, text)) | |
def transform(self, df): | |
df["contain"] = df["Comment"].apply(self.__add_first_count) | |
df["contain"] = df["contain"] + df["Comment"].apply(self.__add_second_count) | |
df['contain'] = df['contain'].astype(np.float32) / MAX_CONATANS | |
return df | |
class AddEmailFlag: | |
def fit(self, x, y=None): | |
return self | |
def __add_email_count(self, text): | |
pattern = "[\w]+@[\w]+\.\w+" | |
return float(len(re.findall(pattern, text)) /MAX_EMAIL) | |
def transform(self, df): | |
df["email"] = df["Comment"].apply(self.__add_email_count).astype(np.float32) | |
return df | |
class AddPhoneFlag: | |
def fit(self, x, y=None): | |
return self | |
def __add_phone_no_count(self, text): | |
pattern = "\+?[0-9]?[0-9]? ?0?[0-9]{10}" | |
return len(re.findall(pattern, text)) | |
def __add_phone_no_count_1(self, text): | |
pattern = "\+?[0-9]?\d{3}[ -]?\d{3}[ -]?\d{4}" | |
return len(re.findall(pattern, text)) | |
def transform(self, df): | |
df["phone"] = df["Comment"].apply(self.__add_phone_no_count) | |
df["phone"] = df["phone"] + df["Comment"].apply(self.__add_phone_no_count_1) | |
df["phone"] = df["phone"].astype(np.float32) / MAX_PHONE | |
return df | |
class RemovePhoneLinkEmail: | |
def fit(self, x, y=None): | |
return self | |
def __remove(self, text): | |
text = re.sub("\$[0-9]*([\.,][0-9]{2})*\$?", "", text) | |
text = re.sub("\+?[0-9]?[0-9]? ?0?[0-9]{10}", "", text) | |
text = re.sub("\+?[0-9]?\d{3}[ -]?\d{3}[ -]?\d{4}", "", text) | |
text = re.sub( | |
r"(https:\/\/www\.|http:\/\/www\.|https:\/\/|http:\/\/)?[a-zA-Z0-9]{2,}(\.[a-zA-Z0-9]{2,})(\.[a-zA-Z0-9]{2,})?", | |
"", | |
text, | |
) | |
text = re.sub(r"[\w]+@[\w]+\.\w+", "", text) | |
text = emoji.replace_emoji(text) | |
return text | |
def transform(self, df): | |
df["Comment"] = df["Comment"].apply(self.__remove) | |
return df | |
class LemmatizeText: | |
def __init__(self): | |
self.lemmatizer = nltk.WordNetLemmatizer() | |
def fit(self, X, y=None): | |
return self | |
def __lemmatize_text(self, text): | |
return " ".join( | |
[self.lemmatizer.lemmatize(word) for word in re.split("\W+", text)] | |
).strip() | |
def transform(self, df): | |
df["Comment"] = df["Comment"].map(lambda text: self.__lemmatize_text(text)) | |
return df | |
pipe = Pipeline([ | |
("AddCurrencyFlag",AddCurrencyFlag()), | |
("AddSpamWordsFlag",AddSpamWordsFlag()), | |
("AddEmojiFlag",AddEmojiFlag()), | |
("AddContainFlag",AddContainFlag()), | |
("AddEmailFlag",AddEmailFlag()), | |
("AddPhoneFlag",AddPhoneFlag()), | |
("RemovePhoneLinkEmail",RemovePhoneLinkEmail()), | |
("RemoveStopWordsPunctuation",RemoveStopWordsPunctuation()), | |
("LemmatizeText",LemmatizeText()), | |
("AddLengthFlag",AddLengthFlag()), | |
]) | |
model = tf.keras.models.load_model('spam-model.h5', custom_objects={'KerasLayer':hub.KerasLayer}) | |
def precidt(msg): | |
if type(msg) is str: | |
df = pd.DataFrame([msg],columns=["Comment"]) | |
elif type(msg) is list: | |
df = pd.DataFrame(msg,columns=["Comment"]) | |
else: | |
return [] | |
df = pipe.transform(df) | |
table = df | |
df = { | |
"Comment": tf.convert_to_tensor(df["Comment"],dtype=tf.string), | |
"Length": tf.convert_to_tensor(df["length"], dtype=tf.float32), | |
"Currency": tf.convert_to_tensor(df["currency"], dtype=tf.float32), | |
"Spam Words": tf.convert_to_tensor(df["spam_word"], dtype=tf.float32), | |
"Emoji": tf.convert_to_tensor(df["emoji"], dtype=tf.float32), | |
"Contain": tf.convert_to_tensor(df["contain"], dtype=tf.float32), | |
"Email": tf.convert_to_tensor(df["email"], dtype=tf.float32), | |
"Phone": tf.convert_to_tensor(df["phone"], dtype=tf.float32) | |
} | |
return [ i*100 for i in model.predict(df).reshape(-1,) ],table | |
app = Flask(__name__,template_folder="templates") | |
def hello(): | |
return render_template('index.html') | |
def main(): | |
data = request.get_json()['text'] | |
value = precidt(data) | |
print(value) | |
value = value[0][0] | |
if (value > 85): | |
score = "Poor" | |
elif (value >50): | |
score = "Okay" | |
else: | |
score = "Great" | |
return {"value": "{:.2f} % SPAM".format(value) , "score" : f"<span class='text-poor'>{score}</span>"} | |
app.run() | |