דילוג לתוכן
  • חוקי הפורום
  • פופולרי
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר
עיצובים
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
מתמחים טופ
  1. דף הבית
  2. תוכנות
  3. תוכנות גרפיקה עימוד ועיצוב
  4. עזרה הדדית - תוכנות גרפיקה ועיצוב
  5. הצעת ייעול | קונספט חדש לפרוייקט השו״ת

הצעת ייעול | קונספט חדש לפרוייקט השו״ת

מתוזמן נעוץ נעול הועבר עזרה הדדית - תוכנות גרפיקה ועיצוב
178 פוסטים 34 כותבים 16.9k צפיות 36 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • sivan22S sivan22

    @pcinfogmach @לא-מתייאש בהמשך לדיון על מסד הנתונים של ספריא, התחלתי לעבוד על המרה לSQLite, וזה באמת המון עבודה. גיליתי שיש שם כל כך הרבה דאטה, שזה פשוט לא לעניין לא להשתמש בזה, אבל מצד שני זה גם לא פשוט בכלל לחלץ כל כך הרבה מידע.
    בינתיים חילצתי להדגמה רק כמה נתונים בסיסיים ממש:
    bc9209da-4b35-42c3-abc9-01d37813bf64-image.png
    53a96165-0f92-4885-805d-1be64a27895c-image.png
    c8e119d7-107e-4555-94f7-f731b6a28a10-image.png
    0c61f89a-8e80-409b-b072-0e31969c64b3-image.png

    לצורך העבודה השתמשתי בעיקר בספריית pandas (הרי אני כיום מתיימר להיות מדען נתונים),וגם קצת בaggragation של MongoDB.

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

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

    M מנותק
    M מנותק
    meir lamdan
    כתב ב נערך לאחרונה על ידי
    #153

    @sivan22 כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת:

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

    schema?.titles.find(t => t.lang === 'he' && t.primary).text
    
    sivan22S תגובה 1 תגובה אחרונה
    1
    • M meir lamdan

      @sivan22 כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת:

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

      schema?.titles.find(t => t.lang === 'he' && t.primary).text
      
      sivan22S מנותק
      sivan22S מנותק
      sivan22
      כתב ב נערך לאחרונה על ידי sivan22
      #154

      @meir-lamdan כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת:

      @sivan22 כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת:

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

      schema?.titles.find(t => t.lang === 'he' && t.primary).text
      

      תודה רבה, יפה מאד! אני לא השתמשתי בשרת node אלא בפייתון עם pymongo וישר לpandas, אז הקוד שלי בסוף נראה כך:

      def get_he_title(obj)->object:
          if 'titles' in obj:
              for title in obj['titles']:
                  if title['lang'] == 'he' and 'primary' in title:
                      return title['text']
          return None
      books['he_title']=books['schema'].apply(get_he_title)
      

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

      א צדיק תמיםצ 2 תגובות תגובה אחרונה
      0
      • sivan22S sivan22

        @meir-lamdan כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת:

        @sivan22 כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת:

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

        schema?.titles.find(t => t.lang === 'he' && t.primary).text
        

        תודה רבה, יפה מאד! אני לא השתמשתי בשרת node אלא בפייתון עם pymongo וישר לpandas, אז הקוד שלי בסוף נראה כך:

        def get_he_title(obj)->object:
            if 'titles' in obj:
                for title in obj['titles']:
                    if title['lang'] == 'he' and 'primary' in title:
                        return title['text']
            return None
        books['he_title']=books['schema'].apply(get_he_title)
        

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

        א מנותק
        א מנותק
        אפי זינגר
        כתב ב נערך לאחרונה על ידי
        #155

        @sivan22 כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת:

        שרת Django

        ??
        node מקומי יעשה א"ז לאט יותר מפייתון?

        sivan22S תגובה 1 תגובה אחרונה
        0
        • א אפי זינגר

          @sivan22 כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת:

          שרת Django

          ??
          node מקומי יעשה א"ז לאט יותר מפייתון?

          sivan22S מנותק
          sivan22S מנותק
          sivan22
          כתב ב נערך לאחרונה על ידי
          #156

          @אפי-זינגר ל2 מיליון רשומות? נראה לי שכן. pandas כתובה בכלל בc++

          א תגובה 1 תגובה אחרונה
          0
          • sivan22S sivan22

            @אפי-זינגר ל2 מיליון רשומות? נראה לי שכן. pandas כתובה בכלל בc++

            א מנותק
            א מנותק
            אפי זינגר
            כתב ב נערך לאחרונה על ידי
            #157

            @sivan22 כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת:

            @אפי-זינגר ל2 מיליון רשומות? נראה לי שכן. pandas כתובה בכלל בc++

            V8 מחשב בעפרון על האוזן?
            גם C++

            sivan22S צדיק תמיםצ 2 תגובות תגובה אחרונה
            0
            • א אפי זינגר

              @sivan22 כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת:

              @אפי-זינגר ל2 מיליון רשומות? נראה לי שכן. pandas כתובה בכלל בc++

              V8 מחשב בעפרון על האוזן?
              גם C++

              sivan22S מנותק
              sivan22S מנותק
              sivan22
              כתב ב נערך לאחרונה על ידי sivan22
              #158

              @אפי-זינגר הדרך היחידה להכריע היא לבדוק בפועל. האמת שמאד קשה להשוות בין טכנולוגיות כל כך שונות. pandas פועלת על הרשומות במקביל באלגוריתמים מעולם המטריצות וnumPy, ולכן יש לה יעילות מעוררת השתאות במסדי נתונים גדולים. בנוד יש אינספור I\O שרצים באופן א-סינכרוני. אז קשה מאד לדעת מה עדיף. אולי זה גם תלוי מה המטלה.

              תגובה 1 תגובה אחרונה
              0
              • sivan22S sivan22

                @meir-lamdan כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת:

                @sivan22 כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת:

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

                schema?.titles.find(t => t.lang === 'he' && t.primary).text
                

                תודה רבה, יפה מאד! אני לא השתמשתי בשרת node אלא בפייתון עם pymongo וישר לpandas, אז הקוד שלי בסוף נראה כך:

                def get_he_title(obj)->object:
                    if 'titles' in obj:
                        for title in obj['titles']:
                            if title['lang'] == 'he' and 'primary' in title:
                                return title['text']
                    return None
                books['he_title']=books['schema'].apply(get_he_title)
                

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

                צדיק תמיםצ מנותק
                צדיק תמיםצ מנותק
                צדיק תמים
                מדריכים
                כתב ב נערך לאחרונה על ידי צדיק תמים
                #159

                @sivan22 כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת:

                אני לא השתמשתי בשרת Django

                Django זה פריימוורק פייתון, נראה שהתבלבלת במילה

                @sivan22 כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת:

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

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

                sivan22S תגובה 1 תגובה אחרונה
                1
                • א אפי זינגר

                  @sivan22 כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת:

                  @אפי-זינגר ל2 מיליון רשומות? נראה לי שכן. pandas כתובה בכלל בc++

                  V8 מחשב בעפרון על האוזן?
                  גם C++

                  צדיק תמיםצ מנותק
                  צדיק תמיםצ מנותק
                  צדיק תמים
                  מדריכים
                  כתב ב נערך לאחרונה על ידי צדיק תמים
                  #160
                  פוסט זה נמחק!
                  תגובה 1 תגובה אחרונה
                  0
                  • צדיק תמיםצ צדיק תמים

                    @sivan22 כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת:

                    אני לא השתמשתי בשרת Django

                    Django זה פריימוורק פייתון, נראה שהתבלבלת במילה

                    @sivan22 כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת:

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

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

                    sivan22S מנותק
                    sivan22S מנותק
                    sivan22
                    כתב ב נערך לאחרונה על ידי sivan22
                    #161

                    @צדיק-תמים כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת

                    אני אגב מעריך שמה שיהיה הכי יעיל זה שאילתה מתאימה ישירות למונגו ולא לטעון הכל לזיכרון ואז לולאות או ספריות

                    דווקא לא, כי שרת mongo הוא מאד איטי, בוודאי ביחס לpandas או node. וכאן הטענה שלי ודאי תקפה.

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

                    יש הרבה ניסוי וטעייה והרצתי את הקוד כמה וכמה פעמים, ומדובר על 3.5m רשומות.
                    החילוץ הוא בהתחלה להעביר הכל לpandad או לdjango.

                    אכן טעיתי כשקראתי לקוד בnode בשם הלא קשור בכלל Django. כוונתי היתה לשרת node. ונדמה לי שהמימוש של mongo בnode הוא באמת לא טוען את הכל לראם אלא רק מתווך את שרת המונגו, מה שמאשש את הטענה שמדובר בהרבה מאד I/o

                    צדיק תמיםצ תגובה 1 תגובה אחרונה
                    0
                    • sivan22S sivan22

                      @צדיק-תמים כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת

                      אני אגב מעריך שמה שיהיה הכי יעיל זה שאילתה מתאימה ישירות למונגו ולא לטעון הכל לזיכרון ואז לולאות או ספריות

                      דווקא לא, כי שרת mongo הוא מאד איטי, בוודאי ביחס לpandas או node. וכאן הטענה שלי ודאי תקפה.

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

                      יש הרבה ניסוי וטעייה והרצתי את הקוד כמה וכמה פעמים, ומדובר על 3.5m רשומות.
                      החילוץ הוא בהתחלה להעביר הכל לpandad או לdjango.

                      אכן טעיתי כשקראתי לקוד בnode בשם הלא קשור בכלל Django. כוונתי היתה לשרת node. ונדמה לי שהמימוש של mongo בnode הוא באמת לא טוען את הכל לראם אלא רק מתווך את שרת המונגו, מה שמאשש את הטענה שמדובר בהרבה מאד I/o

                      צדיק תמיםצ מנותק
                      צדיק תמיםצ מנותק
                      צדיק תמים
                      מדריכים
                      כתב ב נערך לאחרונה על ידי צדיק תמים
                      #162

                      @sivan22 כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת:

                      @צדיק-תמים כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת

                      אני אגב מעריך שמה שיהיה הכי יעיל זה שאילתה מתאימה ישירות למונגו ולא לטעון הכל לזיכרון ואז לולאות או ספריות

                      דווקא לא, כי שרת mongo הוא מאד איטי, בוודאי ביחס לpandas או node

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

                      sivan22S תגובה 1 תגובה אחרונה
                      0
                      • צדיק תמיםצ צדיק תמים

                        @sivan22 כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת:

                        @צדיק-תמים כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת

                        אני אגב מעריך שמה שיהיה הכי יעיל זה שאילתה מתאימה ישירות למונגו ולא לטעון הכל לזיכרון ואז לולאות או ספריות

                        דווקא לא, כי שרת mongo הוא מאד איטי, בוודאי ביחס לpandas או node

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

                        sivan22S מנותק
                        sivan22S מנותק
                        sivan22
                        כתב ב נערך לאחרונה על ידי sivan22
                        #163

                        @צדיק-תמים נראה לי שדיברתי הרבה שטויות והראיתי את הבורות שלי.

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

                        אופן המימוש יכול להיות באמצעות שאילתה של מונגו:

                        [
                            {
                                '$set': {
                                    'he_title': {
                                        '$filter': {
                                            'input': '$schema.titles', 
                                            'as': 'he_titles', 
                                            'cond': {
                                                '$eq': [
                                                    '$$he_titles.primary', True
                                                ]
                                            }, 
                                            'limit': 2
                                        }
                                    }
                                }
                            }, {
                                '$set': {
                                    'he_title': {
                                        '$filter': {
                                            'input': '$he_title', 
                                            'as': 'he_titles', 
                                            'cond': {
                                                '$eq': [
                                                    '$$he_titles.lang', 'he'
                                                ]
                                            }, 
                                            'limit': 2
                                        }
                                    }
                                }
                            }, {
                                '$set': {
                                    'he_title': {
                                        '$arrayElemAt': [
                                            '$he_title.text', 0
                                        ]
                                    }
                                }
                            }
                        ]
                        

                        או באמצעות קליטת הנתונים בנוד, ואז שימוש ביכולות ההתמודדות הטובות של JS עם dictionaries.:

                        myColl.find(); 
                        schema?.titles.find(t => t.lang === 'he' && t.primary).text
                        

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

                        def get_he_title(obj)->object:
                            if 'titles' in obj:
                                for title in obj['titles']:
                                    if title['lang'] == 'he' and 'primary' in title:
                                        return title['text']
                            return None
                        books['he_title']=books['schema'].apply(get_he_title)
                        

                        ואפשר בכלל להשתמש בJAVA עם קובץ JSON שיצא כפלט מהמסד נתונים:

                        protected static int addText(Connection c, JSONObject enJSON, JSONObject heJSON, JSONObject schemaFile) throws JSONException{
                        		if(enJSON == null && heJSON == null){
                        			System.err.print("Both JSONs are null in Node.addText()");
                        			return -1;
                        		}
                        		int enLang =0,heLang=0;
                        		String title ="";
                        		JSONObject node = null;
                        		if(enJSON != null){
                        			enLang = returnLangNums(enJSON.getString("language"));
                        			title = enJSON.getString("title");
                        			node = (JSONObject) enJSON.get("schema");
                        		}		
                        		if(heJSON != null){
                        			heLang = returnLangNums(heJSON.getString("language"));
                        			title = heJSON.getString("title");
                        			node = (JSONObject) heJSON.get("schema");
                        		}
                        		int lang = enLang + heLang;
                        		/**
                        		 * check for errors
                        		 */
                        		if((enLang != SQLite.LANG_EN  && enLang != 0)|| (heLang != SQLite.LANG_HE  && heLang != 0)){
                        			System.err.println("Error in Node.addText(): not right lang numbers. enLang:" + enLang  + " heLang:" + heLang);
                        			return -1;
                        		}
                        		if(title.equals("")){
                        			System.err.println("no Title");
                        			return -1;
                        		}
                        		if(enJSON != null && heJSON != null){
                        			if(!heJSON.get("schema").toString().equals(enJSON.get("schema").toString())){
                        				System.err.println("en and he JSONs schemas don't match\n");	
                        				System.out.println(heJSON.get("schema"));
                        				System.out.println(enJSON.get("schema"));
                        				return -1;
                        			}
                        			if(!enJSON.getString("title").equals(heJSON.getString("title"))){
                        				System.err.println("en and he JSONs title don't match" + enJSON.getString("title") + " - " + heJSON.getString("title"));
                        				return -1;
                        			}
                        
                        		}
                        		if(!booksInDB.containsKey(title)){
                        			System.err.println("Don't have book in DB and trying to add text");
                        			return -1;
                        		}
                        		int bid = booksInDBbid.get(title); 
                        		JSONObject enText = null, heText = null;
                        		if(enJSON != null){
                        			enText = (JSONObject) enJSON.get("text");
                        		}
                        		if(heJSON != null){
                        			heText = (JSONObject) heJSON.get("text");
                        		}
                        		JSONObject schema = null;
                        		try{
                        			schema = schemaFile.getJSONObject("schema");
                        		}catch(JSONException e){
                        			e.printStackTrace();
                        		}
                        		insertNode(c, schema, enText,heText, 0,0,bid,0,lang);
                        		return 1; //it worked
                        	}
                        
                        
                        צדיק תמיםצ תגובה 1 תגובה אחרונה
                        2
                        • האדם החושבה מנותק
                          האדם החושבה מנותק
                          האדם החושב
                          מדריכים
                          כתב ב נערך לאחרונה על ידי
                          #164

                          כמה הערות:
                          א' בכל ספר יש את גירסת ה"mergd" וגירסאות אחרות, הקובץ הרצוי לכאו' הוא קובץ הmergd ,הוא מכיל טקסט ממוזג מכמה גירסאות [גם במקרה שיש רק גירסא אחת יש קובץ mergd שזהה לקובץ השני]
                          שאר הקבצים לדעתי מיותרים וסתם יתפסו מקום במחשב
                          ב' יהיה שימושי מאוד לדעתי לעשות גם את שאר הפיצ'רים של ספריא [פרשנים, קישורים לספרים אחרים וכו'] וכמובן לאפשר ניווט לפי כותרות
                          ג' אולי גם להוסיף אפשרות לחיפוש ספרים מהיברו בוקס ואוצר החכמה ולאפשר פתיחה באתר [וגם בתוכנה, לאוצר החכמה] יש לי כאן קובץ לאוצר החכמה שכולל לינקים לאתר ולתוכנה, וכאן יש לי קובץ להיברו בוקס שמאפשר הורדה, צפייה בדפדפן והדף הראשי של הספר
                          ד' שכל הספרים שיסננו יהיו ברשימה שחורה, כך שיהיה אפשר לעדכן את התוכנה מעת לעת [אולי אפי' לאפשר עדכון מתוך התוכנה בעצמה]
                          ה' להוסיף תמיכה גם בקבצי טקסט בקידוד ansi ולאפשר טעינת קבצים מתיקיות נוספות ועל ידי כך ניתן יהיה לגשת לכל הספרים של תורת אמת מתוך התוכנה ולייתר מעבר בין תוכנות [אני מאמין שיש ל @pcinfogmach קובץ שכולל בתוכו את כל שמות הספרים מתורת אמת בעברית]
                          יש"כ עצום על היוזמה הנפלאה.

                          sivan22S P 2 תגובות תגובה אחרונה
                          2
                          • האדם החושבה האדם החושב

                            כמה הערות:
                            א' בכל ספר יש את גירסת ה"mergd" וגירסאות אחרות, הקובץ הרצוי לכאו' הוא קובץ הmergd ,הוא מכיל טקסט ממוזג מכמה גירסאות [גם במקרה שיש רק גירסא אחת יש קובץ mergd שזהה לקובץ השני]
                            שאר הקבצים לדעתי מיותרים וסתם יתפסו מקום במחשב
                            ב' יהיה שימושי מאוד לדעתי לעשות גם את שאר הפיצ'רים של ספריא [פרשנים, קישורים לספרים אחרים וכו'] וכמובן לאפשר ניווט לפי כותרות
                            ג' אולי גם להוסיף אפשרות לחיפוש ספרים מהיברו בוקס ואוצר החכמה ולאפשר פתיחה באתר [וגם בתוכנה, לאוצר החכמה] יש לי כאן קובץ לאוצר החכמה שכולל לינקים לאתר ולתוכנה, וכאן יש לי קובץ להיברו בוקס שמאפשר הורדה, צפייה בדפדפן והדף הראשי של הספר
                            ד' שכל הספרים שיסננו יהיו ברשימה שחורה, כך שיהיה אפשר לעדכן את התוכנה מעת לעת [אולי אפי' לאפשר עדכון מתוך התוכנה בעצמה]
                            ה' להוסיף תמיכה גם בקבצי טקסט בקידוד ansi ולאפשר טעינת קבצים מתיקיות נוספות ועל ידי כך ניתן יהיה לגשת לכל הספרים של תורת אמת מתוך התוכנה ולייתר מעבר בין תוכנות [אני מאמין שיש ל @pcinfogmach קובץ שכולל בתוכו את כל שמות הספרים מתורת אמת בעברית]
                            יש"כ עצום על היוזמה הנפלאה.

                            sivan22S מנותק
                            sivan22S מנותק
                            sivan22
                            כתב ב נערך לאחרונה על ידי
                            #165

                            @האדם-החושב אני חושב שהשלב הבא הוא לעשות fork לזה, ולהריץ סקריפט שמשאיר רק את הספרים בעברית, ומסיר את הספרים הבעייתיים גם בעברית.

                            תגובה 1 תגובה אחרונה
                            0
                            • האדם החושבה האדם החושב

                              כמה הערות:
                              א' בכל ספר יש את גירסת ה"mergd" וגירסאות אחרות, הקובץ הרצוי לכאו' הוא קובץ הmergd ,הוא מכיל טקסט ממוזג מכמה גירסאות [גם במקרה שיש רק גירסא אחת יש קובץ mergd שזהה לקובץ השני]
                              שאר הקבצים לדעתי מיותרים וסתם יתפסו מקום במחשב
                              ב' יהיה שימושי מאוד לדעתי לעשות גם את שאר הפיצ'רים של ספריא [פרשנים, קישורים לספרים אחרים וכו'] וכמובן לאפשר ניווט לפי כותרות
                              ג' אולי גם להוסיף אפשרות לחיפוש ספרים מהיברו בוקס ואוצר החכמה ולאפשר פתיחה באתר [וגם בתוכנה, לאוצר החכמה] יש לי כאן קובץ לאוצר החכמה שכולל לינקים לאתר ולתוכנה, וכאן יש לי קובץ להיברו בוקס שמאפשר הורדה, צפייה בדפדפן והדף הראשי של הספר
                              ד' שכל הספרים שיסננו יהיו ברשימה שחורה, כך שיהיה אפשר לעדכן את התוכנה מעת לעת [אולי אפי' לאפשר עדכון מתוך התוכנה בעצמה]
                              ה' להוסיף תמיכה גם בקבצי טקסט בקידוד ansi ולאפשר טעינת קבצים מתיקיות נוספות ועל ידי כך ניתן יהיה לגשת לכל הספרים של תורת אמת מתוך התוכנה ולייתר מעבר בין תוכנות [אני מאמין שיש ל @pcinfogmach קובץ שכולל בתוכו את כל שמות הספרים מתורת אמת בעברית]
                              יש"כ עצום על היוזמה הנפלאה.

                              P מנותק
                              P מנותק
                              pcinfogmach
                              מדריכים
                              כתב ב נערך לאחרונה על ידי pcinfogmach
                              #166

                              @האדם-החושב כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת:

                              הקובץ הרצוי לכאו' הוא קובץ הmergd ,הוא מכיל טקסט ממוזג מכמה גירסאות [גם במקרה שיש רק גירסא אחת יש קובץ mergd שזהה לקובץ השני]

                              יש קבצים שלא הספיקו לעשות להם merged עיין מאירי על הש"ס (חלק מהם) לדוגמא.

                              @האדם-החושב כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת:

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

                              אני בעד

                              @האדם-החושב כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת:

                              [אני מאמין שיש ל @pcinfogmach קובץ שכולל בתוכו את כל שמות הספרים מתורת אמת בעברית]

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

                              גמ"ח עזרה וייעוץ בנושאי מחשבים

                              האדם החושבה תגובה 1 תגובה אחרונה
                              1
                              • sivan22S sivan22

                                @צדיק-תמים נראה לי שדיברתי הרבה שטויות והראיתי את הבורות שלי.

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

                                אופן המימוש יכול להיות באמצעות שאילתה של מונגו:

                                [
                                    {
                                        '$set': {
                                            'he_title': {
                                                '$filter': {
                                                    'input': '$schema.titles', 
                                                    'as': 'he_titles', 
                                                    'cond': {
                                                        '$eq': [
                                                            '$$he_titles.primary', True
                                                        ]
                                                    }, 
                                                    'limit': 2
                                                }
                                            }
                                        }
                                    }, {
                                        '$set': {
                                            'he_title': {
                                                '$filter': {
                                                    'input': '$he_title', 
                                                    'as': 'he_titles', 
                                                    'cond': {
                                                        '$eq': [
                                                            '$$he_titles.lang', 'he'
                                                        ]
                                                    }, 
                                                    'limit': 2
                                                }
                                            }
                                        }
                                    }, {
                                        '$set': {
                                            'he_title': {
                                                '$arrayElemAt': [
                                                    '$he_title.text', 0
                                                ]
                                            }
                                        }
                                    }
                                ]
                                

                                או באמצעות קליטת הנתונים בנוד, ואז שימוש ביכולות ההתמודדות הטובות של JS עם dictionaries.:

                                myColl.find(); 
                                schema?.titles.find(t => t.lang === 'he' && t.primary).text
                                

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

                                def get_he_title(obj)->object:
                                    if 'titles' in obj:
                                        for title in obj['titles']:
                                            if title['lang'] == 'he' and 'primary' in title:
                                                return title['text']
                                    return None
                                books['he_title']=books['schema'].apply(get_he_title)
                                

                                ואפשר בכלל להשתמש בJAVA עם קובץ JSON שיצא כפלט מהמסד נתונים:

                                protected static int addText(Connection c, JSONObject enJSON, JSONObject heJSON, JSONObject schemaFile) throws JSONException{
                                		if(enJSON == null && heJSON == null){
                                			System.err.print("Both JSONs are null in Node.addText()");
                                			return -1;
                                		}
                                		int enLang =0,heLang=0;
                                		String title ="";
                                		JSONObject node = null;
                                		if(enJSON != null){
                                			enLang = returnLangNums(enJSON.getString("language"));
                                			title = enJSON.getString("title");
                                			node = (JSONObject) enJSON.get("schema");
                                		}		
                                		if(heJSON != null){
                                			heLang = returnLangNums(heJSON.getString("language"));
                                			title = heJSON.getString("title");
                                			node = (JSONObject) heJSON.get("schema");
                                		}
                                		int lang = enLang + heLang;
                                		/**
                                		 * check for errors
                                		 */
                                		if((enLang != SQLite.LANG_EN  && enLang != 0)|| (heLang != SQLite.LANG_HE  && heLang != 0)){
                                			System.err.println("Error in Node.addText(): not right lang numbers. enLang:" + enLang  + " heLang:" + heLang);
                                			return -1;
                                		}
                                		if(title.equals("")){
                                			System.err.println("no Title");
                                			return -1;
                                		}
                                		if(enJSON != null && heJSON != null){
                                			if(!heJSON.get("schema").toString().equals(enJSON.get("schema").toString())){
                                				System.err.println("en and he JSONs schemas don't match\n");	
                                				System.out.println(heJSON.get("schema"));
                                				System.out.println(enJSON.get("schema"));
                                				return -1;
                                			}
                                			if(!enJSON.getString("title").equals(heJSON.getString("title"))){
                                				System.err.println("en and he JSONs title don't match" + enJSON.getString("title") + " - " + heJSON.getString("title"));
                                				return -1;
                                			}
                                
                                		}
                                		if(!booksInDB.containsKey(title)){
                                			System.err.println("Don't have book in DB and trying to add text");
                                			return -1;
                                		}
                                		int bid = booksInDBbid.get(title); 
                                		JSONObject enText = null, heText = null;
                                		if(enJSON != null){
                                			enText = (JSONObject) enJSON.get("text");
                                		}
                                		if(heJSON != null){
                                			heText = (JSONObject) heJSON.get("text");
                                		}
                                		JSONObject schema = null;
                                		try{
                                			schema = schemaFile.getJSONObject("schema");
                                		}catch(JSONException e){
                                			e.printStackTrace();
                                		}
                                		insertNode(c, schema, enText,heText, 0,0,bid,0,lang);
                                		return 1; //it worked
                                	}
                                
                                
                                צדיק תמיםצ מנותק
                                צדיק תמיםצ מנותק
                                צדיק תמים
                                מדריכים
                                כתב ב נערך לאחרונה על ידי צדיק תמים
                                #167

                                @sivan22 השאילתה שהבאת היא אפילו לא pseudo code 🙂

                                sivan22S תגובה 1 תגובה אחרונה
                                0
                                • צדיק תמיםצ צדיק תמים

                                  @sivan22 השאילתה שהבאת היא אפילו לא pseudo code 🙂

                                  sivan22S מנותק
                                  sivan22S מנותק
                                  sivan22
                                  כתב ב נערך לאחרונה על ידי
                                  #168

                                  @צדיק-תמים כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת:

                                  @sivan22 השאילתה שהבאת היא אפילו לא pseudo code 🙂

                                  למה אתה אומר ככה, השתמשתי בה בפועל, רק חסר שתי שורות בהתחלה.

                                  from pymongo import MongoClient
                                  # Requires the PyMongo package.
                                  # https://api.mongodb.com/python/current
                                  client = MongoClient('mongodb://localhost:27017/')
                                  result = client['sefaria']['links'].aggregate([
                                      {
                                          '$set': {
                                              'refs_0': {
                                                  '$arrayElemAt': [
                                                      '$refs', 0
                                                  ]
                                              }, 
                                              'refs_1': {
                                                  '$arrayElemAt': [
                                                      '$refs', 1
                                                  ]
                                              }
                                          }
                                      }, {
                                          '$unset': [
                                              '_id', 'expandedRefs0', 'expandedRefs1', 'availableLangs', 'refs'
                                          ]
                                      }
                                  ])
                                  
                                  צדיק תמיםצ תגובה 1 תגובה אחרונה
                                  0
                                  • ה מנותק
                                    ה מנותק
                                    הפצת אנקי
                                    כתב ב נערך לאחרונה על ידי
                                    #169

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

                                    תגובה 1 תגובה אחרונה
                                    5
                                    • sivan22S sivan22

                                      @צדיק-תמים כתב בהצעת ייעול | קונספט חדש לפרוייקט השו״ת:

                                      @sivan22 השאילתה שהבאת היא אפילו לא pseudo code 🙂

                                      למה אתה אומר ככה, השתמשתי בה בפועל, רק חסר שתי שורות בהתחלה.

                                      from pymongo import MongoClient
                                      # Requires the PyMongo package.
                                      # https://api.mongodb.com/python/current
                                      client = MongoClient('mongodb://localhost:27017/')
                                      result = client['sefaria']['links'].aggregate([
                                          {
                                              '$set': {
                                                  'refs_0': {
                                                      '$arrayElemAt': [
                                                          '$refs', 0
                                                      ]
                                                  }, 
                                                  'refs_1': {
                                                      '$arrayElemAt': [
                                                          '$refs', 1
                                                      ]
                                                  }
                                              }
                                          }, {
                                              '$unset': [
                                                  '_id', 'expandedRefs0', 'expandedRefs1', 'availableLangs', 'refs'
                                              ]
                                          }
                                      ])
                                      
                                      צדיק תמיםצ מנותק
                                      צדיק תמיםצ מנותק
                                      צדיק תמים
                                      מדריכים
                                      כתב ב נערך לאחרונה על ידי צדיק תמים
                                      #170

                                      @sivan22 לא הבנתי, איפה הבדיקה שמדובר בעברית? ושזה הprimary?

                                      sivan22S תגובה 1 תגובה אחרונה
                                      0
                                      • צדיק תמיםצ צדיק תמים

                                        @sivan22 לא הבנתי, איפה הבדיקה שמדובר בעברית? ושזה הprimary?

                                        sivan22S מנותק
                                        sivan22S מנותק
                                        sivan22
                                        כתב ב נערך לאחרונה על ידי
                                        #171

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

                                        תגובה 1 תגובה אחרונה
                                        0
                                        • ה מנותק
                                          ה מנותק
                                          הפצת אנקי
                                          כתב ב נערך לאחרונה על ידי
                                          #172

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

                                           select c.id from cards c, notes n where c.nid=n.id and ((n.sfld like '%%מאגר תורני%' escape '\' or n.flds like '%%מאגר תורני%' escape '\'))
                                          

                                          וכך כל מילה לחוד:

                                           select c.id from cards c, notes n where c.nid=n.id and ((n.sfld like '%מאגר%' escape '\' or n.flds like '%מאגר%' escape '\') and (n.sfld like '%תורני%' escape '\' or n.flds like '%תורני%' escape '\')) 
                                          

                                          כדי להפעיל כך את אנקי צריך ליצור קובץ bat בתיקייה שבה הותקנה התוכנה שהתוכן שלו יהיה:

                                          @echo off
                                          set TRACESQL=1
                                          "%~dp0"\anki %*
                                          pause
                                          

                                          ולהפעיל דרכו את התוכנה.

                                          תגובה 1 תגובה אחרונה
                                          1

                                          • התחברות

                                          • אין לך חשבון עדיין? הרשמה

                                          • התחברו או הירשמו כדי לחפש.
                                          • פוסט ראשון
                                            פוסט אחרון
                                          0
                                          • חוקי הפורום
                                          • פופולרי
                                          • לא נפתר
                                          • משתמשים
                                          • חיפוש גוגל בפורום
                                          • צור קשר