PDA

View Full Version : اسپم و غیر اسپم بودن



forogh68
یک شنبه 03 آبان 1394, 10:42 صبح
سلام دوستان. وقت بخیر.
یک سوال داشتم و فکر کردم در اینجا و زبان های وبی بنویسم ممکن هست جواب بگیرم.
ببینید من حدودا 6 هزار سطر جمله دارم که می خوام اسپم و غیر اسپم بودن اینها رو کار کنم! چه روش هایی برای این کار وجود داره؟
لطفا هر لینک و چیزی (فارسی یا انگلیسی) که من رو به جواب برسونه بهم بدید.
ممنون

Unique
یک شنبه 03 آبان 1394, 15:30 عصر
ببینید من حدودا 6 هزار سطر جمله دارم که می خوام اسپم و غیر اسپم بودن اینها رو کار کنم!
بیشتر توضیح بدین ، منظورتون چیه ؟ اسپم به ره چیز ناخواسته ای که کسی دریافت کنه میگن ،‌ ایمیل ، پیامک ،‌دعوتنامه و ...

forogh68
یک شنبه 03 آبان 1394, 22:53 عصر
بیشتر توضیح بدین ، منظورتون چیه ؟ اسپم به ره چیز ناخواسته ای که کسی دریافت کنه میگن ،‌ ایمیل ، پیامک ،‌دعوتنامه و ...

