تشخیص اسپم
تشخیص اسپم Discuse متن را بههمراه یک امتیاز اطمینان، بهعنوان اسپم یا غیر اسپم طبقهبندی میکند. متن را با فعال بودن check_spam به POST https://api.discuse.com/api/v2/check ارسال کنید و نتیجه را از results.spamfinder بخوانید. این قابلیت اسپمهای تبلیغاتی، کلاهبرداریها و نویزهای تولیدشده توسط ربات را که فیلترهای سادهٔ کلیدواژهای از دست میدهند، شناسایی میکند.
تشخیص اسپم چه چیزهایی را شناسایی میکند؟
این مدل بر اساس الگوهای پرتکراری آموزش دیده که از فهرستهای مسدودسازی عبور میکنند:
- اسپم تبلیغاتی و تبلیغات ناخواسته
- پیامهای کلاهبرداری و فیشینگ
- محتوای تولیدشده توسط ربات و متنهای کپیپیستشده
این قابلیت یک label واحد (مانند spam یا ham) بههمراه یک امتیاز confidence برمیگرداند، تا بتوانید تصمیم بگیرید تا چه حد سختگیر باشید.
چطور یک بررسی اسپم اجرا کنم؟
curl -X POST https://api.discuse.com/api/v2/check \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
"content": {
"text": "CONGRATULATIONS! You won $10,000! Click here to claim: bit.ly/fake"
},
"settings": {
"check_spam": true
}
}'
قالب پاسخ
{
"has_violations": true,
"cached": false,
"message": "Spam content detected",
"results": {
"hits": true,
"spamfinder": {
"text": "CONGRATULATIONS! You won $10,000! Click here to claim: bit.ly/fake",
"label": "spam",
"confidence": 0.97,
"is_spam": true,
"hit": true
}
},
"usage": {
"api_requests_used": 8,
"api_requests_limit": 5000,
"api_requests_remaining": 4992
}
}
نتیجهٔ اسپم چه فیلدهایی برمیگرداند؟
| فیلد | نوع | معنی |
|---|---|---|
text |
string | متنی که طبقهبندی شده است |
label |
string | طبقهبندی مدل (مثلاً spam، ham) |
confidence |
number | میزان اطمینان مدل به برچسب (0.0–1.0) |
is_spam |
bool | نتیجهٔ خام مدل — label == spam، بدون در نظر گرفتن آستانه |
hit |
bool | تصمیم مبتنی بر آستانه — is_spam و confidence ≥ آستانهٔ اسپم پروژهٔ شما |
is_spam در برابر hit
is_spam نتیجهٔ خام است: مدل، صرفنظر از میزان اطمینانش، متن را بهعنوان اسپم برچسبگذاری کرده است. hit علاوه بر آن، نیاز دارد اطمینان از آستانهٔ اسپم پیکربندیشده برای پروژهٔ شما عبور کند. اقدامهای مدیریتی محتوا را بر اساس hit انجام دهید، نه بر اساس is_spam، تا یک برچسب اسپم با اطمینان پایین باعث جریمه شدن پیامهای مرزی نشود.
امتیاز اطمینان را چطور تفسیر کنم؟
confidence نشان میدهد مدل تا چه حد از label خود مطمئن است:
- 0.0 – 0.3: بسیار پایین — احتمالاً معتبر.
- 0.3 – 0.5: پایین — مرزی.
- 0.5 – 0.7: متوسط — مشکوک.
- 0.7 – 0.9: بالا — بهاحتمال زیاد اسپم.
- 0.9 – 1.0: بسیار بالا — تقریباً قطعاً اسپم.
آستانههای پیشنهادی
آستانهٔ اسپم پروژهٔ خود را متناسب با میزان تحمل پلتفرمتان تنظیم کنید:
const SPAM_THRESHOLDS = {
strict: 0.5, // professional platforms, financial services
standard: 0.7, // social media, forums
permissive: 0.85 // creative platforms, open communities
};
موارد استفاده
بخشهای دیدگاهها
async function moderateComment(comment) {
const result = await checkSpam(comment.text);
const spam = result.results.spamfinder;
if (spam.hit) {
if (spam.confidence > 0.9) {
return { action: 'reject', reason: 'spam_detected' };
}
return { action: 'review', reason: 'possible_spam' };
}
return { action: 'approve' };
}
ثبتنام کاربر
def validate_registration(user_data):
bio = user_data.get('bio')
if bio:
result = check_spam(bio)
if result['results']['spamfinder']['hit']:
return {'approved': False, 'reason': 'Spam content detected in profile'}
return {'approved': True}
پلتفرمهای پیامرسانی
async function filterMessage(message, sender) {
const result = await checkSpam(message.text);
const spam = result.results.spamfinder;
if (spam.hit) {
await incrementSpamCount(sender.id);
const spamCount = await getSpamCount(sender.id);
if (spamCount > 3) {
await banUser(sender.id, 'repeated_spam');
}
return { delivered: false, reason: 'Message filtered as spam' };
}
return { delivered: true };
}
ترکیب با بررسیهای دیگر
بررسی اسپم را در کنار احساسات و زبان، در یک درخواست اجرا کنید:
{
"content": {
"text": "Check out this amazing deal! Click here: example.com/offer"
},
"settings": {
"check_spam": true,
"check_sentiment": true,
"check_language": true
}
}
سپس پاسخ، results.spamfinder، results.sentiment و results.language را با هم در بر میگیرد.
بهترین روشها
از پاسخهای درجهبندیشده استفاده کنید
بهجای مسدود/مجاز کردن دودویی، بر اساس اطمینان شاخهبندی کنید:
function handleSpamResult(spam) {
if (!spam.hit) return 'allow';
if (spam.confidence > 0.95) return 'silent_delete';
if (spam.confidence > 0.8) return 'block_notify';
if (spam.confidence > 0.6) return 'flag_for_review';
return 'apply_friction';
}
متخلفان تکراری را پیگیری کنید
async function assessUser(userId, spam) {
if (spam.hit) {
await incrementUserSpamScore(userId, spam.confidence);
}
const userScore = await getUserSpamScore(userId);
if (userScore > 10.0) await autoSuspendUser(userId);
else if (userScore > 5.0) await flagForManualReview(userId);
}
کاربران مورداعتماد را در فهرست مجاز قرار دهید
برای کاهش مثبتهای کاذب و صرفهجویی در سهمیه، بررسی اسپم را برای حسابهای تأییدشده یا بسیار قابلاعتماد رد کنید:
function shouldCheckSpam(user) {
if (user.isVerified) return false;
if (user.trustScore > 0.9) return false;
return true;
}
محدودیتهای استفاده
تشخیص اسپم از سهمیهٔ تحلیل احساسات شما استفاده میکند:
| طرح | تحلیلهای ماهانه | نکات |
|---|---|---|
| Basic | 1,000 | شامل اسپم + احساسات |
| Gold | 5,000 | شامل اسپم + احساسات |
| Platinum | 15,000 | شامل اسپم + احساسات |
| Ultimate | 30,000 | شامل اسپم + احساسات |
پاسخهای کششده از سهمیهٔ شما کم نمیکنند.
نمونههای یکپارچهسازی
میانافزار Express.js
const spamFilter = async (req, res, next) => {
if (req.body.text) {
const result = await checkSpam(req.body.text);
if (result.results.spamfinder.hit) {
return res.status(400).json({
error: 'spam_detected',
message: 'Your message was flagged as spam'
});
}
}
next();
};
app.post('/api/comments', spamFilter, createComment);
Python Flask
from functools import wraps
from flask import request, jsonify
def spam_filter(f):
@wraps(f)
def decorated(*args, **kwargs):
text = request.json.get('text')
if text:
result = check_spam(text)
if result['results']['spamfinder']['hit']:
return jsonify({
'error': 'spam_detected',
'message': 'Your message was flagged as spam'
}), 400
return f(*args, **kwargs)
return decorated
@app.route('/api/comments', methods=['POST'])
@spam_filter
def create_comment():
pass
گامهای بعدی
- تحلیل متن - اسپم را با امتیازدهی احساسات ترکیب کنید
- تشخیص زبان - زبان محتوا را تشخیص دهید و اعمال کنید
- راهنمای شروع سریع - نخستین کلید API خود را دریافت کنید