כיווץ קובץ בינרי מבלי לפגוע בגישה הישירה ל-blobs שבתוכו (C#)
-
@OdedDvir כתב בכיווץ קובץ בינרי מבלי לפגוע בגישה הישירה ל-blobs שבתוכו (C#):
בעיקרון זה נכון, כי כיווץ עובד על תדירות של מופעים זהים של מידע, וההסתברות לחזרה של מידע היא ביחס ישר לכמות המידע
זה עיקרון נכון על כמויות קטנות.
אם החומר הוא למשל טקסטואלי, אז אם מדובר בחתיכות מספיק גדולות (2 מגה למשל) אין משמעות ריאלית כמעט לתוספת, למרות שהתיאוריה נשארת בלי סוף.@pcinfogmach
אם מדובר בחתיכות קטנות יותר, אז אני מבין סוף סוף את השאלה. התשובה היא הכיוון ש@yossiz הציע, דחיסה מבוססת מילון משותף, או מילון סטטי.
אם אני מנחש נכון ומדובר בטקסטים תורניים זה עלול גם לשפר יעילות+ביצועי דחיסה/פריסה. -
@dovid כתב בכיווץ קובץ בינרי מבלי לפגוע בגישה הישירה ל-blobs שבתוכו (C#):
אם אני מנחש נכון ומדובר בטקסטים תורניים זה עלול גם לשפר יעילות+ביצועי דחיסה/פריסה.
יעילות הדחיסה אכן השתפרה:
ניסיתי כעת בעצמי את ספריית ZstdNet על קובץ יבמות של תורת אמת (MN_YEVAMOT_L2.txt) עם אימון מול כל השורות ודחיסה של כל שורה בנפרד, תוצאות מצויינות: כלל השורות ביחד 12% לעומת 40% בGZipStream.
אבל הביצועים לא, הדחיסה הזו איטית משמעותית מGZipStream.
פה השאלה היא על יעילות פריסה ולא על דחיסה (שכנראה לא מבוצעת בשגרה), זה אבדוק בהמשך בע"ה. -
פוסט זה נמחק!
-
var file = toratEmetLoc + @"020_MISHNA\102_SEDER_NASHIM\24_MAS_YEVAMOT\MN_YEVAMOT_L2.txt"; System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); var text = File.ReadAllText(file, Encoding.GetEncoding(1255)); var lines = text.Split('\n'); var linesAsBytes = lines.Select(l => Encoding.UTF8.GetBytes(l)).ToArray(); //train var dic = DictBuilder.TrainFromBuffer(linesAsBytes.Where(l => l.Length > 100)); var option = new CompressionOptions(dic, CompressionOptions.MaxCompressionLevel); using var compressor = new Compressor(option); var perLineZstd = linesAsBytes.Select(x => compressor.Wrap(x));
זה רק להדגמה,
במציאות אתה תשמור את תוצאות האימון לקובץ ומשם תטען אותו בהמשך.