Skip to main content
مستندات
مرکز آموزش

مدیریت محتوا را با راهنماهای جامع، آموزش‌ها و مستندات API به‌خوبی یاد بگیرید

لینک‌های سریع

تشخیص اسپم

تشخیص اسپم 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

گام‌های بعدی

نوشته تیم Discuse · آخرین به‌روزرسانی June 2026

مقاله‌های مرتبط

تحلیل متن و تشخیص احساسات

هرزنامه، محتوای سمی، الفاظ رکیک را تشخیص دهید و احساسات را در محتوای متنی تحلیل کنید

تشخیص NSFW در تصویر

تصاویر نامناسب و محتوای بزرگسالان را به‌طور خودکار تشخیص داده و فیلتر کنید

اسکن آنتی‌ویروس فایل

پلتفرم خود را در برابر بدافزار، ویروس‌ها و فایل‌های مخرب محافظت کنید