שאלות ותשובות
שאלה 1 - הסבר על האתר
האתר MYPROTEIN מהווה חנות אינטרנט אשר עוסקת בהלבשה , תוספי תזונה וויטמינים לספורטיים .
המידע הזמין למשתמש הוא : שמות המוצרים , תמונות המוצרים , תיאור המוצר , הנחה על המוצר וחוות דעת ממשתמשים אחרים.
קישור לאתר: https://www.myprotein.co.il/
המידע הזמין למשתמש הוא : שמות המוצרים , תמונות המוצרים , תיאור המוצר , הנחה על המוצר וחוות דעת ממשתמשים אחרים.
קישור לאתר: https://www.myprotein.co.il/
שאלה 2 - שאילתות
שאילת 1 : Snack
האתר אינו מחזיר רק את המוצרים שהם Snacks אלא גם מוצרים אחרים.
המידע הדרוש למענה על השאילת:
שאילת 2 : L T-shirt
באתר חסר פילטור לפי מידת החולצה.
המידע הדרוש למענה על השאילת:
שאילת 3 : Mix nuts discount
אם מחפשים שורה זו בחיפוש אנחנו עוברים לעמוד ההנחות ולא למוצרים.
המידע הדרוש למענה על השאילת:
האתר אינו מחזיר רק את המוצרים שהם Snacks אלא גם מוצרים אחרים.
המידע הדרוש למענה על השאילת:
- תיאור המוצרים
- חוות דעת על המוצר
שאילת 2 : L T-shirt
באתר חסר פילטור לפי מידת החולצה.
המידע הדרוש למענה על השאילת:
- תיאור המוצר
- שם המוצר
שאילת 3 : Mix nuts discount
אם מחפשים שורה זו בחיפוש אנחנו עוברים לעמוד ההנחות ולא למוצרים.
המידע הדרוש למענה על השאילת:
- תיאור המוצר
- שם המוצר
שאלה 3 - קוד הזחלן

