dataset الاميلات لمعرفة الرسائل الهامه والرسائل المزعجه والاعلانات بلغة بايثون
في كثير من الاحيان نقابل عدد كبير من الرسائل المزعجه على البريد الشخصي الخاص بنا واحيانا يوجد تصنيف لبعض البيانات انها spam ومزعجه هل تسالتم كيف يتم معرفة هذة البيانات اذا كان سبام ام لا , في مقالة اليوم سوف نشرح لكم الفكرة ونقدم لكم dataset لهذة البيانات لكي تعرف اذا كانت الرسائل spam ام لا ويمكنك تنفيذ هذة البيانات في المشاريع التي تعمل عليها والمشاريع الكبيره تحديدا والتي لديها عدد مستخدمين كبير .
اذا كنت تبحث عن سكريبتات بايثون جاهزه , احب ان اقول لك يا عزيزي القارئ اننا سنحاول في الايام المقبله وضع scripts ومشاريع بلغه python لكم بشكل المجاني , لكي تستطيعون التدرب عليها. ايضا هذه الاسكربتات قد تمكنك من عمل مشاريع بايثون. وهي واحد من اهم الاشياء التي يريد الكثير منكم تعلمها حاول الدخول الى متصفح جوجل والبحث عن اكثر لغات البرمجه المطلوبه في سوق العمل او حتى اكثر لغات البرمجه المطلوب تعلمها سوف تجد في طبيعه الحال ان لغه بايثون تتصدر المرتبه الاولى. هل تساءلتم ما الذي يجعل لغه بايثون تصدر اللغه الاولى في الطلب في سوق العمل والتعلم , الامر بسيط جدا وهو ان هذه اللغه اولا تتميز بالبساطه ايضا لغه بايثون فريده من نوعها وتسهل على المبرمجين الكثير من الوقت. ايضا تستطيع من خلال لغه بايثون عمل نماذج من الذكاء الاصطناعي.
ايضا لغه بايثون بين كل فتره والاخرى تقوم بتنزيل لنا اصدار جديد منها حيث يتميز كل اصدار عن الذي قبله. ومطورون لغه بايثون يحاولون دائما. وضع افكار جديده وافكار رائعه تسهل على المبرمجين الكثير من الوقت والجهد. ايضا عندما يجدون من ذلك بعض الصعوبات التي يقابلها الكثير في البايثون يحاولون حل هذه المشكله في الاصدار الذي بعده هذا ما يميز هذه اللغه ولكن لن تستطيع تعلم لغه بايثون بالطريقه التي تحلم بها دون تعلمك لاي لغه برمجه اخرى السبب يرجع في ان هذه اللغه بسيطة ولن تكون قادر على فهمها بشكل جيد عكس ان تكون قد تعلمت لغه اخرى وفاهم لماذا تم وضع الكود في هذا المكان تحديدا. لذلك انصحك بتعلم او البدء في تعلم اساسيات الجافا او سي بلس او ايها من اللغات بعدها ابدا بالبايثون ولكن في نهايه الامر الخيار بين يديك ( كل اللغات موجوده في موقعنا والحمدلله ).
معرفة الmail هل spam ام ham في بايثون
اولا تحتاج الى dataset بها مجموعه كبيره من الرسائل التي تم تصنيفها على انها spam وبعض الرسائل الاخرى تصنف انها ham , لذلك سوف نترك لكم في نهاية المقالة داتاسيت للبيانات هذة ولكي تستطيع قراتها عليك استخدام مكتبة pandas ومنها الامر read_csv لكي يساعدك على فتح محتويات الملف وقراءة ما بداخله وهذة البيانات نحتاج الى الفصل بينها باستخدام sep="\t واخيرا قم بعمل طباعة للdf.head لكي تشاهد البيانات التي توجد بهذا الجدول .
import pandas as pd
import numpy as np
np.random.seed(42)
# print(f"version : {pd.__version__}")
df = pd.read_csv("spam_email.csv" , sep="\t")
print(df.head())
طباعة دائرة بها النسبة المئويه للبيانات ببايثون
اذا كنت تريد معرفة مقدار هذة البيانات الموجوده في الtable في رسمة pie وتكون هذة الرسمه مقسمه الى جزئين الاول للبيانات المخالفه والاخرى للبيانات الهامه , ولكن لكي تستطيع طباعة الرسمة يجب عليك تثبيت مكتبة matplotlib وايضا عليك استخدام اما google colab او jupyter وهما يقدمان نفس الوظيفه تقريبا ولكن انا افضل شخصيا استخدام google colab .
import matplotlib.pyplot as plt
plt.figure(figsize=(8,8))
df["Type"].value_counts().plot(kind='pie',autopct='%1.00f%%')
ازالة الsimpls وجعل جميع الحروف small في الmail الصادر
احيانا اذا وصلك اميل تكون به حروف cpital واخرى small وايضا قد يكون بعض smples لذلك نريد التخلص من كل الاشياء هذة لكي نستطيع التعامل مع محتويات الاميل بشكل افضل ونتخلص من كل الاشياء التي قد تسبب مشاكل في معالجة البيانات , لذلك تخلصنا معنها وجعلنا جميع الحروف small لكي تسهل علينا التعامل .
import string
print(f"punctuation string is : {string.punctuation} ")
def clean_format(msg) :
lower_letter = msg.lower()
clean_msg = ""
for letter in lower_letter :
if letter not in string.punctuation :
clean_msg += letter
return clean_msg
df['Message'] = df['Message'].apply(clean_format)
df.head()
استبعاد الكلمات الشائعة في البريد وتحليل الرسائل الوارده python لمعرفة الاميلات المزعجه
stopwords هي عبارة عن مجموعه من الكلمات التي تستخدم بكثرة في اللغه الانجليزي مثل he,sh,is,are وغيرها من الكلمات الشائعه لذلك لا نريد احتساب هذة الكلمات انها spam ونريد تخطيها لذلك نحتاج اولا الى تحميلها وبعد ذلك سوف نضعها في الvectorizer ونضع بداخله max_features اقصى كلمات نعالجها وهنا اخبرناه 2500 فاذا كانت اول 2500 كلمه غير سبام يصنف غير سبام واذا العكس يصنف ham وايضا max_df نسبة البيانات التي نريد ان نجربها من النموذج الذي قمنا به واخيرا stop_words وهي الكلمات التي لا تحتسب من ضمن ال2500 كلمه .
random_df = df.sample(frac=1 , random_state=42) # frac data amount , 1 = 100%
random_df.head()
import nltk
nltk.download('stopwords')
from nltk.corpus import stopwords
stopwords.words('english')
from nltk.corpus import stopwords
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(max_features=2500 , max_df= 0.8 , stop_words=stopwords.words('english')) # ignore
transformed_x = vectorizer.fit_transform(random_df['Message'])
# test 80% from data .
train_index = int( df.shape[0] * 0.80 )
train_index
كيفية اختبار النموذج ومعرفة نسبة النجاح وعمل استخراج للمحتويات الموجوده بداخل الملف .
في هذة المرحله سوف نقوم بعمل train للبيانات وبعدها نريد معرفة الscore الخاص بهذة البيانات لكي نتاكد من ان هذا الموديل مناسب للاستخدام وذلك يكون عن طريق نسبة الscore فاذا كانت فوق 85 فهذا النموذج رائع ومناسب للاستخدام لذلك بعد تدريب البيانات حصلنا على نتيجة وهي 88% وهذه نسبة جيده وبعدها قمنا بعمل pickle لكي نستخرج البيانات في ملف ونستخرج تدريب النموذج في ملف اخر لكي يكون لدينا ملف به البيانات بعد تدريبها وملف اخر فيه عمليه اختبار الكلمات .
import pandas as pd
import numpy as np
np.random.seed(42)
import string
print(f"punctuation string is : {string.punctuation} ")
def clean_format(msg) :
lower_letter = msg.lower()
clean_msg = ""
for letter in lower_letter :
if letter not in string.punctuation :
clean_msg += letter
return clean_msg
df['Message'] = df['Message'].apply(clean_format)
random_df = df.sample(frac=1 , random_state=42) # frac data amount , 1 = 100%
import nltk
nltk.download('stopwords')
from nltk.corpus import stopwords
stopwords.words('english')
Y = random_df.pop("Type")
from nltk.corpus import stopwords
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(max_features=2500 , max_df= 0.8 , stop_words=stopwords.words('english'))
# ignore
transformed_x = vectorizer.fit_transform(random_df['Message'])
train_index = int( df.shape[0] * 0.80 )
x_train = transformed_x[:train_index]
y_train = Y[:train_index]
x_test = transformed_x[train_index:]
y_test = Y[train_index:]
from sklearn.naive_bayes import GaussianNB
clf = GaussianNB()
clf.fit(x_train.toarray() , y_train)
print(clf.score(x_train.toarray() , y_train))
print(clf.score(x_test.toarray() , y_test)) # score model .
import pickle
pickle.dump(vectorizer , open("vectorizer.vect", "wb"))
pickle.dump(clf , open("spam_email.mod", "wb"))
تجربة model لمعرفة الرسائل الspam والham ببايثون
اولا مكتبة pickle تستخدم لقراءة البيانات وايضا لدينا methode يتم فيها اخذ الكلمات التي نقوم بتجربتها وتختبر لكي نعرف الspam والعكس ولهذا تم تجربة بعض النصوص لمعرفة النصوص المزعجه والوهميه والرسائل الاخرى المهمه وهذة هي نتيجة الاختبار النهائيه .
import pickle as pk
vectroizer = pk.load(open("vectorizer.vect","rb"))
clf = pk.load(open("spam_email.mod","rb"))
def predict(email) :
vec = vectroizer.transform([email]).toarray()
result = clf.predict(vec)[0]
return result
text_test = "hello dear , i need your information please"
text_test2 = "please give my credit card"
print(f"text one is : {predict(text_test)}")
print(f"text two is : {predict(text_test2)}")
معرفة الemails الspam باستخدام array
هذا الكود هو نفس الكود السابق تماما ولكن قمنا بتعديل بسيط جدا جدا وهو اظهار النتيجة على شكل digital في array , حيث ان المربع الاول مخصص للايميلات الspam والاخر للرسائل المهمه ومكان كل خانه مناسبة يتم وضع القيمة 1 في مكانها المخصص .
import pickle as pk
vectroizer = pk.load(open("vectorizer.vect","rb"))
clf = pk.load(open("spam_email.mod","rb"))
def predict(email) :
vec = vectroizer.transform([email]).toarray()
result = clf.predict_proba(vec)[0]
return result
text_test = "hello dear , i need your information please"
text_test2 = "please give my credit card"
print(f"text one is : {predict(text_test)}")
print(f"text two is : {predict(text_test2)}")
tensorflow python erp python django mongodb python mongodb python host