לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

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



  #2  
ישן 24-11-2015, 07:57
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,775
בתגובה להודעה מספר 1 שנכתבה על ידי tbe שמתחילה ב "in_array מקסימום מקומות"

סביר להניח שהמגבלה תלויה בעיקר בזיכרון (אני לא רואה סיבה שתהיה מגבלה אחרת, אלא אם כן היא מלאכותית). צריך להתחשב בזה שלא מדובר פה ב C, והמידע שלך צורך (הרבה?) יותר זיכרון ממה שאתה חושב: https://nikic.github.io/2011/12/12/...y-Hint-BIG.html

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

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

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

כמובן, שעצם הרעיון לבנות אינדקס בעצמך של דברים כשיש מוצרי מדף כמו Sphinx/ElasticSearch ודומיהם, ואולי אפילו MySQL Full-Index Search, שסביר להניח שעושים את זה בצורה מאוד אופטימאלית כיוון שזה ייעודם בחיים, הוא רעיון שכדאי לשקול כמה פעמים לפני שעושים אותו, בייחוד אם אתה מדבר על scale ולא על תרגיל מחשבתי שלא אמור לרוץ ב production.
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
נמאס לכם לזכור סיסמאות? לחצו כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #11  
ישן 30-11-2015, 17:52
צלמית המשתמש של קוביבי
  משתמש זכר קוביבי קוביבי אינו מחובר  
מנהל פורום מערכות הפעלה - הרובע המייקרוסופטי.
 
חבר מתאריך: 07.10.04
הודעות: 13,777
LinkedIn profile
בתגובה להודעה מספר 10 שנכתבה על ידי tbe שמתחילה ב "היי חשבתי לעשות את זה. אבל..."

אני די בטוח שאתה עושה משהו לא נכון...
אבל נגיע לזה לאט לאט.
1. המקסימום ID שאתה יכול להשתמש בו הוא קצת פחות מ-2.5 מיליארד אם אתה משתמש ב int כמפתח הראשי שלך (בsql, אני מניח שoracle זהה)
http://stackoverflow.com/questions/...ey-in-sqlserver

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