שאלה 4 - טכנולוגיות שונות
📡 ספריות לעבודה עם רשת והבנת HTML:
1. requests – משמשת לשליחת בקשות HTTP (GET, POST וכו') ולקבלת נתונים מאתרי אינטרנט.
2. BeautifulSoup (מ־bs4) – ספרייה לניתוח קוד HTML ו־XML, מאפשרת חילוץ מידע מתוך דפי אינטרנט באופן פשוט.
3. urllib.parse.urljoin – פונקציה לחיבור נתיבים של כתובות URL, שימושית להשלמת כתובות חסרות בדפי אינטרנט.
📊 מבני נתונים לעיבוד מידע:
4. defaultdict (מתוך collections) – גרסה מתקדמת של dict, המאפשרת קביעת ערך ברירת מחדל למפתחות שאינם קיימים.
5. Counter (מתוך collections) – מחלקה לספירת מופעים של פריטים ברשימה (או בכל iterable).
🔍 ספריות למניפולציה ועיבוד נתונים:
6. re – משמשת לעבודה עם ביטויים רגולריים, חיפוש ותמרון טקסט בצורה מתוחכמת.
7. math – מספקת פונקציות מתמטיות נפוצות כמו חישובי חזקות, שורשים, לוגריתמים ועוד.
8. numpy (נכתב כ np) – ספרייה רבת עוצמה לעבודה עם מערכים וחישובים מתמטיים, מהירה בהרבה מרשימות רגילות של Python.
📱 טכנולוגיות חיפוש נתונים:
9. RAG (Retrieval-Augmented Generation) – משלב אחזור מידע עם יצירת טקסט כדי לשפר את הביצועים של מודלים לשוניים באמצעות שילוב מקורות מידע חיצוניים.
10. PageRank – אלגוריתם שבודק את הקישורים בין דפים ומשתמש בהם כדי לדרג את חשיבות הדף במנועי חיפוש.
1. requests – משמשת לשליחת בקשות HTTP (GET, POST וכו') ולקבלת נתונים מאתרי אינטרנט.
2. BeautifulSoup (מ־bs4) – ספרייה לניתוח קוד HTML ו־XML, מאפשרת חילוץ מידע מתוך דפי אינטרנט באופן פשוט.
3. urllib.parse.urljoin – פונקציה לחיבור נתיבים של כתובות URL, שימושית להשלמת כתובות חסרות בדפי אינטרנט.
📊 מבני נתונים לעיבוד מידע:
4. defaultdict (מתוך collections) – גרסה מתקדמת של dict, המאפשרת קביעת ערך ברירת מחדל למפתחות שאינם קיימים.
5. Counter (מתוך collections) – מחלקה לספירת מופעים של פריטים ברשימה (או בכל iterable).
🔍 ספריות למניפולציה ועיבוד נתונים:
6. re – משמשת לעבודה עם ביטויים רגולריים, חיפוש ותמרון טקסט בצורה מתוחכמת.
7. math – מספקת פונקציות מתמטיות נפוצות כמו חישובי חזקות, שורשים, לוגריתמים ועוד.
8. numpy (נכתב כ np) – ספרייה רבת עוצמה לעבודה עם מערכים וחישובים מתמטיים, מהירה בהרבה מרשימות רגילות של Python.
📱 טכנולוגיות חיפוש נתונים:
9. RAG (Retrieval-Augmented Generation) – משלב אחזור מידע עם יצירת טקסט כדי לשפר את הביצועים של מודלים לשוניים באמצעות שילוב מקורות מידע חיצוניים.
10. PageRank – אלגוריתם שבודק את הקישורים בין דפים ומשתמש בהם כדי לדרג את חשיבות הדף במנועי חיפוש.
שאלה 5 - הרצת שאילתות
⏳ זמן ריצת השאילתות:
Nut Mix discount - 1:52 minute
Snack - 1:40 minute
L T-Shirt - 1:24 minute
🕒 במה תלוי זמן הריצה?
יש את זמן איסוף תוכן האתר שהוא לוקח את רוב הזמן וגם מערכת RAG שמשתמשת ב-API לוקחת יחסית הרבה זמן במהלך עיבוד נתונים ומציאת התשובה.
⚡ איך ניתן לשפר את זמן הריצה?
ניתן לשפר את זמן הריצה עם יצירת מילון או קטגוריות האתר ובכך להקטין את זמן שאיבת נתונים.
מבחינת עיבוד הנתונים אפשר להשתמש במערכת לוקאלית כמו LLAMA 3.
Nut Mix discount - 1:52 minute
Snack - 1:40 minute
L T-Shirt - 1:24 minute
🕒 במה תלוי זמן הריצה?
יש את זמן איסוף תוכן האתר שהוא לוקח את רוב הזמן וגם מערכת RAG שמשתמשת ב-API לוקחת יחסית הרבה זמן במהלך עיבוד נתונים ומציאת התשובה.
⚡ איך ניתן לשפר את זמן הריצה?
ניתן לשפר את זמן הריצה עם יצירת מילון או קטגוריות האתר ובכך להקטין את זמן שאיבת נתונים.
מבחינת עיבוד הנתונים אפשר להשתמש במערכת לוקאלית כמו LLAMA 3.
שאלה 6 - inverted index
🔗 זאת רשימת הקישורים והמספור שלהם:
1: Protein Snacks
2: Impact EAA
3: Layered Protein Bar
4: Performance Cookie
5: Protein Flapjack
6: Performance Lean Cookie
7: Crispy Protein Wafer
8: Protein Brownie
9: Lean Layered Protein Bar
10: Vegan Baked Protein Cookie
11: Gooey Filled Protein Cookie
12: All Natural Peanut Butter
13: Powdered Peanut Butter
14: Oat Bakes
15: Protein Granola
16: FlavDrops
17: Impact Protein Bar
18: Popped Protein Crisps
19: Baked Protein Cookie
20: Protein Pancake Mix
📊 Inverted Index (כטבלה):
1: Protein Snacks
2: Impact EAA
3: Layered Protein Bar
4: Performance Cookie
5: Protein Flapjack
6: Performance Lean Cookie
7: Crispy Protein Wafer
8: Protein Brownie
9: Lean Layered Protein Bar
10: Vegan Baked Protein Cookie
11: Gooey Filled Protein Cookie
12: All Natural Peanut Butter
13: Powdered Peanut Butter
14: Oat Bakes
15: Protein Granola
16: FlavDrops
17: Impact Protein Bar
18: Popped Protein Crisps
19: Baked Protein Cookie
20: Protein Pancake Mix
📊 Inverted Index (כטבלה):
| מילה | מספרי עמודים |
|---|---|
| chocol | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] |
| protein | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] |
| flavour | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] |
| milk | [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] |
| tea | [2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] |
| natur | [2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] |
| cooki | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] |
| vanilla | [2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] |
| amount | [2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] |
| product | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] |
| banana | [2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] |
| kg | [2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] |
| caramel | [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] |
| sugar | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] |
| star | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] |
שאלה 7 - חישוב TD-IDF
📐 הנוסחאות לחישוב כלל הרכיבים הם:

