ورود

View Full Version : فشرده سازی متن



darkenerboy
پنج شنبه 31 مرداد 1392, 13:09 عصر
سلام
اگه کسی از دوستان و اعضا دوتا متد آماده و 100% تست شده واسه فشرده سازی متن داره (فارسی و انگلیسی)
با میزان فشره سازی عالی و با انتشارشون مشکلی نداره لطفا بزاره :تشویق:
اگه هم با انتشارشون مشکلی داره ولی با استفاده ی من از اون ها مشکلی نداره لطفا واسم بفرسته :لبخند:
و اگه هم با انتشارشون مشکلی داره و کلا حال نمیکنه کسی استفاده کنه ازش ممنونم که این مطلب رو خونده :بوس:
و به گروه آخر هم میگم اگه هم ندارید نگران نباشید این تاپیک رو پیگیری کنید تا بدست بیارید. :خجالت:

با تشکر فراوان

hamyd_reza
پنج شنبه 31 مرداد 1392, 17:19 عصر
----------

darkenerboy
جمعه 01 شهریور 1392, 00:14 صبح
منظورتون فشرده سازی داده از نوع String هستش یا من تو باغ نیستم:متفکر:

یعنی متن باشه string نباشه ؟ :لبخند:

rubiks.kde
جمعه 01 شهریور 1392, 12:35 عصر
سلام

اینم دوتا تابع که گفتید فقط من خودم از تابع decompress استفاده کردم چون عمل compress رو php برام توی سایت انجام میداد.

public static byte[] compress(String string) throws IOException {
ByteArrayOutputStream os = new ByteArrayOutputStream(string.length());
GZIPOutputStream gos = new GZIPOutputStream(os);
gos.write(string.getBytes());
gos.close();
byte[] compressed = os.toByteArray();
os.close();
return compressed;
}

public static String decompress(byte[] compressed) throws IOException {
final int BUFFER_SIZE = 32;
ByteArrayInputStream is = new ByteArrayInputStream(compressed);
GZIPInputStream gis = new GZIPInputStream(is, BUFFER_SIZE);
StringBuilder string = new StringBuilder();
byte[] data = new byte[BUFFER_SIZE];
int bytesRead;
while ((bytesRead = gis.read(data)) != -1) {
string.append(new String(data, 0, bytesRead));
}
gis.close();
is.close();
return string.toString();
}

abbasalim
جمعه 01 شهریور 1392, 12:55 عصر
میشه توضیح بدین دقیقا فشرده سازی متن چیکار میکنه ؟‌

jafaripur
شنبه 02 شهریور 1392, 22:20 عصر
متنی که می خواین فشرده کنین اگه کوچیک باشه کارایی نداره چون خودش تو فشرده سازی هدر اضافه می کنه وقتی خوبه که نوشتتون طولانی مثلاً حداقل 200 کاراکتر .


public static byte[] compress(String str) throws Exception
{
ByteArrayOutputStream obj = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(obj);
gzip.write(str.getBytes("UTF-8"));
gzip.close();
return obj.toByteArray();
}

public static String decompress(byte[] str) throws Exception
{
GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(str));
BufferedReader bf = new BufferedReader(new InputStreamReader(gis, "UTF-8"));
String outStr = "";
String line;
while ((line = bf.readLine()) != null)
{
outStr += line;
}
return outStr;
}

jafaripur
شنبه 02 شهریور 1392, 22:22 عصر
میشه توضیح بدین دقیقا فشرده سازی متن چیکار میکنه ؟‌
تعداد کاراکترها رو میاره پایین البته در صورت امکان, شبیه همون زیپ کردن فایل ها.

shahin bahari
شنبه 02 شهریور 1392, 22:53 عصر
به نظر من از تکنیکی مثل PDU استفاده کنید. همون طور که میدونید هر بایت 256 تا کاراکتر جا داره ولی ما فقط برای 128 تای اون ها کاراکتر نمایشی داریم. خب اگه هر بایت جدیدمون رو 7 بیت در نظر بگیریم, تو این شرایط توی هر 7 بایت 8 کاراکتر جا میشه. این همون تکنیکی هست که تو فضای 140 بایتی sms 160 تا کاراکتر جا میدن. یا به عبارتی حجم متن رو 7/8 برابر میکنه!! امیدوارم خوب توضیح داده باشم چون اگر منطق کاریش رو متوجه شده باشید با چند تا حلقه میشه کدش رو نوشت.

darkenerboy
یک شنبه 03 شهریور 1392, 12:49 عصر
سلام
با تشکر از همه
چون بعد از فشرده سازی، این متنی راه زیادی رو میره و از بعضی جاها میگذره که همه ی یونی کد ها رو تشخیص نمیدن یکم کار پیچیدست
برنامه ی آقا rubiks.kde (http://barnamenevis.org/member.php?231180-rubiks.kde) خوبه ولی مشکل من و چیزی که من بیشتر مد نظرم بود بتدیل استاندارد byte به string بود که توی توابعشون نبود که اتفاقا توابع اقای jafaripur (http://barnamenevis.org/member.php?25187-jafaripur) هم همین مشکل رو داره
با تشکر از اقای shahin bahari (http://barnamenevis.org/member.php?243465-shahin-bahari) ما راه های بهتری واسه فشرده سازی داریم که با جستجوی توی نت میبینید خیلی توانمدتر از pdu عمل میکنن و درضمن pdu خیلی فشرده سازیش کمتر از اینی هستش که شما فرمودید
من توابع زیادی رو بررسی کردم
انشالله اونی که از همه بهتر بود رو براتون میزارم