3. הרעיון שלי הוא שלא תוריד מילים "לא מעניינות", תסרוק אותן גם-כן (הרי בטבלה יש לך מפתח - שהו המילה ומספר - שהוא כמות הפעמים שנתקלת בה, זה לא תופס מקום בכלל) ואז כשתרצה לשלוף את המידע - תבקש מבסיס הנתונים את כל המילים שהמפתחות שלהם לא מופיעות בטבלת ה exceptions, משהו בסגנון (הSQL שלי קצת חלוד אז לא לצחוק)
קוד PHP:
 select from tWords where tWords.word not in (select word from tExceptions

תגדיר 2 טבלאות, אחת עם מפתח word ושדה timesEncountered והטבלה השנייה עם מפתח id ושדה word ותן לבסיס הנתונים לעשות את העבודה של לשלוף לך את הנתונים המסוננים בלי לעבוד קשה מידי, הוא תמיד יעשה את זה יותר יעיל ממך, בשביל זה הם מקבלים יותר כסף מכולנו ביחד.
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #13  
ישן 06-12-2015, 10:24
צלמית המשתמש של קוביבי
  משתמש זכר קוביבי קוביבי אינו מחובר  
מנהל פורום מערכות הפעלה - הרובע המייקרוסופטי.
 
חבר מתאריך: 07.10.04
הודעות: 13,777
LinkedIn profile
בתגובה להודעה מספר 12 שנכתבה על ידי tbe שמתחילה ב "היי קובי, כנראה שלא הבנו אחד..."

הבנתי, למרות שלדעתי אתה צריך לשמור אותם לפי סוג אתר ולא לפי אתר (כי בצורה כזו 2 כתבות בynet ייצור לך כפילות של המון מילים שאין סיבה, עדיף לבצע grouping של אתרים לפי סוגים, לדוגמה טכנולוגיה, בריאות וכו')
אם ככה אתה מתכנן את הקוד שלך אז עדיף לעשות את המחיקה לפני ההכנסה לבסיס הנתונים, הקוד שלך ייראה בערך כך (c#, כנראה יש דרכים יעילות יותר - אני רק מסביר רעיון):
קוד:
class wordsData{ public int Id; public String Word; public int orginiatingSiteId; } List<wordsData> siteWords; List<String> exceptionWords; siteWord = readWebsiteStats(website); exceptionWords = readExceptionWordsTable(); foreach(var word in exceptionWords){ siteWord.RemoveAll(x => x.Word == word); }


בסופו של דבר תוסיף את כל ה siteWords לטבלה הרצוייה, כאשר תעשה את זה לכול דף/קבוצת דפים שאתה קורא בנפרד, כאשר בממוצע כתבות הן באיזור ה 300-700 מילה לא אמורה להיות לך בעיית ביצועים'
שים לב שכמו שאמרו מעלי - כדי להגיע להמלצות טובות יותר - אתה רוצה לחשוב על הוספת של מנגוננים של מילים דומות (אם אתה נתקל במילים Apple או Mac, ו iPhone חבל לספור את זה כ-3 מילים נפרדות - די ברור מה הכוונה, בנוסף אתה רוצה להבין אם הכתבה בדרך בשבח או בגנות הנושא כדי לדעת מה דעתו של הקורא, בדומה ל like בפייסבוק, רק אוטומטי)
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה


נערך לאחרונה ע"י קוביבי בתאריך 06-12-2015 בשעה 10:24. סיבה: תיקון זריז ולא נכון לגירסה קודמת של ההודעה
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #15  
ישן 08-12-2015, 09:58
צלמית המשתמש של קוביבי
  משתמש זכר קוביבי קוביבי אינו מחובר  
מנהל פורום מערכות הפעלה - הרובע המייקרוסופטי.
 
חבר מתאריך: 07.10.04
הודעות: 13,777
LinkedIn profile
בתגובה להודעה מספר 14 שנכתבה על ידי tbe שמתחילה ב "היי קובי, הנקודה היא כזאת אני..."

1. למה "חייב"? אתה לא מפתח את המערכת בעצמך לשימוש שלך? הלקוח דרש שתעשה דברים בצורה כזו? הייתי חושב על זה שוב, אבל כאמור - תכנון שלך ואני מניח שבדקת סטטיסטית וראית שזו הדרך המתאימה לך.
2. פשוט תחליף site ב article או address.
3. בשלוף - הייתי הופך כל תו מיוחד (נקודות, פסיקים, מקף, סלאשים) לרווח ואז חותך רווחים כפולים לפני האינדוקס עם 2 יוצאי דופן - מרכאות וגרשים, אם הם מקיפים עד 4 מילים הייתי שומר אותם כמילה אחת, אחרת הופך אותם גם-כן לרווחים. 4 נשמע כמו מספר מתאים של מילים שעדיין לא יכללו פתגמים/ציטוטים אבל כן ייכללו מילים שאמורים לבוא ביחד.

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #16  
ישן 08-12-2015, 16:28
  tbe tbe אינו מחובר  
 
חבר מתאריך: 03.01.12
הודעות: 149
בתגובה להודעה מספר 15 שנכתבה על ידי קוביבי שמתחילה ב "1. למה "חייב"? אתה לא מפתח את..."

היי קובי מצורפת הפונקציה הסופית אני חושב (:

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

מה אומר?

קוד PHP:
 private function save_words_in_db($post_id$content$lang)
    {
    if(
is_null($this->exceptionWords))
        {
            
$this->exceptionWords $this->getExceptionWords($lang);
        }
        
        
$content preg_replace("/[\#\,\.;&:?\[\]]+/"" "$content);
        
$content preg_replace("/\s+/"" "$content);
        
//$content = preg_replace("/[^\w\-\s]/", "", $content);
        
$content trim($content);
        
        echo 
$content;
        
        
$insert = array();
        
$pattern_cache = array();
        
$words explode(" "$content);
        
        foreach (
$words as $key => $word)
        {
            
$max_words 0;
            
            for (
$i 5$i 0$i--)
            {
                if(isset(
$words[$key $i]))
                {
                    
$max_words $i;
                    break;
                }    
            }
            
            
$pattern = array();
            
            for (
$i 0$i <= $max_words$i++)
            {
                
$string '';
                
                
$j_counter 0;
                
                for (
$j 0$j <= $i$j++)
                {
                    if(
mb_strlen($words[$key $j]) > 1)
                    {
                        if(
$j_counter++ > 0)
                        {
                            
$string .= ' ';                                            
                        }
                        
                        
$string .= $words[$key $j];                                                                    
                    }
                }
                
                
$string trim($string);
                
                
$string_md5 md5($string);
                
                if(!
array_key_exists($string_md5$pattern_cache))
                {
                    
$pattern[] = $string;
                    
$pattern_cache[$string_md5] = 1;
                }
                
            }
            
            if(!empty(
$pattern))
            {
                
preg_match_all('#'.implode('|'$pattern).'#i'$content$matchs);
                
                foreach (
$matchs as $val)
                {
                    if(!empty(
$val))
                    {
                        
$md5 md5($val[0]);
                        if(
mb_strlen($val[0]) > && !array_key_exists($md5$this->exceptionWords))
                        {
                            
$insert[$md5]['blog_id'] = $post_id;
                            
$insert[$md5]['word'] = $val[0];
                            
$insert[$md5]['show'] = count($val);                            
                        }
                        
                    }
                }
            }
            
        }
        
        echo 
'<pre>';print_r($insert);'<pre>';
        
        if(!empty(
$insert))
        {
            
//$this->db->insert_batch('words', $insert);
        
}
    } 

נערך לאחרונה ע"י tbe בתאריך 08-12-2015 בשעה 16:41.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #17  
ישן 09-12-2015, 08:06
צלמית המשתמש של קוביבי
  משתמש זכר קוביבי קוביבי אינו מחובר  
מנהל פורום מערכות הפעלה - הרובע המייקרוסופטי.
 
חבר מתאריך: 07.10.04
הודעות: 13,777
LinkedIn profile
בתגובה להודעה מספר 16 שנכתבה על ידי tbe שמתחילה ב "היי קובי מצורפת הפונקציה..."

האמת היא שזו הפעם הראשונה שאני רואה קוד PHP אז ייקח לי קצת זמן לעבור על זה... זמן שלצערי אין לי (עבודה אמיתית וזה )
אבל יש כמה דברים שמציקים לי, למעשה דבר אחד מאוד מציק לי - אתה עושה כן לולאה של n^3, כלומר - אם יש לך 10 מילים במאמר אתה עושה תיאורתית 1000 מעברים, למה? זה לא יעיל במיוחד וכשתעבור על 10,000 מאמרים בני 1000 מילים כל אחד... אתה מבין לאיזה ברוך אתה נכנס?

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

ככה על מאמר בן 10 מילים תעבור רק 30 פעם ולא 1000 (שוב, אלא אם לא קראתי את הקוד נכון, לא מתיימר להכיר PHP כשמעולם לא ראיתי קוד בשפה הזו, שלא לדבר על לכתוב בה)
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

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

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 12:15

הדף נוצר ב 0.17 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר