דף הבית  >> 
 >> 

הרשם  |  התחבר


שיקולים בפיתוח מנגנון חיפוש בעברית למערכות מידע. 

מאת    [ 04/07/2007 ]

מילים במאמר: 807   [ נצפה 4052 פעמים ]

נשאלתי בפורום:
שאלת אותי איך מחפשים בעברית עם כל התחיליות:"ה", "ש", "שה", "כ", "כש", "כשה", "ל", "מ", "מה", "שמה", "ב", "שב"
ויש גם את הסופיות?

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

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

בעיקרון FULLTEXT יכול לתת לך מלה מתאימה כמעט - עם אות אחת שונה או שתי אותיות שונות במילה. להגיד שמידת ההתאמה נמוכה. ,בנוסף FULLTEXT עושה סטטיסטיקה ומדרג לפי כמות הופעות של מילה ומרחק בין יותר מ2 מילים ומידת ההתאמה (אם חסרה אות).
http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html

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


בטח יש אפשרות מאתגרת:
לכתוב פונקציה שמוסיפה את התחיליות למילה. ופונקציה נוספת שמוסיפה את הסופיות לפי 'מספר תחילית' ומילה. ולפי הפונקציות האלה לכתוב עוד פונקציה שמוחקת אם היא יכולה את התחילית ופונקציה נוספת שמוחקת את הסופית אם הי יכולה.
בהתחלה להשתמש בפונקציות המוחקות ולייצר את כל הקומבינציות של המילה המקורית שאפשרית. ואז לייצר את כל הקומבינציות מכל המילים הבסיסיות שמצאנו. בהתחלה לחפש את כל המילים הבסיסיות בSQL ואז את המילים המוטות בעזרת PHP .
רק יש עם זה בעיה ממילה 'ברק' אפשר לקבל 'מרק' וגם 'רק' שזה מילים שונות לגמרי. לכן מסתבכים עוד ובודקים מבנה של משפט שבו מופיעה המילה לפי מבנים סטנדרטיים. אבל כאן זה כבר מסתבך יותר מידי בערך כמו ברמה של גוגל שמבקש עבודות ממרכז לחקר השפה בטכניון בחיפה יש להם אתר עם פרסומים של מילונים ותוכנות בJAVA שזה מחקר ורק מעניין בלי תוצאות בפועל.
וזה שייך לעיבוד שפות טבעיות.
http://www.cs.technion.ac.il/~ornan/maamarim/mno&%20xippu$%20b-&ibrit.doc
חיפשתי בגוגל 'חיפוש בטקסטים עבריים'
---------
אבל מה שכן בפועל יש להם שרות WEB של ניתוח מורפולוגי יתכן ויש טעם להשתמש בו.
http://mila.cs.technion.ac.il/index.html
-

אם אתה חושב על זה גם SQL וגם PHP זו שפת סקריפט לכך המהירות צריכה להיות דומה. וגם PHP וגם SQL משתמשים בערך באותן פונקציות של חיפוש כתובות בשפת C. אז זה לא משנה בעזרת מה תחפש זה משנה. זה משפיע לאיזה משך זמן הזיכרון יהיה תפוס אבל מי מתחשב בזה. במילה לא כולם מחפשים בו זמנית.

בנוסף יש לי ניסיון להשתמש ב OR הרבה פעמים בחיפוש ID (מספר) במקום FIND IN SET או IN()... זה עבד הרבה יותר מהר מJOIN - עשיתי JOIN סינטטי בעת השימוש בעזרת PHP וזה עבד הרבה יותר מהר ותפס הרבה פחות זיכרון בשילוב כזה.

לפני כשנה עשיתי מערכת חיפוש מה שעשיתי זה חיפשתי עם LIKE את כל מה שיכול להתאים
ואז בדקתי במדוקדק על ידי PHP בעזרת פונקצית חיפוש שמוצאת מילים עם הבדל של אות אחת - או כמה שרוצים.
http://elonen.iki.fi/code/misc-notes/appr-search-php/approximate-search.phps

