Skip to main content
文档
学习中心

通过完整指南、教程和 API 文档,掌握内容审核

快捷链接

语言检测

Discuse 会识别消息的语言,以便你在采取操作前应用合适的审核规则。将文本发送到启用 check_languagePOST https://api.discuse.com/api/v2/check,并从 results.language.language 读取检测到的语言代码。添加 expected_language 可标记不符合你要求语言的内容。

语言检测有什么用?

预先检测语言可以让你:

  • 应用特定语言的审核阈值
  • 将内容分配给合适的审核人员或支持团队
  • 执行社区语言政策
  • 按语言筛选或本地化信息流

如何检测语言?

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": "Bonjour, comment allez-vous aujourd'\''hui?"
    },
    "settings": {
      "check_language": true
    }
  }'

响应格式

{
  "has_violations": false,
  "cached": false,
  "results": {
    "language": {
      "language": "fr",
      "confidence": 0.99,
      "hit": false
    }
  }
}

检测到的语言代码位于 results.language.language。启用 expected_language 强制校验后,detectedexpected 也会被填充(见下文)。

语言结果会返回哪些字段?

字段 类型 含义
language string 检测到的语言代码(例如 enfres
confidence number 检测置信度(0.0–1.0)
expected string 设置 expected_language 时强制要求的语言代码
detected string 检测到的代码(language 的别名,在强制校验期间填充)
hit bool 当检测到的语言与 expected 不匹配时为 True
delete_only bool 为 true 时,消息应被删除且不再进一步处罚
error string 仅在检测失败时出现

支持哪些语言?

Discuse 返回 ISO 风格的语言代码。常见可检测语言包括:

代码 语言 代码 语言
en 英语 de 德语
es 西班牙语 fr 法语
it 意大利语 pt 葡萄牙语
nl 荷兰语 pl 波兰语
ru 俄语 uk 乌克兰语
zh 中文 ja 日语
ko 韩语 ar 阿拉伯语
hi 印地语 tr 土耳其语

请直接从 results.language.language 读取值,而不是硬编码固定列表。

如何强制要求特定语言?

expected_language 设置为你要求的代码。当检测到的语言不一致时,language.hittrue,并且会填充 expected/detected

请求:

{
  "content": { "text": "Hola, cómo estás?" },
  "settings": {
    "check_language": true,
    "expected_language": "en"
  }
}

响应:

{
  "has_violations": true,
  "message": "Content is not in expected language",
  "results": {
    "hits": true,
    "language": {
      "language": "es",
      "detected": "es",
      "expected": "en",
      "confidence": 0.97,
      "hit": true
    }
  }
}

使用场景

仅限英语的论坛

async function validatePost(post) {
  const result = await fetch('https://api.discuse.com/api/v2/check', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-API-Key': process.env.DISCUSE_API_KEY
    },
    body: JSON.stringify({
      content: { text: post.content },
      settings: { check_language: true, expected_language: 'en' }
    })
  }).then(r => r.json());

  if (result.results.language.hit) {
    return {
      approved: false,
      reason: 'Posts must be in English',
      detected_language: result.results.language.language
    };
  }
  return { approved: true };
}

多语言路由

async function routeContent(content) {
  const result = await checkLanguage(content.text);
  const language = result.results.language.language;

  const moderatorQueue = {
    en: 'english-moderation',
    es: 'spanish-moderation',
    fr: 'french-moderation',
    de: 'german-moderation',
    default: 'general-moderation'
  };

  const queue = moderatorQueue[language] || moderatorQueue.default;
  await addToQueue(queue, content);
  return { queued: true, language };
}

与内容审核结合使用

在一次请求中同时运行语言检测、情绪分析和垃圾内容检测:

{
  "content": {
    "text": "User message in any language"
  },
  "settings": {
    "check_language": true,
    "check_sentiment": true,
    "check_spam": true
  }
}

随后可以根据检测到的语言驱动你的分语言情绪阈值:

const LANGUAGE_THRESHOLDS = {
  en: { toxicity: 0.7, profanity: 0.6 },
  de: { toxicity: 0.6, profanity: 0.5 },
  es: { toxicity: 0.7, profanity: 0.7 },
  default: { toxicity: 0.7, profanity: 0.6 }
};

async function moderateContent(text) {
  const result = await checkText(text); // check_language + check_sentiment
  const language = result.results.language.language;
  const thresholds = LANGUAGE_THRESHOLDS[language] || LANGUAGE_THRESHOLDS.default;
  const sentiment = result.results.sentiment;

  if (sentiment.toxicity > thresholds.toxicity) {
    return { action: 'block', reason: 'toxic_content' };
  }
  if (sentiment.profanity > thresholds.profanity) {
    return { action: 'flag', reason: 'profanity' };
  }
  return { action: 'allow' };
}

最佳实践

考虑短文本的情况

对非常短的字符串,检测结果不太可靠。低于最小长度时可跳过检查:

async function smartLanguageCheck(text) {
  if (text.length < 20) {
    return { language: 'unknown', confidence: 0 };
  }
  const result = await checkLanguage(text);
  return result.results.language;
}

缓存结果

async function getLanguageWithCache(text, contentId) {
  const cached = await cache.get(`lang:${contentId}`);
  if (cached) return JSON.parse(cached);

  const result = await checkLanguage(text);
  const language = result.results.language;
  await cache.set(`lang:${contentId}`, JSON.stringify(language), 'EX', 3600);
  return language;
}

使用限制

语言检测会消耗你的文本分析配额:

套餐 每月分析次数
Basic 1,000
Gold 5,000
Platinum 15,000
Ultimate 30,000

缓存响应不会计入你的配额。

集成示例

Node.js

const checkLanguage = async (text, expectedLanguage = null) => {
  const settings = { check_language: true };
  if (expectedLanguage) settings.expected_language = expectedLanguage;

  const response = await fetch('https://api.discuse.com/api/v2/check', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-API-Key': process.env.DISCUSE_API_KEY
    },
    body: JSON.stringify({ content: { text }, settings })
  });

  return response.json();
};

Python

import os
import requests

def check_language(text, expected_language=None):
    settings = {'check_language': True}
    if expected_language:
        settings['expected_language'] = expected_language

    response = requests.post(
        'https://api.discuse.com/api/v2/check',
        headers={
            'Content-Type': 'application/json',
            'X-API-Key': os.environ['DISCUSE_API_KEY']
        },
        json={'content': {'text': text}, 'settings': settings}
    )
    return response.json()

后续步骤

Discuse 团队 撰写 · 最后更新于 June 2026

相关文章

文本分析和情感检测

检测垃圾内容、毒性、脏话,并分析文本内容中的情感

图像 NSFW 检测

自动检测并过滤不当图像和成人内容

垃圾内容检测

由 AI 驱动的文本和消息垃圾内容过滤