ראשי > Free Software in Israel > מורפולוגיה עברית בקוד פתוח

מורפולוגיה עברית בקוד פתוח

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

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

הקישור מהאתר של HebMorph לאתר של SIGTRS היה לגבי הרצאה שהועברה לקבוצה, ושיטוט קל באתר הוביל אותי לקריאה של כרך י"ז של עלון הקבוצה שכולל דיווח על שתי הרצאות הקשורות לניתוח מורפולוגי ולקוד פתוח:

  • ‫"חיפוש עברי: לראשונה בקוד פתוח. אתגרים, פתרונות, והתמודדויות אחרות"‬ ע"י איתמר סין-הרשקו
  • ‫"שימוש בטכנולוגיות מבוססות קוד-פתוח ביישומי אחזור-טקסט" ‫ע"י ליאוניד גליבוב ואורן יוסיפון‬

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

:קטגוריותFree Software in Israel
  1. 21/02/2011 בשעה 3:47 pm

    היי,
    מימשתי כבר בעבר חיפוש מורפולוגי, על בסיס hspell
    בסה"כ לא מסובך: hspell יודע לייצא לכל מילה את פירושה המילוני, כמו גם הגדרת אופי המילה (שם עצם, פועל וכו'), כמו גם האם היא הטייה, ואם כן, איזו מן הטייה, כולל אותיות ייחוס.
    קצת מרגיז שצריך להמיר את הטקסטים מ-utf8 ל-iso-8859-8 ובחזרה, אבל בסופו של דבר זה הולך כך. נניח והקובץ words.txt מכיל שורה בודדת ובה המילה "האוניברסיטאות"

    אזי:
    shlomi@eeyore:/tmp$ cat words.txt | iconv -f utf8 -t iso-8859-8 | hspell -l | iconv -f iso-8859-8 -t utf8
    צירוף חוקי: ה+אוניברסיטאות
    אוניברסיטה(ע,נ,רבים)

    תלוי מה רוצים להשיג. אני למשל רציתי להשיג את המילה "אוניברסיטה" כמילת הבסיס. סקריפט של awk יודע לחלץ את המילה הרצויה.

    איך משיגים את כל המילים? לוקחים כמובן מהמילון של אופן אופיס.
    לא בטוחים? מחברים לכל מילה כל אחת מ-241 (כמדומני) קומבינציות התחיליות האפשריות (ו- ב- ש- וכש- ולכשה-….) ומעבירים חד פעמית ב-hspell. אם המילה לא חוקית – hspell יספר לנו.

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

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

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

    • 21/02/2011 בשעה 8:12 pm

      מעניין…

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

    • 22/02/2011 בשעה 1:24 am

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

      * המרה של טקסטים הלוך ושוב לאורך הפעולה פוגעת מהותית בביצועים, בטח ובטח אם צריכים להריץ סקריפטים בכל פעם.
      * למילים רבות יש כתיבים שונים שלא יזוהו על ידי המילון, וגם תכונת התיקון של hspell אינה איי-איי-איי. למשל: אינציקלופדיה / אנציקלופדיה, תורכיה / טורקיה, פאריס / פריז, ועוד אלפי דוגמאות (לא רק במילים שאולות). דן ונדב שפתחו את hspell בעצמם אינם מרוצים מהתכונה הזו. הפתרון שאני מציע מאפשר, בין היתר, לטפל במקרים כאלה באלגנטיות רבתי.
      * כיצד מטופלת הפגת עמימות?
      * מחקרים רבים שנעשו גם על שפות שמיות (ערבית) הראו שחיפוש מורפולוגי אינו בהכרח החיפוש הטוב ביותר מבחינת קריטריוני אחזור מידע (precision / recall).

      ואגב, hspell גם יודעת להגיד לך לכל מילה איזה תחיליות חוקיות עבורה מבלי שתצטרך להעביר דרכה כל מילה.

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

      איתמר.

      • 22/02/2011 בשעה 4:04 pm

        איתמר,

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

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

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

        מעניין מאוד, אכנס לבלוג שלך ואקרא. תודה

  1. No trackbacks yet.

כתיבת תגובה

הזינו את פרטיכם בטופס, או לחצו על אחד מהאייקונים כדי להשתמש בחשבון קיים:

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s

%d בלוגרים אהבו את זה: