انتظر حتى ترى كيف يمكن للذكاء الاصطناعي أن يقرأ رواية أمريكية شهيرة مثل 'غاتسبي العظيم' ويفهم مشاعرها! في هذا التدريب، لن نقرأ الرواية فقط، بل سنحولها إلى بيانات، ثم نستخدم بايثون لتحليلها. تخيل أنك مهندس بيانات في شركة مصرية، وطلب منك مديرك تحليل آراء العملاء في منتج جديد. ستستخدم نفس الأدوات التي ستتعلمها هنا. هل أنت مستعد لتجربة هذا بنفسك؟ في هذا الامتحان التدريبي، ستجد 6 مسائل تغطي تحليل المشاعر، حساب التكاليف، وتصميم خوارزميات بسيطة. كل مسألة تشبه ما قد تراه في امتحان الثانوية العامة في التكنولوجيا. لنبدأ!
تحليل المشاعر في مقتطفات من رواية غاتسبي العظيم (15 نقطة)
قرأت شركة تكنولوجيا مصرية مقتطفات من رواية 'غاتسبي العظيم' وتريد تحليل المشاعر السائدة في كل مقتطف. لديك 3 مقتطفات من الرواية. قم بتحليل المشاعر باستخدام مكتبة NLTK في بايثون وحدد ما إذا كان كل مقتطف يحمل مشاعر إيجابية أو سلبية أو محايدة.
- المقتطف 1: 'كان غاتسبي يؤمن بأنك تستطيع تكرار الماضي'
- المقتطف 2: 'كانت الحفلة في منزله فاخرة لدرجة أن الجميع أراد أن يكون هناك'
- المقتطف 3: 'لم يستطع غاتسبي نسيان دايسي، حتى بعد كل هذه السنوات'
- قم بتعريف قائمة بايثون تحتوي على المقتطفات الثلاثة
- استخدم مكتبة NLTK لتحليل المشاعر لكل مقتطف
- اكتب دالة بايثون تأخذ مقتطفًا كمدخل وتعطي النتيجة: 'إيجابي' أو 'سلبي' أو 'محايد'
- طباعة النتائج لكل مقتطف
الحل الكامل
السؤال 1 (3 نقاط) — قم بتعريف قائمة بايثون تحتوي على المقتطفات الثلاثة
- تعريف القائمة — نقوم بتعريف قائمة بايثون تحتوي على المقتطفات الثلاثة.
← تم تعريف القائمة بنجاح.
السؤال 2 (3 نقاط) — استخدم مكتبة NLTK لتحليل المشاعر لكل مقتطف
- استيراد المكتبات — نستورد مكتبتي NLTK وTextBlob. يجب أن تتأكد من تثبيت المكتبتين باستخدام pip install nltk textblob.
← تم استيراد المكتبات بنجاح.
السؤال 3 (5 نقاط) — اكتب دالة بايثون تأخذ مقتطفًا كمدخل وتعطي النتيجة: 'إيجابي' أو 'سلبي' أو 'محايد'
- إنشاء الدالة — نقوم بإنشاء دالة تأخذ نصًا وتحليل المشاعر باستخدام TextBlob. الدالة ستعيد 'إيجابي' إذا كانت الدرجة أكبر من 0.1، 'سلبي' إذا كانت أقل من -0.1، و'محايد' إذا كانت بين -0.1 و0.1.
← تم إنشاء الدالة بنجاح.
السؤال 4 (4 نقاط) — طباعة النتائج لكل مقتطف
- تنفيذ التحليل وطباعة النتائج — نقوم بتطبيق الدالة على كل مقتطف من القائمة وطباعة النتائج.
← المقتطف 1: كان غاتسبي يؤمن بأنك تستطيع تكرار الماضي المشاعر: محايد المقتطف 2: كانت الحفلة في منزله فاخرة لدرجة أن الجميع أراد أن يكون هناك المشاعر: إيجابي المقتطف 3: لم يستطع غاتسبي نسيان دايسي، حتى بعد كل هذه السنوات المشاعر: سلبي
سلم التقدير
| تعريف البيانات بشكل صحيح | 3 نقاط |
| استيراد المكتبات بشكل صحيح | 3 نقاط |
| إنشاء دالة تحليل المشاعر بشكل صحيح | 5 نقاط |
| تنفيذ التحليل وطباعة النتائج بشكل صحيح | 4 نقاط |
حساب تكلفة معالجة البيانات النصية بالجنيه المصري (20 نقطة)
شركة تكنولوجيا مصرية تتعامل مع 100000 كلمة من نصوص مختلفة يوميًا. تكلفة معالجة كل 1000 كلمة هي 15 جنيهًا مصريًا. احسب التكلفة اليومية الكلية لمعالجة هذه النصوص. إذا قررت الشركة زيادة عدد الكلمات إلى 150000 كلمة يوميًا، فما هي التكلفة الجديدة؟
- عدد الكلمات اليومية الأولية: 100000 كلمة
- تكلفة معالجة 1000 كلمة: 15 جنيهًا مصريًا
- عدد الكلمات بعد الزيادة: 150000 كلمة
- احسب التكلفة اليومية لمعالجة 100000 كلمة
- احسب التكلفة اليومية لمعالجة 150000 كلمة
- ما هي الزيادة في التكلفة اليومية بعد زيادة عدد الكلمات؟
- إذا كانت الشركة تريد خفض التكلفة إلى 2000 جنيه مصري يوميًا، فما هو الحد الأقصى لعدد الكلمات التي يمكنها معالجتها؟
الحل الكامل
السؤال 1 (5 نقاط) — احسب التكلفة اليومية لمعالجة 100000 كلمة
- حسابات التكلفة الأولية — نقوم بحساب عدد وحدات 1000 كلمة في 100000 كلمة، ثم نضرب في تكلفة الوحدة.
units_initial = 100000 / 1000 # 100 وحدة daily_cost_initial = 100 * 15 # 1500 جنيه مصري ParseError: Expected 'EOF', got '#' at position 32: …100000 / 1000 #̲ 100 وحدة daily…
← 1500 جنيه مصري
السؤال 2 (5 نقاط) — احسب التكلفة اليومية لمعالجة 150000 كلمة
- حسابات التكلفة بعد الزيادة — نقوم بنفس العملية مع 150000 كلمة.
units_increased = 150000 / 1000 # 150 وحدة daily_cost_increased = 150 * 15 # 2250 جنيه مصري ParseError: Expected 'EOF', got '#' at position 34: …150000 / 1000 #̲ 150 وحدة daily…
← 2250 جنيه مصري
السؤال 3 (5 نقاط) — ما هي الزيادة في التكلفة اليومية بعد زيادة عدد الكلمات؟
- حساب الزيادة — نطرح التكلفة الأولية من التكلفة الجديدة.
cost_increase = 2250 - 1500 # 750 جنيه مصري ParseError: Expected 'EOF', got '#' at position 30: …= 2250 - 1500 #̲ 750 جنيه مصري
← 750 جنيه مصري
السؤال 4 (5 نقاط) — إذا كانت الشركة تريد خفض التكلفة إلى 2000 جنيه مصري يوميًا، فما هو الحد الأقصى لعدد الكلمات التي يمكنها معالجتها؟
- حساب الحد الأقصى للكلمات — نقسم التكلفة المستهدفة على تكلفة الوحدة للحصول على عدد الوحدات، ثم نضرب في 1000 للحصول على عدد الكلمات.
max_units = 2000 / 15 # 133.33 وحدة max_words = 133 * 1000 # 133000 كلمة (نقرب لأسفل) ParseError: Expected 'EOF', got '#' at position 24: …s = 2000 / 15 #̲ 133.33 وحدة ma…
← 133000 كلمة
سلم التقدير
| حساب التكلفة الأولية بشكل صحيح | 5 نقاط |
| حساب التكلفة بعد الزيادة بشكل صحيح | 5 نقاط |
| حساب الزيادة في التكلفة بشكل صحيح | 5 نقاط |
| حساب الحد الأقصى للكلمات بشكل صحيح | 5 نقاط |
تصميم خوارزمية بسيطة لتصنيف النصوص بناءً على الكلمات الدالة (18 نقطة)
أنت مهندس بيانات في شركة تكنولوجيا مصرية. الشركة تريد تصنيف رسائل العملاء إلى فئات بناءً على الكلمات الدالة. لديك 4 فئات: 'شكر'، 'شكوى'، 'طلب'، 'معلومات'. قم بتصميم خوارزمية بسيطة في بايثون لتصنيف نص معين إلى الفئة المناسبة.
- الفئة 'شكر': ['شكرًا', 'جزيل الشكر', 'ممتن', 'بارك الله فيك']
- الفئة 'شكوى': ['مشكلة', 'خطأ', 'سيء', 'غير راض']
- الفئة 'طلب': ['أريد', 'أطلب', 'هل يمكنك', 'من فضلك']
- الفئة 'معلومات': ['أين', 'متى', 'كم', 'ما هو']
- النص المراد تصنيفه: 'أريد أن أشكرك جزيل الشكر على الخدمة الرائعة'
- قم بتعريف قائمة لكل فئة تحتوي على الكلمات الدالة
- اكتب دالة تأخذ نصًا كمدخل وتعيد الفئة المناسبة
- طباعة الفئة التي ينتمي إليها النص المعطى
- قم بتعديل الدالة بحيث إذا تطابق النص مع أكثر من فئة، يتم إعطاء الأولوية حسب الترتيب: شكوى > طلب > معلومات > شكر
الحل الكامل
السؤال 1 (4 نقاط) — قم بتعريف قائمة لكل فئة تحتوي على الكلمات الدالة
- تعريف القوائم — نقوم بتعريف القوائم الأربع containing الكلمات الدالة لكل فئة.
← تم تعريف القوائم بنجاح.
السؤال 2 (6 نقاط) — اكتب دالة تأخذ نصًا كمدخل وتعيد الفئة المناسبة
- إنشاء الدالة الأساسية — نقوم بإنشاء دالة تأخذ نصًا وتحسب عدد الكلمات الدالة لكل فئة.
← تم إنشاء الدالة بنجاح.
السؤال 3 (4 نقاط) — طباعة الفئة التي ينتمي إليها النص المعطى
- تحديد الفئة — نقوم بتطبيق الدالة على النص المعطى وطباعة الفئة.
← النص: أريد أن أشكرك جزيل الشكر على الخدمة الرائعة الفئة: طلب
السؤال 4 (4 نقاط) — قم بتعديل الدالة بحيث إذا تطابق النص مع أكثر من فئة، يتم إعطاء الأولوية حسب الترتيب: شكوى > طلب > معلومات > شكر
- تعديل الدالة حسب الأولوية — نقوم بتعديل الدالة بحيث تعطي الأولوية للفئات حسب الترتيب المحدد.
← الفئة حسب الأولوية: طلب
سلم التقدير
| تعريف قوائم الكلمات الدالة بشكل صحيح | 4 نقاط |
| إنشاء الدالة الأساسية لتحليل النص بشكل صحيح | 6 نقاط |
| تحديد الفئة بناءً على العد بشكل صحيح | 4 نقاط |
| تعديل الدالة حسب الأولوية بشكل صحيح | 4 نقاط |
تحليل تكرار الكلمات في رواية غاتسبي باستخدام بايثون (17 نقطة)
شركة تكنولوجيا مصرية تريد تحليل تكرار الكلمات في رواية 'غاتسبي العظيم' لفهم الكلمات الأكثر استخدامًا. لديك مقتطف من الرواية. قم بتحليل تكرار الكلمات واكشف عن الكلمات الأكثر تكرارًا. ثم قم بتصميم رسم بياني يوضح تكرار الكلمات العشرة الأولى.
- مقتطف من الرواية: 'كان غاتسبي يؤمن بأنك تستطيع تكرار الماضي. كان غاتسبي رجلًا غنيًا، لكنه لم يكن سعيدًا. كان غاتسبي يحب دايسي، لكنه لم يستطع الحصول عليها'
- قم بتنظيف النص بإزالة علامات الترقيم
- استخدم مكتبة collections لحساب تكرار الكلمات
- قم بإيجاد الكلمات العشرة الأكثر تكرارًا
- ارسم رسمًا بيانيًا يوضح تكرار الكلمات العشرة الأولى باستخدام matplotlib
الحل الكامل
السؤال 1 (4 نقاط) — قم بتنظيف النص بإزالة علامات الترقيم
- تنظيف النص — نقوم بإزالة علامات الترقيم من النص باستخدام str.maketrans.
← كان غاتسبي يؤمن بأنك تستطيع تكرار الماضي كان غاتسبي رجلا غنيا لكنه لم يكن سعيدا كان غاتسبي يحب دايسي لكنه لم يستطع الحصول عليها
السؤال 2 (4 نقاط) — استخدم مكتبة collections لحساب تكرار الكلمات
- حساب التكرار — نقوم باستخدام Counter لحساب تكرار الكلمات.
word_counts = Counter(words) # {'كان': 3, 'غاتسبي': 3, 'يؤمن': 1, 'بأنك': 1, 'تستطيع': 1, 'تكرار': 1, 'الماضي': 1, 'رجلا': 1, 'غنيا': 1, 'لكنه': 2, 'لم': 2, 'يكن': 2, 'سعيدا': 1, 'يحب': 1, 'دايسي': 1, 'يستطيع': 1, 'الحصول': 1, 'عليها': 1} ParseError: Expected 'EOF', got '#' at position 30: …Counter(words) #̲ {'كان': 3, 'غا…
← تم حساب التكرار بنجاح.
السؤال 3 (4 نقاط) — قم بإيجاد الكلمات العشرة الأكثر تكرارًا
- إيجاد الكلمات الأكثر تكرارًا — نقوم بإيجاد الكلمات العشرة الأكثر تكرارًا.
most_common_words = word_counts.most_common(10) # [('كان', 3), ('غاتسبي', 3), ('لم', 2), ('يكن', 2), ('لكنه', 2), ('تستطيع', 1), ('يؤمن', 1), ('بأنك', 1), ('تكرار', 1), ('الماضي', 1)] ParseError: Expected 'EOF', got '#' at position 49: …ost_common(10) #̲ [('كان', 3), (…
← [('كان', 3), ('غاتسبي', 3), ('لم', 2), ('يكن', 2), ('لكنه', 2), ('تستطيع', 1), ('يؤمن', 1), ('بأنك', 1), ('تكرار', 1), ('الماضي', 1)]
السؤال 4 (5 نقاط) — ارسم رسمًا بيانيًا يوضح تكرار الكلمات العشرة الأولى باستخدام matplotlib
- رسم الرسم البياني — نقوم برسم الكلمات العشرة الأكثر تكرارًا باستخدام matplotlib.
← تم رسم الرسم البياني بنجاح (سيظهر الكلمات: كان، غاتسبي، لم، يكن، لكنه، تستطيع، يؤمن، بأنك، تكرار، الماضي)
سلم التقدير
| تنظيف النص بشكل صحيح بإزالة علامات الترقيم | 4 نقاط |
| حساب تكرار الكلمات باستخدام Counter بشكل صحيح | 4 نقاط |
| إيجاد الكلمات الأكثر تكرارًا بشكل صحيح | 4 نقاط |
| رسم الرسم البياني بشكل صحيح | 5 نقاط |
حساب المسافة بين المدن المصرية باستخدام خوارزمية التوصيل (15 نقطة)
أنت مهندس بيانات في شركة تكنولوجيا مصرية. الشركة تريد حساب أقصر مسافة بين القاهرة والإسكندرية عبر المدن الرئيسية. لديك خريطة بسيطة للمدن التالية: القاهرة، الإسكندرية، الجيزة، المنصورة، طنطا. المسافات بين المدن (بالكيلومتر): القاهرة-الإسكندرية: 220، القاهرة-الجيزة: 15، الجيزة-الإسكندرية: 205، القاهرة-المنصورة: 120، المنصورة-طنطا: 50، طنطا-الإسكندرية: 130. احسب أقصر مسافة من القاهرة إلى الإسكندرية باستخدام خوارزمية التوصيل البسيطة.
- المدن: القاهرة، الإسكندرية، الجيزة، المنصورة، طنطا
- المسافات: القاهرة-الإسكندرية: 220 كم، القاهرة-الجيزة: 15 كم، الجيزة-الإسكندرية: 205 كم، القاهرة-المنصورة: 120 كم، المنصورة-طنطا: 50 كم، طنطا-الإسكندرية: 130 كم
- قم بتمثيل المدن والمسافات كرسوم بياني (مصفوفة أو قائمة)
- اكتب خوارزمية لإيجاد أقصر مسار من القاهرة إلى الإسكندرية باستخدام طريقة التوصيل البسيطة
- احسب المسار الأقصر والمسافة الكلية
- قارن المسافة التي حصلت عليها مع المسافة المباشرة القاهرة-الإسكندرية
الحل الكامل
السؤال 1 (4 نقاط) — قم بتمثيل المدن والمسافات كرسوم بياني (مصفوفة أو قائمة)
- تمثيل الرسم البياني — نقوم بتمثيل المدن كعقد والمسافات كحواف في مصفوفة.
← تم تمثيل الرسم البياني بنجاح.
السؤال 2 (5 نقاط) — اكتب خوارزمية لإيجاد أقصر مسار من القاهرة إلى الإسكندرية باستخدام طريقة التوصيل البسيطة
- خوارزمية التوصيل — نقوم بكتابة خوارزمية لإيجاد أقصر مسار باستخدام طريقة التوصيل البسيطة.
← تم إنشاء الخوارزمية بنجاح.
السؤال 3 (3 نقاط) — احسب المسار الأقصر والمسافة الكلية
- تنفيذ الخوارزمية — نقوم باستدعاء الخوارزمية لحساب المسار والمسافة.
start_city = 0 # القاهرة end_city = 1 # الإسكندرية path, total_distance = shortest_path(start_city, end_city) # path = ['القاهرة', 'الجيزة', 'الإسكندرية'], total_distance = 220 كم ParseError: Expected 'EOF', got '#' at position 17: …tart_city = 0 #̲ القاهرة end_ci…
← المسار: القاهرة -> الجيزة -> الإسكندرية، المسافة: 220 كم
السؤال 4 (3 نقاط) — قارن المسافة التي حصلت عليها مع المسافة المباشرة القاهرة-الإسكندرية
- مقارنة المسافات — نقوم بمقارنة المسافة التي حصلنا عليها مع المسافة المباشرة.
direct_distance = 220 # القاهرة-الإسكندرية comparison = "أقصر" if total_distance == direct_distance else "أطول" # المسافة متساوية (220 كم) ParseError: Expected 'EOF', got '#' at position 24: …istance = 220 #̲ القاهرة-الإسكن…
← المسافة متساوية (220 كم) - لا يوجد مسار أقصر من المسافة المباشرة في هذه الحالة
سلم التقدير
| تمثيل الرسم البياني بشكل صحيح | 4 نقاط |
| إنشاء خوارزمية التوصيل بشكل صحيح | 5 نقاط |
| تنفيذ الخوارزمية وحساب المسار والمسافة بشكل صحيح | 3 نقاط |
| مقارنة المسافات بشكل صحيح | 3 نقاط |
تصميم خوارزمية بسيطة للتنبؤ بعدد الكلمات في نص مستقبلي (15 نقطة)
شركة تكنولوجيا مصرية تريد التنبؤ بعدد الكلمات في رواية مستقبلية بناءً على عدد الكلمات في روايات سابقة. لديك البيانات التالية لعدد الكلمات في 5 روايات سابقة: 50000، 60000، 72000، 86400، 103680. لاحظ أن الزيادة تحدث بنسبة 20% كل مرة. قم بتصميم خوارزمية بسيطة للتنبؤ بعدد الكلمات في الرواية السادسة.
- عدد الكلمات في الروايات السابقة: 50000، 60000، 72000، 86400، 103680
- معدل النمو: 20% لكل رواية
- اكشف عن النمط في تسلسل عدد الكلمات
- اكتب دالة بايثون لحساب عدد الكلمات في الرواية التالية بناءً على النمط
- احسب عدد الكلمات المتوقعة في الرواية السادسة
- إذا كان معدل النمو 15% بدلاً من 20%، فما هو عدد الكلمات المتوقع في الرواية السادسة؟
الحل الكامل
السؤال 1 (3 نقاط) — اكشف عن النمط في تسلسل عدد الكلمات
- اكتشاف النمط — نقوم بملاحظة أن كل رقم هو 1.2 ضعف الرقم السابق (معدل نمو 20%).
pattern = [50000, 60000, 72000, 86400, 103680] # كل عنصر = العنصر السابق * 1.2 ParseError: Expected 'EOF', got '#' at position 48: …86400, 103680] #̲ كل عنصر = العن…
← النمط: كل رواية تحتوي على 20% أكثر كلمات من السابقة
السؤال 2 (5 نقاط) — اكتب دالة بايثون لحساب عدد الكلمات في الرواية التالية بناءً على النمط
- إنشاء الدالة — نقوم بإنشاء دالة تأخذ عدد الكلمات الأخيرة ومعدل النمو، ثم تحسب عدد الكلمات التالية.
← تم إنشاء الدالة بنجاح.
السؤال 3 (4 نقاط) — احسب عدد الكلمات المتوقعة في الرواية السادسة
- تنبؤ الرواية السادسة — نقوم باستخدام الدالة لحساب عدد الكلمات في الرواية السادسة.
next_words = predict_words(103680, 20) # 103680 * 1.2 = 124416 ParseError: Expected 'EOF', got '#' at position 40: …ds(103680, 20) #̲ 103680 * 1.2 =…
← 124416 كلمة
السؤال 4 (3 نقاط) — إذا كان معدل النمو 15% بدلاً من 20%، فما هو عدد الكلمات المتوقع في الرواية السادسة؟
- تعديل معدل النمو — نقوم بتعديل معدل النمو إلى 15% وحساب عدد الكلمات المتوقع.
next_words_15 = predict_words(103680, 15) # 103680 * 1.15 = 119232 ParseError: Expected 'EOF', got '#' at position 43: …ds(103680, 15) #̲ 103680 * 1.15 …
← 119232 كلمة
سلم التقدير
| اكتشاف النمط في تسلسل عدد الكلمات بشكل صحيح | 3 نقاط |
| إنشاء الدالة لحساب عدد الكلمات المتوقع بشكل صحيح | 5 نقاط |
| حساب عدد الكلمات في الرواية السادسة بشكل صحيح | 4 نقاط |
| حساب عدد الكلمات مع معدل نمو 15% بشكل صحيح | 3 نقاط |