سوال من بیشتر حول sms اسپم در داده کاوی هست، ولی می خوام روش هایی که دوستان می فرمایند رو مد نظر بگیرم تا بتونم یک نتیجه گیری داشته باشم و بشینم کد نویسی اش رو کنم!
البته لازم به ذکر هست در اینجا (http://barnamenevis.org/showthread.php?510643-%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA-%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C%DB%8C-%D8%AC%D9%87%D8%AA-%D8%A7%D9%86%D8%AC%D8%A7%D9%85-%D8%B3%D8%B1%DB%8C-%D8%AF%D8%A7%D8%AF%D9%87-%D9%87%D8%A7-%D8%AF%D8%B1-C)هم توضیحاتی دادم ولی حس کردم با برنامه نویسی های دیگه شاید راحت تر باشه! بیشتر روش هایی که پیشنهاد داده میشه مدنظرم که دقیقا باید چکار کنم! ممنون

beliefsavior
یک شنبه 03 آبان 1394, 22:57 عصر
میشه یه مثال بزنی ؟

Unique
دوشنبه 04 آبان 1394, 01:40 صبح
من 6 هزار خط جمله دارم و می خوام برنامه ای بنویسم که بیاد و هر خط رو بررسی کنه و تک تک کلمات اون رو استخراج کنه! بعد هم بگه هر کدوم از کلمات چند بار تکرار شده است! به نظرتون با سی ++ میشه اینکار رو کرد یا راه حل بهتری دارید؟

ببینین دوست عزیز من در مورد روشی که داده کاوی میکنید هیچ نظری ندارم چون نمیدونم منطقش چیه اما کدنویسی چنین چیزی توی php خیلی راحته :


$messages = file('messages.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($messages as $msg){
echo $msg."<br>";
$words = explode(" ", str_replace(array(".",",","'","\"","’"), "", $msg));

$word_times = array();
foreach ($words as $w){
if (!isset($word_times[$w]))
$word_times[$w] = 1;
else
$word_times[$w] += 1;
}

echo "<div style='color:#666'>[";
foreach ($word_times as $k=>$v)
echo "$k($v) ";
echo "]</div><br>";
}
?>

من یک نمونه آنلاین آپلود کردم که میتونین اینجا (http://www.geekfarsi.com/demo/word-count/parse.php) بینین.

forogh68
دوشنبه 04 آبان 1394, 07:20 صبح
ببینین دوست عزیز من در مورد روشی که داده کاوی میکنید هیچ نظری ندارم چون نمیدونم منطقش چیه اما کدنویسی چنین چیزی توی php خیلی راحته :


$messages = file('messages.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($messages as $msg){
echo $msg."<br>";
$words = explode(" ", str_replace(array(".",",","'","\"","’"), "", $msg));

$word_times = array();
foreach ($words as $w){
if (!isset($word_times[$w]))
$word_times[$w] = 1;
else
$word_times[$w] += 1;
}

echo "<div style='color:#666'>[";
foreach ($word_times as $k=>$v)
echo "$k($v) ";
echo "]</div><br>";
}
?>

من یک نمونه آنلاین آپلود کردم که میتونین اینجا (http://www.geekfarsi.com/demo/word-count/parse.php) بینین.
سپایگذارم از لطف شما.
دوستان اینجا خیلی به من لطف داشتند و کمک کردند و شما نیز که زحمت کشیدید کدش رو نوشتید.
فقط یک مورد شما اگر بخوایید خودتون در 6 هزا سطر اسپم و غیر اسپم رو تشخیص بدید چه پیشنهاداتی دارید؟ بیشتر این مد نظرمه! که ببینم دوستان چه نظراتی در این مورد می دید؟

MohammadReza1994
دوشنبه 04 آبان 1394, 09:09 صبح
سوالتون واقعا ناکامله! خوب تو یه متن معمولی اسپم چی میتونه باشه؟ فحش؟ جملات تکراری؟ و یا چیز دیگه؟ مثلا تو یه انجمن اسپم میتونه پست های تکراری باشه.

Unique
دوشنبه 04 آبان 1394, 10:22 صبح
ببینین ، بحث اسپم خیلی گسترده هستش و راه های جلوگیری از اون توی ایمیل ، انجمن ، پیامک و رسانه و ... متفاوته.
من نمیدونم توی انجمن کجا میشه در رابطه با بحث داده کاوی سوال پرسید اما با توجه به تجربه توی انجمن php باید بگم اینجا عموما کاربردی نداره. شما باید رویکرد اصلی در واکاوی را پیدا کنید بعدش براش الگوریتم بنویسین اونوقت با هر زبونی میشه نوشتش. به نظرم سوالتون را توی stackoverflow مطرح کنین بهتر به جواب میرسین اما خوب مراجعی که معرفی خواهند کرد انگلیسی خواهد بود.

مثلا این صفحه توی stackoverflow پاسخ های خوبی داره که میشه بررسیشون کرد. (http://stackoverflow.com/questions/4511412/currently-best-spam-filter-algorithm)
موفق باشین.

forogh68
دوشنبه 04 آبان 1394, 10:56 صبح
سوالتون واقعا ناکامله! خوب تو یه متن معمولی اسپم چی میتونه باشه؟ فحش؟ جملات تکراری؟ و یا چیز دیگه؟ مثلا تو یه انجمن اسپم میتونه پست های تکراری باشه.

خیر ناکامل نیست.
اینجا (http://barnamenevis.org/showthread.php?510643-%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA-%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C%DB%8C-%D8%AC%D9%87%D8%AA-%D8%A7%D9%86%D8%AC%D8%A7%D9%85-%D8%B3%D8%B1%DB%8C-%D8%AF%D8%A7%D8%AF%D9%87-%D9%87%D8%A7-%D8%AF%D8%B1-C)را مطالعه بفرماییدو من دنبال یک روش هستم برای اینکه بتونم پیام های اسپم رو از غیر اسپم تشخیص بدم و آمار بگیرم از اون با نرم افزاری مثل وکا.

forogh68
دوشنبه 04 آبان 1394, 11:17 صبح
ببینین ، بحث اسپم خیلی گسترده هستش و راه های جلوگیری از اون توی ایمیل ، انجمن ، پیامک و رسانه و ... متفاوته.
من نمیدونم توی انجمن کجا میشه در رابطه با بحث داده کاوی سوال پرسید اما با توجه به تجربه توی انجمن php باید بگم اینجا عموما کاربردی نداره. شما باید رویکرد اصلی در واکاوی را پیدا کنید بعدش براش الگوریتم بنویسین اونوقت با هر زبونی میشه نوشتش. به نظرم سوالتون را توی stackoverflow مطرح کنین بهتر به جواب میرسین اما خوب مراجعی که معرفی خواهند کرد انگلیسی خواهد بود.

مثلا این صفحه توی stackoverflow پاسخ های خوبی داره که میشه بررسیشون کرد. (http://stackoverflow.com/questions/4511412/currently-best-spam-filter-algorithm)
موفق باشین.

سپاگذارم از لطف شما.
راستش رویکرد اصلی من همین هست که در اینجا (http://barnamenevis.org/showthread.php?510643-%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA-%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C%DB%8C-%D8%AC%D9%87%D8%AA-%D8%A7%D9%86%D8%AC%D8%A7%D9%85-%D8%B3%D8%B1%DB%8C-%D8%AF%D8%A7%D8%AF%D9%87-%D9%87%D8%A7-%D8%AF%D8%B1-C) گفتم و صرفا چیز دیگه ای به ذهنم نمی رسه! می خواستم براساس تجربه ببینم بچه ها بهش فکر می کنند و به چی می رسن تا شاید دخیل باشه در این رویکرد.
بله سایت خوبیه. روش بیز رو پیشنهاد داده!
مچکرم.

H:Shojaei
دوشنبه 04 آبان 1394, 12:43 عصر
به نظر من rule تعریف کنید واسه متن ها و طبق این قوانین متنها رو بررسی کنید مثلا یک قانون که به نظر من میرسه اگر جمله ای ۵ حرف داشت نباید ۳ حرف مشابه داشته باشه چون همچین جمله ای نداریم و این میشه اسپم به لحاظ ساختار جمله یا مثلا کلمات بحث های اصلی که ابتدا شروع شدن رو بگیرید و کلماتی که از همه بیشتر تکرار شدن یا کلا در جملات وجود دارن به عنوان مثال هتل اتاق ترافیک و ... رو دارن رو ذخیره کنید در حالی که دارین متنها رو پیمایش میکنید تو هر سطر چک کنید کلمه ای از کلماتی که قبلا ذخیره کردید در لیستتون در اون سطر داشته باشه اگر نداشته باشه کلا میشه گفت که یک اسپم محسوب میشه...

مثلا اینجا (http://www.geekfarsi.com/demo/word-count/parse.php) تو این متن نمونه که جناب unique اجراییش کردن تو متن اول trafic و love , computers , ... رو داریم حروف اضافه رو که حذف کنیم فرضا باقیه رو حرف اضافه میگیریم این سه کلمه میمونه...
تو یه لیستی یا توسط جستجوی گوگل مثلا میشه کلمات هم معنی این کلمات رو در آورد مثلا love به heart و همچنین به women , men ربط داره این ها رو هم میشه به این لیست اضافه کرد.
تو متن بعدی love تکرار شده پس میتونیم بگیم که متن دوم میتونه اسپم نباشه چون ربطی میتونه به موضوع متن قبلی با تکرار کلمه love داشته باشه و کلماتی که باز با این love در این جمله میان میتونن تو لیست ما قرار بگیرن فرضا looking up, start , night رو انتخاب میکنیم از بینشون (به عنوان نمونه مثال ما) کلماتی که میشه به اینها نسبت داد مثلا از looking میشه eye رو تو لیست قرار داد... که تو متن های بعدی میبینید که تکرار شده و میشه نتیجه گرفت که اون جمله هم اسپم نمیتونه باشه...

همینطور تو متنهای بعدی میبینید که از لیست ما توی هر متن حداقل یک یا چند کلمه تکرار شده تا این جمله:
The best thing about an enemy is that he tells the truth about you.
این جمله رو میشه گفت اسپم چرا چون اگر تک تک کلماتش رو جستجو کنید هیچ یک رو تو متنهای *قبلیش* نمیشه پیدا کرد و توی لیست ما هم که از کلمات جملات قبل تشکیل شده هیچ یک از کلمات این متن نیست و به نوعی بی ربط به موضوع اصلی محسوب میشه و اسپم شناخته میشه...

حالا این ۲ نمونه ۲ قانونه که میشه تعریف کرد به همین شکل اگر فیلتر ها و قوانین دیگری که ربطی به موضوعات متن داشته باشه تبیین کنید و اعمال کنید به نوعی میشه همه اسپم ها رو شناسایی کرد...
امیدوارم کمکی کرده باشه توضیحاتم...

milad_d993
چهارشنبه 06 آبان 1394, 00:00 صبح
گزینه هایی مثل اینا:

یه بانک اطلاعاتی از کلماتی مثل خرید، جشنواره، تخفیف و .... درست کنین و اگر اینها توش بود .....

تعداد پست/پیام و ... زیاد از طرف یک کاربر یا id و ... زیاد بود تمام پیام/سطر/پست اون مرجع .....

درصد تشابه متن ها...

وجود لینک به وبسایت ها... (البته اگر اطلاعات شما مربوط به یه وبسایت است باید "لینک به خارج از وبسایت" به عنوان مظنون به اسپم در نظر گرفته بشه... )


درضمن این 6 هزار سطر جمله رو باید از اول که کم بود کنترل میشد؛
با این وجود همین 6 هزار سطر هم انقدر زیاد نیست و با روزی 3 چهار ساعت وقت گذاشتن؛ سه 4 روزه میشه ترتیبش رو داد

pbm_soy
جمعه 08 آبان 1394, 00:55 صبح
فکر میکنم دوستان اصل قضایا را گفتند فقط میماند اینکه شما این مطالب را جمع و جور کنید و برنامه اش را بنویسید!
درهر صورت چندتا نکته هست که بدنیست اشاره کنم
الگوریتمهای تشخیص اسپم فوق العاده پیچیده است و فاکتورهای زیادی در آن دخیل است درحال حاضر گوگل ویاهو هنوزهم خیلی از ایمیلها را اسپم تشخیص میدهند درحالی که اسپم نیستند اگر این پروژه یک کار دانشجویی و درسی است کارتون را محدودتر کنید وفقط در یک حیطه کوچک الگوریتم را پیاده سازی کنید و همینطور میتوانید با سرچ کردن در سایتهایی مانند ieee , sience direct ,..... میتوانید مقالات زیادی در این زمینه پیدا کنید و مطالعه کنید که درآنها الگوریتمهای زیادی را ارایه میکنند!
مورد مهم این است که این ۶ هزار خط متن ، متن ایمیل است ویا sms ویا چیز دیگری است؟ چون در هر کدام الگوریتمهای تشخیص متفاوت است!

در هرصورت بظور کلی کاری که شما باید انجام دهید این است
* جدا کردن تک تک کلمات و جملات چون برخی الگوریتمها براساس کلمات است و برخی دیگر براساس جملات
* البته برخی الگوریتمها براساس آدرس فرستنده است یعنی ایمیل آدرس فرستنده خاصی که قبلا به عنوان کسی که اسپم میفرستاده ثبت شده باشد از این پس هرچی بفرستد به عنوان اسپم تلقی میشود!
* ویا برخی الگوریتمها فقط موضوع ویا همان subject ایمیل را بررسی میکنند تا تشخیص دهند اسپم است یا خیر
- اگر الگوریتم براساس محتوا عمل میکند در اینصورت محتوا باید استخراج شود یعنی جداسازی کلمات و جملات و تصاویر و لینکها و غیره
* پس از جداسازی متن برنامه شما باید باتوجه به قوانین و یا ruleهایی که از قبل در برنامه ثبت کردید متن استخراجی را باید آنالیز کند حالا میتواند امتیازدهی کند و یا با شرطهای ساده کل کار را انجام دهد.
پس از آنالیز میتوانید تصمیم گیری کنید و بگید اسپم است یاخیر

** اینکار در مرحله اول ربطی به زبان خاصی ندارد در اصل شما الگوریتم برنامه اتون را باید مشخص کنید وباید بدانبد که میخواهید چیکار کنید بعدش میتوانید این عملیات را باهر زبانی پیاده سازی کنید زیاد فرق چندانی نخواهد داشت
** پس کلمات جداسازی میشوند و سپس طبق قواعد تشخیص اسپم به کلمات جدا شده امتیاز میدهید و در آخر هم تصمیم میگیرید
مثال ساده صرفا برای مشخص شدن قضیه
شما یک دیتابیس از کلمات را دارید که جلوی هر کلمه یک عدد به عنوان ظریب وجود دارد این دیتابیس در واقع دیتابیس قواعد شماست
حالا کلمات جدا شده را تک تک در دیتابیس سرچ میکنید و درصورت وجود ظریب آنرا میگیرید و ضربدر تعداد تکرار کلمه در متن میکنید و نتیجه را جمع میکنید با جمع ضربدرهای کلمات دیگر و دست آخر این جمع عددی از یک مقدار خاصی تجاوز کند میگید اسپم است!
البته میتوانید حتی این مقدار خاصی که برای تجاوز از آن استفاده میکنید را هم محاسبه کنید براساس تعداد کلمات متن ایمیل!

* این مثال خیلی ساده بود فقط خواستم بگم که روال کار شما چگونه است در اینترنت برنامه های در سطح آموزشی هم زیاد پیدا میکنید و یا سورسهای زیادی در این زمینه پیدا خواهید کرد چون برنامه های اوپن سورس هم زیاد است

pbm_soy
جمعه 08 آبان 1394, 01:08 صبح
میتوانید به لینکهای زیر هم مراجعه کنید

http://stackoverflow.com/questions/296579/how-to-write-spam-filter
http://www.codeproject.com/Articles/23472/A-Naive-Bayesian-Spam-Filter-for-C
http://www.codeproject.com/Articles/430330/How-to-create-a-spam-filter-or-automatic-category

این لینک آخری صرفا برای استخراج متن از ایمیل است و الگوریتمهای تشخیص را نگفته! هدف این بود که شما با روال استخراج متن آشنا بشید