Metin Analizi: Duygu Durumu, Spam ve Dil Tek Çağrıda
Discuse metin analizi, tek bir POST https://api.discuse.com/api/v2/check isteğiyle bir mesajı toksiklik, spam ve dil açısından puanlar. Metninizi content.text içinde gönderin, X-API-Key başlığıyla kimlik doğrulaması yapın ve her kontrolün sonucunu results altında okuyun.
Metin endpoint’i neyi kontrol eder?
Tek bir /api/v2/check çağrısı, üç metin kontrolünü aynı anda çalıştırabilir:
- Duygu durumu: toksiklik, küfür, tehdit ve hakaret puanlamasının yanı sıra negatif/toksik kararı.
- Spam: tanıtım amaçlı spam, dolandırıcılık ve bot tarafından üretilmiş metin; bir
labelve güven puanıyla döndürülür. - Dil: algılanan dil kodu; isteğe bağlı olarak beklenen dile göre denetim yapılabilir.
Her kontrol yalnızca etkinleştirildiğinde çalışır; bunu proje ayarlarınızdan ya da istek bazında settings nesnesiyle yapabilirsiniz.
Metin endpoint’ini nasıl çağırırım?
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": "This is an example message to analyze"
},
"settings": {
"check_sentiment": true,
"check_spam": true,
"check_language": true
}
}'
content.text en fazla 10.000 karakter kabul eder. API anahtarı X-API-Key başlığında veya istek gövdesinde api_key olarak gönderilebilir.
Yanıt
{
"has_violations": false,
"cached": false,
"message": "Content appears safe",
"results": {
"hits": false,
"sentiment": {
"hit": false,
"is_negative": false,
"is_toxic": false,
"score": 0.04,
"toxicity": 0.02,
"toxic": 0.02,
"profanity": 0.01,
"threat": 0.00,
"insult": 0.03
},
"spamfinder": {
"text": "This is an example message to analyze",
"label": "ham",
"confidence": 0.12,
"is_spam": false,
"hit": false
},
"language": {
"language": "en",
"confidence": 0.98,
"hit": false
}
},
"usage": {
"api_requests_used": 41,
"api_requests_limit": 5000,
"api_requests_remaining": 4959
}
}
has_violations, results.hits değerini yansıtır: etkinleştirilen herhangi bir kontrolün hit bayrağı tetiklendiğinde true olur. processing_time_ms yalnızca proje ayarlarınızda zamanlama etkinleştirilmişse bulunur.
Duygu durumu analizi
Duygu durumu kontrolü hem bir karar hem de 0.0 ile 1.0 arasında boyut bazlı puanlar döndürür.
| Alan | Tür | Anlam |
|---|---|---|
is_negative |
bool | Mesaj negatif okunuyor |
is_toxic |
bool | Mesaj toksiklik eşiğini aşıyor |
score |
number | Genel duygu durumu/şiddet puanı |
toxicity |
number | Toksiklik güveni (0.0–1.0) |
toxic |
number | Toksiklik güveni (toxicity için eski takma ad) |
profanity |
number | Açık/küfürlü dil güveni |
threat |
number | Zarar verme tehdidi güveni |
insult |
number | Kişisel saldırı güveni |
hit |
bool | Mesaj duygu durumu eşiklerini ihlal ettiğinde true |
message |
string | İsteğe bağlı açıklama |
Duygu durumu puanını nasıl yorumlarım?
Puan, modelin ilgili boyutun geçerli olduğuna dair güvenini ifade eder:
- 0.0 – 0.3: düşük, genellikle güvenli.
- 0.3 – 0.6: orta, inceleme gerektirebilir.
- 0.6 – 0.8: yüksek, büyük olasılıkla sorunlu.
- 0.8 – 1.0: çok yüksek, neredeyse kesinlikle ihlal.
Örnek: toksik içerik
İstek:
{
"content": {
"text": "You're the worst person I've ever met. I hate everything about you."
},
"settings": { "check_sentiment": true }
}
Yanıt:
{
"has_violations": true,
"results": {
"hits": true,
"sentiment": {
"hit": true,
"is_negative": true,
"is_toxic": true,
"score": 0.91,
"toxicity": 0.89,
"toxic": 0.89,
"profanity": 0.15,
"threat": 0.22,
"insult": 0.95
}
}
}
Spam tespiti
Spam kontrolü metni sınıflandırır ve güven puanıyla birlikte tek bir label döndürür. Anahtar kelime engelleme listelerinden kaçan kalıpları yakalar: tanıtım amaçlı spam, dolandırıcılık ve kimlik avı ile bot tarafından üretilmiş metin.
Örnek: spam içerik
İstek:
{
"content": {
"text": "CONGRATULATIONS! You've won $10,000! Click here to claim: www.fake-prize.com"
},
"settings": { "check_spam": true }
}
Yanıt:
{
"has_violations": true,
"results": {
"hits": true,
"spamfinder": {
"text": "CONGRATULATIONS! You've won $10,000! Click here to claim: www.fake-prize.com",
"label": "spam",
"confidence": 0.97,
"is_spam": true,
"hit": true
}
}
}
is_spam ham model kararıdır (model metni spam olarak etiketlemiştir). hit eşik duyarlı karardır: yalnızca is_spam true olduğunda ve confidence projenizin spam eşiğini geçtiğinde true olur. Moderasyonu is_spam yerine hit değerine göre yapın. Ayrıntılar için Spam Tespiti kılavuzuna bakın.
Dil tespiti
content.text dil kodunu algılamak için check_language değerini ayarlayın. Sonuç results.language.language içindedir (örneğin "en", "fr", "es").
İstek:
{
"content": { "text": "Bonjour, comment allez-vous aujourd'hui?" },
"settings": { "check_language": true }
}
Yanıt:
{
"results": {
"language": {
"language": "fr",
"confidence": 0.99,
"hit": false
}
}
}
Beklenen dilinizde olmayan içeriği işaretlemek için expected_language ayarlayın. Algılanan dil farklı olduğunda language.hit true olur ve expected/detected alanları doldurulur:
{
"content": { "text": "Hola, cómo estás?" },
"settings": { "check_language": true, "expected_language": "en" }
}
{
"results": {
"language": {
"language": "es",
"detected": "es",
"expected": "en",
"confidence": 0.95,
"hit": true
}
}
}
Tam dil listesi ve uygulama kalıpları için Dil Tespiti bölümüne bakın.
Hangi kontrolleri açıp kapatabilirim?
İsteğe bağlı settings nesnesi, tek bir istek için proje varsayılanlarınızı geçersiz kılar. Metinle ilgili seçenekler şunlardır:
| Ayar | Tür | Etki |
|---|---|---|
check_sentiment |
bool | Duygu durumu analizini çalıştırır |
check_spam |
bool | Spam tespitini çalıştırır |
check_language |
bool | Dil tespitini çalıştırır |
check_badwords |
bool | Yasaklı kelimeler engelleme listesini çalıştırır |
expected_language |
string | Uygulanacak dil kodu (örn. "en") |
{
"content": { "text": "Your message here" },
"settings": {
"check_sentiment": true,
"check_spam": true,
"check_language": true,
"expected_language": "en"
}
}
Kullanım limitleri
Duygu durumu, spam ve dil tespiti, plana bağlı duygu durumu analizi kotasından kullanır:
| Plan | Aylık Duygu Durumu Analizi |
|---|---|
| Basic | 1,000 |
| Gold | 5,000 |
| Platinum | 15,000 |
| Ultimate | 30,000 |
Önbelleğe alınmış yanıtlar kotanızdan düşmez. Her yanıttaki usage nesnesi api_requests_used, api_requests_limit ve api_requests_remaining değerlerini bildirir.
En iyi uygulamalar
Eşikleri platforma göre ayarlayın
Farklı kitleler için farklı duygu durumu eşikleri uygulayın:
const THRESHOLDS = {
kids: { toxicity: 0.3, profanity: 0.2, threat: 0.2, insult: 0.3 },
general: { toxicity: 0.5, profanity: 0.5, threat: 0.4, insult: 0.5 },
adult: { toxicity: 0.7, profanity: 0.8, threat: 0.5, insult: 0.7 }
};
Bağlamı hesaba katın
Klinik, gazetecilik ve kurgu içerikleri, toksiklik ve küfür puanlarını meşru biçimde tetikleyebilir. Sınırda kalan durumlar için otomatik puanlamayı insan incelemesiyle birleştirin:
const sentiment = result.results.sentiment;
if (sentiment.toxicity > 0.9) {
await removeContent(contentId); // high confidence: auto-remove
} else if (sentiment.toxicity > 0.5) {
await queueForReview(contentId); // borderline: human review
} else {
await approveContent(contentId);
}
Entegrasyon örnekleri
JavaScript
async function analyzeText(text) {
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: { check_sentiment: true, check_spam: true, check_language: true }
})
});
return response.json();
}
const result = await analyzeText('Hello, how are you?');
console.log(result.has_violations); // false
Python
import os
import requests
def analyze_text(text):
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': {
'check_sentiment': True,
'check_spam': True,
'check_language': True
}
}
)
return response.json()
result = analyze_text('Hello, how are you?')
print(result['has_violations']) # False
Metin analizini uygulamaya hazır mısınız? Adım adım kurulum için Hızlı Başlangıç Kılavuzu bölümüne bakın.