ABA


"למישהו יש מידע איך עובד חיפוש FULLTEXT?"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #10908 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 10908
יוחאי
חבר מתאריך 30.12.15
163 הודעות
   13:15   25.09.12   
אל הפורום  
  למישהו יש מידע איך עובד חיפוש FULLTEXT?  
 
   צריך שיהיה משהו ממש מפורט, לא רק ברמת הDB, ממש התיאוריה מאחורי זה.


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  ? יוחאי 28.09.12 18:27 1
  החיפוש של CTRL + F? Dr_69 28.09.12 18:38 2
     חח יוחאי 28.09.12 19:03 3
  מצאתי איזה מאמר, אולי יעזור לך. Dr_69 28.09.12 19:57 4
  חיפוש FULLTEXT זה קונספט כללי עם מימושים מגוונים Deuce  29.09.12 00:51 5
     מעניין:) שאלה יוחאי 29.09.12 01:00 6
         מכתב Deuce  29.09.12 01:36 8
  אצלי בעבודה משתמשים בזה בקטנה.. VeNom  29.09.12 01:10 7

       
יוחאי
חבר מתאריך 30.12.15
163 הודעות
   18:27   28.09.12   
אל הפורום  
  1. ?  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dr_69
חבר מתאריך 24.3.02
1275 הודעות
   18:38   28.09.12   
אל הפורום  
  2. החיפוש של CTRL + F?  
בתגובה להודעה מספר 0
 
  



                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
יוחאי
חבר מתאריך 30.12.15
163 הודעות
   19:03   28.09.12   
אל הפורום  
  3. חח  
בתגובה להודעה מספר 2
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dr_69
חבר מתאריך 24.3.02
1275 הודעות
   19:57   28.09.12   
אל הפורום  
  4. מצאתי איזה מאמר, אולי יעזור לך.  
בתגובה להודעה מספר 0
 
   http://onlamp.com/pub/a/onlamp/2003/06/26/fulltext.html



                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   00:51   29.09.12   
אל הפורום  
  5. חיפוש FULLTEXT זה קונספט כללי עם מימושים מגוונים  
בתגובה להודעה מספר 0
 
הבעיה היא שיש לנו אוסף של מסמכים במאגר ובהינתן חיפוש בשפה חופשית של מילים, אנחנו נרצה לאחזר את המסמכים שעונים על השאלה.

הפתרון הנאיבי הוא לעבור על כל המסמכים ולאחזר את המסמכים בהם הטקסט מופיע כ-substring במסמך הנתון. חסרון אחד הוא יעילות מכיוון שאנחנו רצים על כל המילים בכל המסמכים שלנו במאגר; אמנם נקבל בדיוק את כל התוצאות שמכילות את מחרוזת החיפוש, אבל במנועי אחזור על מסמכים נרצה בד"כ להתחשב במורפולוגיה, stemming, stop-words ועוד, לדוגמה עבור המחרוזת "הילד היפה" אני ארצה לראות תוצאות שמכילות את המחרוזת "ילד יפה", "הילד הגדול והיפה", "הילדים היפים" וכו'.

אני אציג גישה כללית לפתרון בעיית היעילות ותוכל לגזור משמעויות לגבי התרומה של זה על הדרך למורפולוגיה ואחזור חכם יותר.

הרעיון הכללי הוא לאנדקס את הטקסט בצורות שונות כך שבהינתן מחרוזת חיפוש, לא תצטרך לרוץ על כל המילים בכל הטקסטים. יש מבני נתונים שמאנדקסים טקסטים בצורה מאד כבדה בזיכרון, אבל חכמה בגישה כמו suffix-tree, שבעזרתם אתה יכול לחפש מחרוזות בטקסטים שלמים בצורה מאד מהירה.

גישה נוספת שעליה אני ארחיב מעט (ובד"כ היא מובנית ב-DATABASES) היא inverted-index. אתה מאנדקס למעשה את הקורפוס (קרי המילים שמופיעות בטקסטים) באופן כזה שאם המילה "ילד" הופיעה במסמכים 1,5 ו-7 אז תהיה רשומה בטבלה entries שמצמידה את המילה "ילד" עם מסמכים 1,5 ו-7 (ולפעמים גם שומרת את המיקומים בהם המילה מופיעה במסמך). אתה רוצה לאנדקס צורה קנונית של המילה (אתה יכול למשל לאחד ללבוש, לבש, לבוש לתוך צורה קנונית של ל.ב.ש או לשמור צורות קנוניות עם חלקי הדיבר שלו, לדוגמה הצורה הקנונית ל.ב.ש מופיעה בטקסט 5 כשם עצם ומופיעה בטקסט 9 כפועל בזמן עבר). על הדרך אתה נפטר מ-stopwords (מילות קישור למיניהן למשל "את", הא הידיעה, "עם").
עתה, איך אתה מבצע תהליך של אחזור? כאשר אני מחפש "הילד היפה", אני מבצע תהליך מורפולוגי על המילים במשפט ואחפש למעשה ב-inverted-index באיזה טקסטים המילה "ילד" והמילה "יפה" הופיעו. אני אבצע חיתוך בין התוצאות ואפעיל אלגוריתם דירוג שיקבע את רלוונטיות התוצאות (כך למשל משפט כמו "הילדים אכלו מרק והקפידו על תיונה בריאה. אין פלא שלאחר מספר שנים הפכו אלו לנערים חסונים ויפים" יכול לחזור בשיטה זו).

אז מה אתה מרוויח?
שיפור משמעותי ביעילות - במקום לרוץ על כל הטקסטים, אתה רץ על אינדקסים (למשל inverted-index).
אתה מאחזר תוצאות שאתה רוצה לראות.

כמובן שכדאי להשתמש בזה רק כאשר הבעיה היא בעיית אחזור על טקסטים גדולים. לצערנו הכלים המובנים ב-DATABASES הם סבירים מינוס לשפה האנגלית וגרועים לשפות אחרות. יש חברות שלמות שמתעסקות רק בשירותים מורפולוגים, אחרות עובדות על אלגוריתמי דירוג חכמים, אחרות על האינדוקס עצמו (האם לאנדקס לפי terms, האם לציין שמות עצם, עצמים, לבצע תהליך של texnomia ועוד המון דברים).






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
יוחאי
חבר מתאריך 30.12.15
163 הודעות
   01:00   29.09.12   
אל הפורום  
  6. מעניין:) שאלה  
בתגובה להודעה מספר 5
 
   נתת דוגמא עם המשפט "הילד היפה", עכשיו הטקסט שלנו יהיה מפורק למילים "ילד" "יפה", מה הגישות הנכונות לניתוח משפטים מהסוג הזה? איך בעצם דואגים להוריד את האות ה' ב-2 המילים.

האם מחזיקים מאגר של מילים?(אני מאמין שלא, בגלל זה הדרך מעניינת אותי)

אתה יכול קצת להרחיב יותר על suffix-tree?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   01:36   29.09.12   
אל הפורום  
  8. מכתב  
בתגובה להודעה מספר 6
 
כל התחום של ניתוח מבנה המילה נקרא מורפולוגיה (WIKIPEDIA).

בהנחה שאין לך יכולות חישוב מבוזר ולייצר מכונה לומדת עפ"י חיפושים של אנשים, אתה יכול לבנות מנוע מורפולוגי. מנוע מורפולוגי זה למעשה אוסף של חוקים בבלשנות שנבנים על שפה מסוימת. יש מספר חברות ישראליות שהשקיעו שנים כדי לפתח מנוע עם כל החוקים ומוכרים אותו לחברות שונות. ע"מ לייצר מנוע כזה בעברית צריך לעבוד עם חוקרי שפה עברית ובלשנים ולבנות מערכת שיודעת ללמוד חוקים חודשים. בהינתן משפט בשפה חופשית, יש לנו את הבינה לבצע לו ניתוח תחבירי (נושא, נשוא, מושא) ומשם לגזור אותו לצורת המקור - צריך רק להסביר למחשב איך לעשות את זה

לגבי suffix-tree זה עץ סיפות בעברית. זה עץ ששומר עבור את כל המילים ודוחף אותם לתוך עץ אחד לפי הברות. למשל כדי לחפש את המילה "מלחה" אני אלך לשורש העץ שמכיל את האות "מ" ומשם אסתעף למילה "לח" שתסגור לי את המילה "מלח" ומשם ל"ה".
http://upload.wikimedia.org/wikipedia/commons/thumb/a/ae/Patricia_trie.svg/320px-Patricia_trie.svg.png

לבנות את העץ לוקח המון המון זמן! אבל היתרון הוא למשל שכדי לבדוק כמה פעמים המילה "הארי פוטר" מופיעה בספר "הארי פוטר ואבן החכמים" (ספר של 600 עמודים+), אני אצטרך פשוט לחפש את המילה בעץ ולראות כמה פעמים היא מופיעה (עלות של O(1)).






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
VeNom  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 7.6.02
7922 הודעות, 1 פידבק
   01:10   29.09.12   
אל הפורום  
  7. אצלי בעבודה משתמשים בזה בקטנה..  
בתגובה להודעה מספר 0
 
   כמובן שזה עולם ומלואו ואי אפשר להשוות את זה לFULLTEXT במנועי חיפוש וכאלה.

אצלנו יש תיאורי מוצר בDB(עד בערך 400 תוים), כאשר לכל תיאור כזה יש מספר KEY WORDS כללים ששמורים בטבלת אמצע שמקשרת בין תיאור ל KEYWORDS.

שמשתמש מכניס בתיבת הטקסט מילה, היא עוברת דרך ממשק שמחזיר אוסף של מילים נרדפות\קשורות, ומבצעים חיפוש סדרתי ב DB(בעמודת ה KEY WORDS), כמובן שהכל ממויין וזה נותן ביצועים שהם "סבירים".

ברור שאפשר לייעל את זה, אבל אנחנו לא גוגל ולמטרות שלנו זה נעשה בזמן סביר של 2 שניות בערך(אז אין מה להיכנס לפתרונות שהם קצת יותר מתוחכמים), אבל זה עולם ומלואו.

לרוב מה שתכניס בתיבת הטקסט עובר דרך ממשק שמחזיר לך מילים "תואמות" נוספות שמתאימות לחיפוש(הוא גם משמיט מילים מיותרות ויתקן לך שגיאות כתיב על הדרך) ואז יוצאים לחיפוש על פי KEYWORDS ב DB(שיהי מאונדקס היטב)..כמובן שהקוד יכיל מבני נתונים יעילים וכו'..
אני מאמין שבחברות שבאמת עושות בזה שימוש מאסיבי יש כמה דאטה בייסים כשאתה עושה חיפוש במקביל(אולי וריציה של MAP REDUCE או משהו)..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net