זיהוי המתקשר מתבלבל
מכיר את הבעיה מבלקברי.
אני חושב שאם תגדיר את המספרים תחת אותה קטגוריה הוא לא יתבלבל.
נגיד מופיע לך יוסי נייד 0526666666
ו אורי בית 036666666.
אז אם תרשום את המספר בבית של אוי כאילו זה ניד. כלומר אורי ניד 036666666 הוא לא יחליף בינם. לא ניסיתי אבל יש בזה היגיון.
בכל אופן אני בגלל ההתחכמות של הבלקברי קיבלתי SMS מסבתא שלי לאחר מותה...
אני חושב שאם תגדיר את המספרים תחת אותה קטגוריה הוא לא יתבלבל.
נגיד מופיע לך יוסי נייד 0526666666
ו אורי בית 036666666.
אז אם תרשום את המספר בבית של אוי כאילו זה ניד. כלומר אורי ניד 036666666 הוא לא יחליף בינם. לא ניסיתי אבל יש בזה היגיון.
בכל אופן אני בגלל ההתחכמות של הבלקברי קיבלתי SMS מסבתא שלי לאחר מותה...
תן רמז.osherov כתב:אני בטוח משה שתצליח להגיע לבד לתשובה...
אולי לא תמיד יש מספר מלא ברשתות מסוימות (לא יודע אם במציאות, אך תאורטית) , אך במקרה המדובר המכשיר הציג מספר מלא, אז מה מונע ממישהו להשתמש בו ל lookup?
נערך לאחרונה על ידי moco ב 26/06/2012 22:06, נערך פעם 1 בסך הכל.
משה
המכשירים נבנו לכל הרשתות בעולם, נתוני המתקשר (Caller ID) יכולים להשתנות ממפעיל למפעיל
המספר 054-123456 לדוגמא יכול להגיע למכשיר אחר כמספר:
054-123456
972-54-123456
123456 (בחלק מהמקומות במידה שאתה מנוי אצל אותו המפעיל הקידומת יורדת)
אם המכשיר היה בודק את כל המספר, אז היו לא מעט פעמים שהמכשיר לא היה מצליח בכלל לחבר את המספר לאיש הקשר אצלך (תאר לך ששמרת שם דווקא את המספר 972-54-123456). לכן עדיף "לפספס" את המקרה החריג מאוד בו יש לך שני אנשי קשר עם אותו מספר (למעט הקידומת) על לפספס הרבה יותר פעמים את החיבור לאיש קשר קיים
המספר 054-123456 לדוגמא יכול להגיע למכשיר אחר כמספר:
054-123456
972-54-123456
123456 (בחלק מהמקומות במידה שאתה מנוי אצל אותו המפעיל הקידומת יורדת)
אם המכשיר היה בודק את כל המספר, אז היו לא מעט פעמים שהמכשיר לא היה מצליח בכלל לחבר את המספר לאיש הקשר אצלך (תאר לך ששמרת שם דווקא את המספר 972-54-123456). לכן עדיף "לפספס" את המקרה החריג מאוד בו יש לך שני אנשי קשר עם אותו מספר (למעט הקידומת) על לפספס הרבה יותר פעמים את החיבור לאיש קשר קיים
מסתבר שרבים מתלוננים על דברים דומים: http://code.google.com/p/android/issues/detail?id=8770
מעבר לכך, לגוגל יש ספרייה לטיפול בנושא, אז השאלה היא למה לא משתמשים בה , או שכן אך לא מאפשרים לקנפג פרמטרים עבורה: http://code.google.com/p/libphonenumber/
מעבר לכך, לגוגל יש ספרייה לטיפול בנושא, אז השאלה היא למה לא משתמשים בה , או שכן אך לא מאפשרים לקנפג פרמטרים עבורה: http://code.google.com/p/libphonenumber/
משה
הפתרון לא פשוט. אני מביא לכם דוגמא (ממכשיר אמיתי) של מספרי Caller ID (את המספרים עצמם כמובן ששיניתי):
541111111
1541111111+
1541111111
972541111111+
8001111111
0541111111
הדבר הראשון שמתבקש לשאול כאן הוא למה לא לבדוק קודם את כל המספר (עם הקידומת, עם הסיומת) ורק אח"כ, במידה ואין התאמה, לבדוק רק את X הספרות האחרונות (נניח 6). הסיבה לכך (אני מניח) קשורה לזמן החיפוש הארוך יותר שייגרם פה. אם יש לך 5000 אנשי קשר במכשיר, אז לכל מתקשר יש צורך:
1. לחפש Full Match לכל המספר. אם לא נמצא אז
2. לחפש partially match על חלק מהמספר (לדוגמא לחפש 97254111111 במקום 97254111111+), אם לא נמצא אז
3. לחפש Full Match למספר בלי "הקידומת"
-אגב, אין בעייה לעשות את זה בדיוק כמו שמקשרים אנשי קשר. ההבדל הוא ששם, זמן הביצוע הוא חשוב הרבה פחות
-אגב, נוסף, אני מניח שברור לכם שאנשי הקשר נשמרים בבסיס נתונים (ככה לפחות באנדרואיד וב iOS) על המכשיר. לדעתי האינדוקס של הטבלאות הוא רק על המספר החלקי (ולכן החיפוש הוא מהיר מאוד).
הדלקת אותי משה ולכן הלכתי לכמה חוקרים אצלי בחברה כדי לשאול אותם האם באמת יש פה בעיית אלגוריתם או שהסיפור פתיר ות'אמת הסיפור נראה פתיר, אפילו די בקלות. כחובב חידות אני אתן לך לחשוב על האלגוריתם המהיר לפתרון הבעייה (תוכל לשלוח את זה לסמסונג
)
541111111
1541111111+
1541111111
972541111111+
8001111111
0541111111
הדבר הראשון שמתבקש לשאול כאן הוא למה לא לבדוק קודם את כל המספר (עם הקידומת, עם הסיומת) ורק אח"כ, במידה ואין התאמה, לבדוק רק את X הספרות האחרונות (נניח 6). הסיבה לכך (אני מניח) קשורה לזמן החיפוש הארוך יותר שייגרם פה. אם יש לך 5000 אנשי קשר במכשיר, אז לכל מתקשר יש צורך:
1. לחפש Full Match לכל המספר. אם לא נמצא אז
2. לחפש partially match על חלק מהמספר (לדוגמא לחפש 97254111111 במקום 97254111111+), אם לא נמצא אז
3. לחפש Full Match למספר בלי "הקידומת"
-אגב, אין בעייה לעשות את זה בדיוק כמו שמקשרים אנשי קשר. ההבדל הוא ששם, זמן הביצוע הוא חשוב הרבה פחות
-אגב, נוסף, אני מניח שברור לכם שאנשי הקשר נשמרים בבסיס נתונים (ככה לפחות באנדרואיד וב iOS) על המכשיר. לדעתי האינדוקס של הטבלאות הוא רק על המספר החלקי (ולכן החיפוש הוא מהיר מאוד).
הדלקת אותי משה ולכן הלכתי לכמה חוקרים אצלי בחברה כדי לשאול אותם האם באמת יש פה בעיית אלגוריתם או שהסיפור פתיר ות'אמת הסיפור נראה פתיר, אפילו די בקלות. כחובב חידות אני אתן לך לחשוב על האלגוריתם המהיר לפתרון הבעייה (תוכל לשלוח את זה לסמסונג
הבנתי, אבל על זה נאמר Perfect is the enemy of the good.
כלומר, פתרון מושלם הוא אומנם בלתי אפשרי אם דורשים זמן חישוב מהיר מאוד, אבל מה שהצעתי נותן פתרון טוב ואפילו טוב מאוד.
למשל, אם בדוגמא שנתת אני אוכל לקבוע שמשתמשים ב9 ספרות (וכך יאנדקסו את בסיס הנתונים), אז אני מצליח בכל המספרים חוץ מה800. בעצם אני יכול להצליח גם שם אם אני רושם את מספר ה800 כמספר נוסף של אותו איש קשר.
כלומר, פתרון מושלם הוא אומנם בלתי אפשרי אם דורשים זמן חישוב מהיר מאוד, אבל מה שהצעתי נותן פתרון טוב ואפילו טוב מאוד.
למשל, אם בדוגמא שנתת אני אוכל לקבוע שמשתמשים ב9 ספרות (וכך יאנדקסו את בסיס הנתונים), אז אני מצליח בכל המספרים חוץ מה800. בעצם אני יכול להצליח גם שם אם אני רושם את מספר ה800 כמספר נוסף של אותו איש קשר.
משה
משה,
אם תקבע שמשתמשים נניח ב 9 ספרות אז אתה בבעיה. כי אז מה שיקרה הוא שהרבה פעמים ירשם לך רק המספר טלפון בלי השיוך שלו לשם שמופיע באנשי הקשר שלך. לדוגמא, נניח שרשמת שימוש ב 9 ספרות ובאנשי הקשר שלך רשמת את המספר הבא:
054-111111
אבל בפועל ה Caller ID שהגיע למכשיר הוא 111111 (כי נניח אתם באותה הרשת). זאת תהיה בעייה גדולה הרבה יותר מאשר הסיכוי שיש לך 2 אנשי קשר עם אותו מספר (מה גם שזה ידרוש ינדוקס מחדש כל פעם שאתה משנה את ההגדרה הזאת)
אם תקבע שמשתמשים נניח ב 9 ספרות אז אתה בבעיה. כי אז מה שיקרה הוא שהרבה פעמים ירשם לך רק המספר טלפון בלי השיוך שלו לשם שמופיע באנשי הקשר שלך. לדוגמא, נניח שרשמת שימוש ב 9 ספרות ובאנשי הקשר שלך רשמת את המספר הבא:
054-111111
אבל בפועל ה Caller ID שהגיע למכשיר הוא 111111 (כי נניח אתם באותה הרשת). זאת תהיה בעייה גדולה הרבה יותר מאשר הסיכוי שיש לך 2 אנשי קשר עם אותו מספר (מה גם שזה ידרוש ינדוקס מחדש כל פעם שאתה משנה את ההגדרה הזאת)
או. קי., אז אפשר לפתור את זה בשאילתה עם שני pass-ים, כשהשני קצרצר (משהו כמו multi-segment keys בלשון DB).
אני אומנם לא מתמצא במערכת הזו, אבל אני עדיין לא משתכנע שיש פה בעייה עקרונית, כלומר שנדרש זמן חישוב ארוך מהסביר, וכאמור, אני לא מחפש פתרון מושלם לכל מצב.
למה בנוקיה הישן לא הייתה לי בעייה כזו? מכשיר חלש בהמון מבחינת כוח חישוב ממכשיר האנדרויד הכי איטי שיש.
אני מהמר שזו פשוט בעייה לא נפוצה ואין הרבה תלונות, ולכן לא נמצאת בצמרת רשימת העדיפויות לתיקון.
אני אומנם לא מתמצא במערכת הזו, אבל אני עדיין לא משתכנע שיש פה בעייה עקרונית, כלומר שנדרש זמן חישוב ארוך מהסביר, וכאמור, אני לא מחפש פתרון מושלם לכל מצב.
למה בנוקיה הישן לא הייתה לי בעייה כזו? מכשיר חלש בהמון מבחינת כוח חישוב ממכשיר האנדרויד הכי איטי שיש.
אני מהמר שזו פשוט בעייה לא נפוצה ואין הרבה תלונות, ולכן לא נמצאת בצמרת רשימת העדיפויות לתיקון.
משה
הפתרון הוא מאוד פשוט.
ב pass הראשון אתה שולף מבסיס הנתונים את כל המספרים שיש להם match מלא למספר המאונקס (ללא הסיומת)=פעולה מהירה מאוד
במקרה ויש לך יותר ממספר אחד (מקרה חריג מאוד), אז אתה נכנס לבדיקה נוספת בה אתה בוחן מי מהמספרים ששלפת הוא הקרוב ביותר ל Caller ID שהגיע =פעולה מהירה מאוד
אולי זאת גם הסיבה שבחלק מהמכשירים זה כן עובד בצורה תקינה
ב pass הראשון אתה שולף מבסיס הנתונים את כל המספרים שיש להם match מלא למספר המאונקס (ללא הסיומת)=פעולה מהירה מאוד
במקרה ויש לך יותר ממספר אחד (מקרה חריג מאוד), אז אתה נכנס לבדיקה נוספת בה אתה בוחן מי מהמספרים ששלפת הוא הקרוב ביותר ל Caller ID שהגיע =פעולה מהירה מאוד
אולי זאת גם הסיבה שבחלק מהמכשירים זה כן עובד בצורה תקינה



