ABA


"מאמר נחמד וקליל על ניקוי כתבות מעמודי HTML"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #15881 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 15881
Nokia
חבר מתאריך 1.7.02
538 הודעות
   20:52   08.05.10   
אל הפורום  
  מאמר נחמד וקליל על ניקוי כתבות מעמודי HTML  
 
   הקדמה

באחד הפרוייקטים שהיו לי במהלך התואר, הייתי צריך לבנות סוג של Crawler שיוריד כתבות (במקרה שלי כלכליות) מכל מיני אתרים שGoogle Finance מקשר אליהם. בהנתן כתובת האתר, להוריד את קוד המקור שלו זאת עבודה טכנית. אבל מה נעשה כשנרצה לבודד רק את הכתבה מתוך העמוד הנ"ל ? הרי הכתבה מצוייה בין עשרות\מאות טאגים שכוללים סקריפטים למיניהם, תפריטים של האתר וכו'.. איך נבודד את התוכן נטו מתוך כל הרעש מסביב ?
לי אישית היה קשה למצוא שיטה שתעבוד ברוב המקרים ורוב האתרים שנתקלתי בהם הביאו אותי לשיטות לא כ"כ טובות שעבדו בפחות מ50% מהמקרים (אפשרי שלא חיפשתי מספיק, אבל באותה תקופה חיפשתי די הרבה).
בסופו של דבר, הגעתי למאמר משנת 2009 על השיטה שאני אפרט למטה

המטרה

בידוד תוכן הכתבה מעמוד HTML אקראי

שיטות אפשריות

אם אנחנו מכירים את האתר, אז עם קצת פעולות טכניות אפשר להגיע בקלות לבידוד של כל כתבה מהאתר משום שנוכל לדעת איך האתר מייצג את הכתבות שלו (משתמש ב<div> או ב<p> ואיפה נמצאת הכותרת וכו'. יש אלגוריתמים שהם Supervised, כלומר לומדים, שבהנתן קלט מתוייג יכולים להגיע לדיוק מאוד גבוה.
המטרה שלנו היא למצוא שיטה שתעבוד באחוזים טובים על כל אתר.
יוריסטיקה אפשרית היא להסתכל על הטאגים שהתוכן שלהם הכי גדול.. מהצורה נניח <p> * </p> כשהאורך של * מקסמימלי. הבעיה היא שאין שום הבטחה שלא ישתרבבו לתוך התוכן טאגים שמכילים זכויות יוצרים וכו'.

השיטה שלנו

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

פסאודוקד:

איך השיטה מיושמת על עמודי HTML?

נתחיל מזה שנמחק מהקוד מקור את כל הקטעים שהם מהצורה
<script> * </script> וכן מהצורה <style> * </style> שכן הקטעים האלה אף פעם לא יכילו תוכן רלוונטי לכתבה.
לאחר מכן, נכניס למערך את כל הטוקנים בקוד המקור (טוקן מבחינתנו הוא או טאג או מה שנמצא בין 2 טאגים). נייצר לכל טוקן ערך נומרי כשבמאמר בחרו לעשות את זה בצורה הבאה: טאג יקבל ערך נומרי 3.25- ואילו תוכן שבין טאגים יקבל 1 עבור עבור כל מילה או סימן בתוכו (ובסה"כ את מס' המילים + הסימנים), מהניסיון שלי אפשר לשחק עם הערכים האלה. עבור המערך הנ"ל של הערכים הנומריים נחשב MSS והקטע שנקבל יהיה הקטע של הכתבה + טאגים שנמצאים בין המשפטים (שאותם אפשר לנקות בקלות אח"כ)

מה האינטואיציה מאחורי זה ?

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

ביצועים שהשיטה השיגה לפי המאמר שלקחתי ממנו:


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

המאמר שלקחתי את השיטה ממנה (מדובר בBASELINE II ולא באלגוריתמים הלומדים):

Extracting Article Text from the Web with Maximum
Subsequence Segmentation
http://www2009.org/proceedings/pdf/p971.pdf

תהנו!


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

  האשכול     מחבר     תאריך כתיבה     מספר  
  תודה... :) מאוד מעניין אנשים שצריכים דברים בסגנון Nesher  08.05.10 21:53 1
  מגניב ביותר! :) ronen333  09.05.10 12:58 2
  הפתרון הפשוט היום הוא שימוש בביטויים רגולרים, אבל פתרון מעניין הבאת:) akoka2 09.05.10 15:34 3
  מכתב Deuce  09.05.10 16:00 4
     נכון, אתה צודק... השיטה מפספסת את הכותרת בד''כ Nokia 09.05.10 18:53 5

       
Nesher  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.7.02
2 הודעות, 24 פידבק
   21:53   08.05.10   
אל הפורום  
  1. תודה... :) מאוד מעניין אנשים שצריכים דברים בסגנון  
בתגובה להודעה מספר 0
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   12:58   09.05.10   
אל הפורום  
  2. מגניב ביותר! :)  
בתגובה להודעה מספר 0
 
   כל הכבוד אחי! אני אוהב את הדברים שאתה כותב.. ישר כוח ;)

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


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

   15:34   09.05.10   
אל הפורום  
  3. הפתרון הפשוט היום הוא שימוש בביטויים רגולרים, אבל פתרון מעניין הבאת:)  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   16:00   09.05.10   
אל הפורום  
  4. מכתב  
בתגובה להודעה מספר 0
 
זאת שיטה לא רעה, אם כי ניתנת להפלה לקראת תחילת וסוף הכתבה שם כמות הטקסט לא כל כך גדולה ויכולה להיות מובסת על ידי טוקנים של טאגים.

לפי איך שאני רואה את זה, השימוש שלך בשיטה היה כדי להוציא את הבשר של הכתבה מופרדת עם טוקנים בסיסיים (<p>, <div> וכו') במקום לרוץ על כל הטקסט ולהתעסק בזוטות. אני חושב שזה נחמד.







                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Nokia
חבר מתאריך 1.7.02
538 הודעות
   18:53   09.05.10   
אל הפורום  
  5. נכון, אתה צודק... השיטה מפספסת את הכותרת בד''כ  
בתגובה להודעה מספר 4
 
   בפרוייקט שלי תכלס לא הכי הייתי צריך את הכותרת אלא באמת את הגוף של הכתבה אבל ניסיתי להוסיף פיצ'רים כדי לתפוס את הכותרת (נניח התוכן הראשון של טאג כמו p או div שבא לפני התת סדרה)


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

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

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



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