אפשר להשתמש ב REGEX ואז אפשר לעשות סטטיסטיקה ואז לסדר את המערך לפי הסטטיסטיקה.
זה עובד מספיק טוב ומספיק מהר כאשר המידע נמצא בזיכרון החלק האיטי זה לטעון את המידע מההרדיסק.
זה ממש מהר לייצר דירוג ל נגיד מקסימום 1000 שתמצא על ידי MY SQL ואז לדרג אתה מערך בPHP ואז לסדר את המערך.
המחשבים של היום זה לא 286 - כלומר אפשר לעשות חיפוש אפילו בPHP רק לעשות טעינה מדויקת על ידי SQL

כך ש זה ממש תלוי לאיזו מטרה אתה בונה את החיפוש. אם זה לאתר לכתבות שיש בו פחות מ 250 כתבות תשתמש בחיפוש הכי פשוט LIKE עם '%משהו%'. אם זה עד 1000 כתבות בערך תעשה את החיפוש המשולב של חפש את הביטוי המדויק בעזרת LIKE '%משהו משהו%' ועם חפש את כל המילים עם LIKE '%משהו%' OR LIKE '%משהו אחר%' או חיפוש של FULLTEXT.
בשני המקרים הביצועים מספיק יעילים לחיפוש רק על ידי PHP ולא בעזרת SQL.

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

אבל מה אם אנגלית? שם זה פשוט, יש לך את הFULLTEXT שעושה עבודה טובה.

כתבה מאת שמעון דודקין.
מפתח WEB מקצועי בשפות תכנות
פופולאריות PHP ASP MYSQL PL SQL JAVA CPP...
נותן יעוץ ושרות תיקונים ותחזוקה לאתרים.
http://help.me.pro.googlepages.com
בונה אתרים בהזמנה וחנויות אינטרנט.
אפשר לבנות אתר פשוט ודינאמי עם פרסום בגוגל וכרטיס אשראי - סיפור הצלחה. כמובן אפשר מערכת יותר משוכללת למי שמבקש. מחירים בינוניים.



מאמרים חדשים מומלצים: 

חשבתם שרכב חשמלי פוטר מטיפולים? תחשבו שוב! -  מאת: יואב ציפרוט מומחה
מה הסיבה לבעיות האיכות בעולם -  מאת: חנן מלין מומחה
מערכת יחסים רעילה- איך תזהו מניפולציות רגשיות ותתמודדו איתם  -  מאת: חגית לביא מומחה
לימודים במלחמה | איך ללמוד ולהישאר מרוכז בזמן מלחמה -  מאת: דניאל פאר מומחה
אימא אני מפחד' הדרכה להורים כיצד תוכלו לנווט את קשיי 'מצב המלחמה'? -  מאת: רזיאל פריגן פריגן מומחה
הדרך שבה AI (בינה מלאכותית) ממלאת את העולם בזבל דיגיטלי -  מאת: Michael - Micha Shafir מומחה
ספינת האהבה -  מאת: עומר וגנר מומחה
אומנות ברחבי העיר - זרז לשינוי, וטיפוח זהות תרבותית -  מאת: ירדן פרי מומחה
שיקום והעצמה באמצעות עשיה -  מאת: ילנה פיינשטיין מומחה
איך מורידים כולסטרול ללא תרופות -  מאת: קובי עזרא יעקב מומחה

מורנו'ס - שיווק באינטרנט

©2022 כל הזכויות שמורות

אודותינו
שאלות נפוצות
יצירת קשר
יתרונות לכותבי מאמרים
מדיניות פרטיות
עלינו בעיתונות
מאמרים חדשים

לכותבי מאמרים:
פתיחת חשבון חינם
כניסה למערכת
יתרונות לכותבי מאמרים
תנאי השירות
הנחיות עריכה
תנאי שימוש במאמרים



מאמרים בפייסבוק   מאמרים בטוויטר   מאמרים ביוטיוב