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

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. שאלה בC#: מה הדרך הכי טובה להוציא גזירים מתוך קטע טקסט?

שאלה בC#: מה הדרך הכי טובה להוציא גזירים מתוך קטע טקסט?

מתוזמן נעוץ נעול הועבר תכנות
24 פוסטים 3 כותבים 422 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • pcinfogmachP מנותק
    pcinfogmachP מנותק
    pcinfogmach
    השיב לdovid ב נערך לאחרונה על ידי pcinfogmach
    #10

    @dovid

    👍 👍 👍 החכמתני הרעיון שלך נכון גם לגבי וורד

    גמ"ח מידע מחשבים ואופיס

    dovidD תגובה 1 תגובה אחרונה
    0
    • dovidD מנותק
      dovidD מנותק
      dovid ניהול
      השיב לpcinfogmach ב נערך לאחרונה על ידי
      #11

      @pcinfogmach
      https://regex101.com/r/gAvS8i/1

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      pcinfogmachP תגובה 1 תגובה אחרונה
      1
      • חגיח מנותק
        חגיח מנותק
        חגי
        כתב ב נערך לאחרונה על ידי חגי
        #12

        @pcinfogmach אתה רוצה לכלול גרשיים בתוך מילה ולא גרשיים מסביב לטקסט (דהיינו תחילת מילה או סוף מילה)?
        https://regex101.com/r/QGFV52/1

        סליחה אבל עד עכשיו לא הבנתי בדיוק מה הבעיה, הצלחתי קצת להבין מההודעות של @dovid בהנחה והוא הבין אותך נכון.

        תגובה 1 תגובה אחרונה
        0
        • pcinfogmachP מנותק
          pcinfogmachP מנותק
          pcinfogmach
          השיב לdovid ב נערך לאחרונה על ידי pcinfogmach
          #13

          @dovid כתב בשאלה בC#: מה הדרך הכי טובה להוציא גזירים מתוך קטע טקסט?:

          הקוד של הGPT לא ראוי בעיני ליחס.

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

          גמ"ח מידע מחשבים ואופיס

          חגיח dovidD 2 תגובות תגובה אחרונה
          0
          • חגיח מנותק
            חגיח מנותק
            חגי
            השיב לpcinfogmach ב נערך לאחרונה על ידי
            #14

            @pcinfogmach כתב בשאלה בC#: מה הדרך הכי טובה להוציא גזירים מתוך קטע טקסט?:

            [\w"?]+

            אתה רוצה לכלול סימני שאלה בתוך הרג'קס שלך? כי שמת את הסימן שאלה בתוך הסוגריים המרובעים.

            pcinfogmachP תגובה 1 תגובה אחרונה
            1
            • pcinfogmachP מנותק
              pcinfogmachP מנותק
              pcinfogmach
              השיב לחגי ב נערך לאחרונה על ידי pcinfogmach
              #15

              @חגי
              צודק אני רואה שהתבלבתי לגמרי. הקוד של דוד הוא מצויין כמו שהוא

              גמ"ח מידע מחשבים ואופיס

              תגובה 1 תגובה אחרונה
              2
              • dovidD מנותק
                dovidD מנותק
                dovid ניהול
                השיב לpcinfogmach ב נערך לאחרונה על ידי dovid
                #16

                @pcinfogmach כתב בשאלה בC#: מה הדרך הכי טובה להוציא גזירים מתוך קטע טקסט?:

                השאלה היא האם יש דרך שלישית לקבל ביצועים יותר טובים.

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

                מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                בכל נושא אפשר ליצור קשר dovid@tchumim.com

                pcinfogmachP תגובה 1 תגובה אחרונה
                0
                • pcinfogmachP מנותק
                  pcinfogmachP מנותק
                  pcinfogmach
                  השיב לdovid ב נערך לאחרונה על ידי pcinfogmach
                  #17

                  @dovid כתב בשאלה בC#: מה הדרך הכי טובה להוציא גזירים מתוך קטע טקסט?:

                  ההפרש זניח פר פעולה

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

                  @dovid כתב בשאלה בC#: מה הדרך הכי טובה להוציא גזירים מתוך קטע טקסט?:

                  אם אתה נתקל באיטיות אפילו קטנה מאוד, רק אז יש מה לפתוח לדיון קוד מותאם אישית.

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

                  גמ"ח מידע מחשבים ואופיס

                  dovidD תגובה 1 תגובה אחרונה
                  0
                  • dovidD מנותק
                    dovidD מנותק
                    dovid ניהול
                    השיב לpcinfogmach ב נערך לאחרונה על ידי dovid
                    #18

                    @pcinfogmach כתב בשאלה בC#: מה הדרך הכי טובה להוציא גזירים מתוך קטע טקסט?:

                    בבדיקה שלי הקוד רגקס לקח כמעט פי שניים מהזמן של הקוד של gpt,

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

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

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

                    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                    בכל נושא אפשר ליצור קשר dovid@tchumim.com

                    pcinfogmachP תגובה 1 תגובה אחרונה
                    0
                    • pcinfogmachP מנותק
                      pcinfogmachP מנותק
                      pcinfogmach
                      השיב לdovid ב נערך לאחרונה על ידי pcinfogmach
                      #19

                      @dovid

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

                      כמות המופעים היה במאות או אם חיפשתי מילה כמו "כי" אז באלפים.

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

                      בכל אופן מצו"ב הקודים של שני הבדיקות

                      1. קוד הרגקס
                      string pattern = "(\\b\\w+\\W+){0,10}" + Regex.Escape(searchTerm) + "(\\W+\\w+\\b){0,10}";
                      MatchCollection matches = Regex.Matches(textToSearch, pattern);
                      
                      if (matches.Count > 0)
                      {
                          foreach (Match match in matches)
                          {
                              string result = match.Value;
                              result = Regex.Replace(result, @"<.*?>|[^א-ת\.""':, \(\)[]\{\}]", " ");
                              result = result.Replace(searchTerm, "<span style=\"color: red;\">" + searchTerm + "</span>");
                              fileIndexes[filePath].Add($"<li><a href='#{HttpUtility.HtmlEncode(fileName)}%{HttpUtility.HtmlEncode(chapterName)}' onclick='showMessage(this)'>{fileName} {chapterName}</a><br>{result}</li>");
                              resultPagesSum++;
                          }
                      }
                      
                      1. הקוד של gpt
                      List<string> snippets = SplitStringIntoSnippets(textToSearch, 30);
                      
                      foreach (string snippet in snippets)
                      {
                          if (snippet.Contains(searchTerm))
                          {
                              string result = Regex.Replace(snippet, @"<.*?>|[^א-ת\.""':, \(\)[]\{\}]", " ");
                              result = result.Replace(searchTerm, "<span style=\"color: red;\">" + searchTerm + "</span>");
                              fileIndexes[filePath].Add($"<li><a href='#{HttpUtility.HtmlEncode(fileName)}%{HttpUtility.HtmlEncode(chapterName)}' onclick='showMessage(this)'>{fileName} {chapterName}</a><br>{result}</li>");
                              resultPagesSum++;
                          }
                      }
                      
                      static List<string> SplitStringIntoSnippets(string input, int maxSnippetLength)
                      {
                          List<string> snippets = new List<string>();
                      
                          string[] words = input.Split(new char[] { ' ', '\t', '\n' }, StringSplitOptions.RemoveEmptyEntries);
                          int wordCount = 0;
                          int currentIndex = 0;
                      
                          for (int i = 0; i < words.Length; i++)
                          {
                              wordCount++;
                              if (wordCount >= maxSnippetLength)
                              {
                                  snippets.Add(string.Join(" ", words, currentIndex, maxSnippetLength));
                                  currentIndex = i + 1;
                                  wordCount = 0;
                              }
                          }
                      
                          if (currentIndex < words.Length)
                          {
                              snippets.Add(string.Join(" ", words, currentIndex, words.Length - currentIndex));
                          }
                      
                          return snippets;
                      }
                      

                      ועוד שאלה:
                      @dovid כתב בשאלה בC#: מה הדרך הכי טובה להוציא גזירים מתוך קטע טקסט?:

                      קוד טוב יהיה טוב יותר מרגקס (נכון להיום בדוטנט)

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

                      גמ"ח מידע מחשבים ואופיס

                      תגובה 1 תגובה אחרונה
                      0
                      • dovidD מנותק
                        dovidD מנותק
                        dovid ניהול
                        כתב ב נערך לאחרונה על ידי
                        #20

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

                        האם זה אומר שעדיף לעשות שורה של פקודות replace במקום regex replace אחד שכולל הרבה אפשרויות?

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

                        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                        בכל נושא אפשר ליצור קשר dovid@tchumim.com

                        pcinfogmachP תגובה 1 תגובה אחרונה
                        0
                        • pcinfogmachP מנותק
                          pcinfogmachP מנותק
                          pcinfogmach
                          השיב לdovid ב נערך לאחרונה על ידי
                          #21

                          @dovid
                          בוא נתעלם מבעיית האינדוקס - יש לי סיבה טובה למה במקרה זה אני לא הולך על אינדקס (למרות שיש לי משהו כבר מוכן).

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

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

                          30 או 21 זה לא באמת משנה. רק זה קצת מקל על הקוד של הgpt לעשות גזירים קצת יותר ארוכים כי אז יש לו פחות פעולות לעשות.

                          גמ"ח מידע מחשבים ואופיס

                          dovidD תגובה 1 תגובה אחרונה
                          0
                          • dovidD מנותק
                            dovidD מנותק
                            dovid ניהול
                            השיב לpcinfogmach ב נערך לאחרונה על ידי
                            #22

                            @pcinfogmach כתב בשאלה בC#: מה הדרך הכי טובה להוציא גזירים מתוך קטע טקסט?:

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

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

                            30 או 21 זה לא באמת משנה. רק זה קצת מקל על הקוד של הgpt לעשות גזירים קצת יותר ארוכים כי אז יש לו פחות פעולות לעשות.

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

                            מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                            בכל נושא אפשר ליצור קשר dovid@tchumim.com

                            pcinfogmachP תגובה 1 תגובה אחרונה
                            0
                            • pcinfogmachP מנותק
                              pcinfogmachP מנותק
                              pcinfogmach
                              השיב לdovid ב נערך לאחרונה על ידי
                              #23

                              @dovid
                              אוקיי בוא נניח את הנושא המרכזי בצד לעת עתה
                              הייתי כן רוצה להתמקד בקוד של הgpt כי אני צריך אותו גם במקום אחר.
                              אני משתמש איתו לבניית האינדקס שלי.
                              כלומר האינדקס של תוכנת החיפוש lucene
                              מה שאני עושה זה חלוקה של המסמך מראש לגזירים והאינדקס שומר את הגזירים ומחפש בתוך הגזירים.
                              האם יש דרך יותר טובה לחלק מסמך לגזירים של 30 מילים (עם חפיפה של 10 מכל צד שזה אומר בעצם 10 מילים ישנות ועשרים חדשים כל פעם)

                              גמ"ח מידע מחשבים ואופיס

                              תגובה 1 תגובה אחרונה
                              0
                              • pcinfogmachP מנותק
                                pcinfogmachP מנותק
                                pcinfogmach
                                כתב ב נערך לאחרונה על ידי pcinfogmach
                                #24

                                לגבי הוקד רגקס הנ"ל אם אני רוצה לחפש מילים לא לפי סדר מסויים
                                ראיתי מישהו שעשה ככה https://rubular.com/r/QFEfj9lMn3
                                האם צורה כזו של חיפוש יעילה? כלומר האם זה מכביד מדאי אם אני יעשה כך המון פעמים ברצף

                                אגב בלי רגקס אפשר לעשות ככה

                                private bool containsAll(string[] words, string text)
                                {
                                    bool searchMatch = words.All(word => text.Contains(word));
                                    return searchMatch;
                                }
                                

                                גמ"ח מידע מחשבים ואופיס

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

                                • 1
                                • 2
                                בא תתחבר לדף היומי!
                                • התחברות

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

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