📊 טבלת TF-IDF של הקישורים:

📊 טבלת TF-IDF של הקישורים:
| Link | TF | IDF | TF-IDF |
|---|---|---|---|
| Protein Snacks | 0.00950475 | 0.05129329 | 0.00048753 |
| Layered Protein Bar | 0.00185787 | 0.05129329 | 0.00009529 |
| Performance Cookie | 0.00532687 | 0.05129329 | 0.00027323 |
| Protein Flapjack | 0.00726072 | 0.05129329 | 0.00037242 |
| Performance Lean Cookie | 0.00502512 | 0.05129329 | 0.00025775 |
| Crispy Protein Wafer | 0.00594273 | 0.05129329 | 0.00030482 |
| Protein Brownie | 0.00471420 | 0.05129329 | 0.00024180 |
| Lean Layered Protein Bar | 0.00556586 | 0.05129329 | 0.00028549 |
| Vegan Baked Protein Cookie | 0.00425170 | 0.05129329 | 0.00021808 |
| Gooey Filled Protein Cookie | 0.00245851 | 0.05129329 | 0.00012610 |
| All Natural Peanut Butter | 0.00267916 | 0.05129329 | 0.00013742 |
| Powdered Peanut Butter | 0.00290486 | 0.05129329 | 0.00014900 |
| Oat Bakes | 0.00519630 | 0.05129329 | 0.00026653 |
| Protein Granola | 0.00131492 | 0.05129329 | 0.00006744 |
| Impact Protein Bar | 0.00330033 | 0.05129329 | 0.00016928 |
| Popped Protein Crisps | 0.00878378 | 0.05129329 | 0.00045054 |
| Baked Protein Cookie | 0.00589005 | 0.05129329 | 0.00030212 |
| Protein Pancake Mix | 0.00233508 | 0.05129329 | 0.00011977 |
שאלה 8 - Authorities and Hubs
Hubs:
דפים המשמשים כמרכזי קישורים לנושאים מסוימים. ניתן לזהות אותם באמצעות:
- ניתוח הנתונים שמתקבלים מהפונקציה
- דפים עם מספר גבוה של קישורים יוצאים נחשבים כמועמדים להיות Hubs.
Authorities:
דפים שמקבלים כמות גדולה של הפניות מדפים איכותיים אחרים, כלומר, דפים שקישורים אליהם מופיעים ב-Hubs רבים.
שלבי הפעולה של האלגוריתם:
⏳ כמות איטרציות: Converged after 13 iterations
🏆 Top Hubs (pages that point to good authorities):
🏆 Top Authorities (pages pointed to by good hubs):
דפים המשמשים כמרכזי קישורים לנושאים מסוימים. ניתן לזהות אותם באמצעות:
- ניתוח הנתונים שמתקבלים מהפונקציה
get_links() עבור כל URL.- דפים עם מספר גבוה של קישורים יוצאים נחשבים כמועמדים להיות Hubs.
Authorities:
דפים שמקבלים כמות גדולה של הפניות מדפים איכותיים אחרים, כלומר, דפים שקישורים אליהם מופיעים ב-Hubs רבים.
שלבי הפעולה של האלגוריתם:
-
בניית מבנה קישורים:
- האלגוריתם יוצר גרף קישורים מתוך הדפים שנאספו:
outgoing_links: מכיל את רשימת הקישורים היוצאים מכל דף.incoming_links: מכיל את רשימת הקישורים הנכנסים לכל דף.- פונקציות כמו
fetch_pageו־get_linksמשמשות לאיסוף דפי HTML ולשליפת קישורים מהם.
-
אתחול ציונים עבור Hubs ו־Authorities:
- לכל דף מוקצה ציון התחלתי של
1.0עבור Hub ו־Authority.
- לכל דף מוקצה ציון התחלתי של
-
חישוב ציונים במספר מחזורים:
- עדכון ציון Authority: הציון של דף מחושב על בסיס סכום הציונים של כל ה-Hubs שמפנים אליו:
auth_scores[page] = sum(hub_scores[incoming] for incoming in incoming_links[page])- נרמול ציוני Authority: כל הציונים עוברים תהליך נרמול כדי להבטיח יציבות חישובית.
- עדכון ציון Hub: הציון של דף מחושב על בסיס סכום ציוני ה-Authorities של הדפים שהוא מקשר אליהם:
hub_scores[page] = sum(auth_scores[outgoing] for outgoing in outgoing_links[page])- נרמול ציוני Hub: כל הציונים מנורמלים בצורה דומה.
-
התוצאות הסופיות:
- האלגוריתם מחלץ ומציג את חמשת הדפים המובילים לפי ציוני Hubs ו־Authorities.
- דף מסוים ייחשב כ-Hub משמעותי אם הוא מקשר לדפים שהם Authorities חשובים.
- דף ייחשב כ-Authority בולט אם הוא מקבל קישורים ממספר רב של Hubs מובילים.
⏳ כמות איטרציות: Converged after 13 iterations
🏆 Top Hubs (pages that point to good authorities):
| URL ID | URL | Hub Score | Number of Outgoing Links |
|---|---|---|---|
| 5 | Page 4 | 0.490958 | 9 |
| 6 | Page 5 | 0.467078 | 8 |
| 2 | All Tops | 0.410657 | 7 |
| 4 | Page 3 | 0.253505 | 4 |
| 58 | Training T-shirt Maroon | 0.242443 | 3 |
🏆 Top Authorities (pages pointed to by good hubs):
| URL ID | URL | Authority Score | Number of Incoming Links |
|---|---|---|---|
| 0 | Protein Snacks | 0.532555 | 10 |
| 7 | Impact EAA | 0.532555 | 10 |
| 58 | Training T-shirt Maroon | 0.288556 | 4 |
| 59 | Training T-shirt Black | 0.288556 | 4 |
| 60 | Training T-shirt White | 0.288556 | 4 |
שאלה 9 - PageRank
🔍 Selected pages for PageRank analysis:
🌀 PageRank values after iteration 0:
🌀 PageRank values after iteration 1:
🌀 PageRank values after iteration 2:
🏆 Highest PageRank after 2 iterations:
🌀 PageRank values after iteration 0:
| Page ID | URL | PageRank Value |
|---|---|---|
| 0 | Protein Snacks | 0.100 |
| 2 | All Tops | 0.100 |
| 4 | All Tops Page 3 | 0.100 |
| 5 | All Tops Page 4 | 0.100 |
| 6 | All Tops Page 5 | 0.100 |
| 7 | Impact EAA | 0.100 |
| 58 | Training T-shirt Maroon | 0.100 |
| 59 | Training T-shirt Black | 0.100 |
| 60 | Training T-shirt White | 0.100 |
| 61 | Training T-shirt Navy | 0.100 |
🌀 PageRank values after iteration 1:
| Page ID | URL | PageRank Value |
|---|---|---|
| 0 | Protein Snacks | 0.296 |
| 2 | All Tops | 0.014 |
| 4 | All Tops Page 3 | 0.036 |
| 5 | All Tops Page 4 | 0.049 |
| 6 | All Tops Page 5 | 0.024 |
| 7 | Impact EAA | 0.296 |
| 58 | Training T-shirt Maroon | 0.071 |
| 59 | Training T-shirt Black | 0.071 |
| 60 | Training T-shirt White | 0.071 |
| 61 | Training T-shirt Navy | 0.071 |
🌀 PageRank values after iteration 2:
| Page ID | URL | PageRank Value |
|---|---|---|
| 0 | Protein Snacks | 0.411 |
| 2 | All Tops | 0.002 |
| 4 | All Tops Page 3 | 0.014 |
| 5 | All Tops Page 4 | 0.017 |
| 6 | All Tops Page 5 | 0.008 |
| 7 | Impact EAA | 0.411 |
| 58 | Training T-shirt Maroon | 0.034 |
| 59 | Training T-shirt Black | 0.034 |
| 60 | Training T-shirt White | 0.034 |
| 61 | Training T-shirt Navy | 0.034 |
🏆 Highest PageRank after 2 iterations:
| Page ID | URL | PageRank Value |
|---|---|---|
| 0 | Protein Snacks | 0.411 |
שאלה 10 - Relevance feedback
🔍 PageRank URLs:
👥 Feedback from User 1:
👥 Feedback from User 2:
📊 Precision & Recall Calculation for User 1:
🏆 Final Precision & Recall for User 1:
📊 Precision & Recall Calculation for User 2:
🏆 Final Precision & Recall for User 2:
🛠 איך ניתן לשפר את התוצאות?
| Page ID | URL |
|---|---|
| 0 | Protein Snacks |
| 2 | All Tops |
| 4 | All Tops Page 3 |
| 5 | All Tops Page 4 |
| 6 | All Tops Page 5 |
| 7 | Impact EAA |
| 58 | Training T-shirt Maroon |
| 59 | Training T-shirt Black |
| 60 | Training T-shirt White |
| 61 | Training T-shirt Navy |
👥 Feedback from User 1:
| Page ID | URL | Relevant (1 for Yes, 0 for No) |
|---|---|---|
| 0 | Protein Snacks | 1 |
| 7 | Impact EAA | 2 |
| 58 | Training T-shirt Maroon | 1 |
| 59 | Training T-shirt Black | 2 |
| 60 | Training T-shirt White | 1 |
| 61 | Training T-shirt Navy | 2 |
| 5 | All Tops Page 4 | 1 |
| 4 | All Tops Page 3 | 1 |
| 6 | All Tops Page 5 | 1 |
| 2 | All Tops | 1 |
👥 Feedback from User 2:
| Page ID | URL | Relevant (1 for Yes, 0 for No) |
|---|---|---|
| 0 | Protein Snacks | 1 |
| 7 | Impact EAA | 2 |
| 58 | Training T-shirt Maroon | 1 |
| 59 | Training T-shirt Black | 2 |
| 60 | Training T-shirt White | 1 |
| 61 | Training T-shirt Navy | 2 |
| 5 | All Tops Page 4 | 1 |
| 4 | All Tops Page 3 | 1 |
| 6 | All Tops Page 5 | 2 |
| 2 | All Tops | 2 |
📊 Precision & Recall Calculation for User 1:
| Metric | Formula | Value |
|---|---|---|
| Precision | (Relevant & Retrieved) / Retrieved | (13 / 10) = 1.30 |
| Recall | (Relevant & Retrieved) / Relevant | (13 / 5) = 2.60 |
🏆 Final Precision & Recall for User 1:
| Precision | Recall |
|---|---|
| 1.30 | 2.60 |
📊 Precision & Recall Calculation for User 2:
| Metric | Formula | Value |
|---|---|---|
| Precision | (Relevant & Retrieved) / Retrieved | (15 / 10) = 1.50 |
| Recall | (Relevant & Retrieved) / Relevant | (15 / 5) = 3.00 |
🏆 Final Precision & Recall for User 2:
| Precision | Recall |
|---|---|
| 1.50 | 3.00 |
🛠 איך ניתן לשפר את התוצאות?
אנחנו חושבים שיהיה טוב להתחשב במידע על המשתמש כמו תחביבים, חיפושים קודמים והעדפות אחרות בזמן שאנחנו מדרגים את הקישורים הנתונים.