در این مقاله آموزش فیلترینگ هوشمند متن را خواهیم داشت. فیلترینگ متن به معنایی تجزیه و تحلیل متن است تا در صورت داشتن بخش های غیر اخلاقی، این بخش ها شناسایی شوند. در ادامه نحوهی استفاده از سرویس فیلترینگ متن را در قالب چند مثال آموزش می دهیم. برای تست رایگان سرویس فیلتر هوشمند می توانید به لینک زیر مراجعه کنید.
آموزش فیلترینگ هوشمند متن
مثالها شامل یک برنامه وب (PHP و JavaScript) و ویندوز (WPF به زبان C#) میشود. در حالت وب، یک بار متن را در سمت کلاینت (مرورگر) و یک بار در سمت سرور از نظر محتوا بررسی میکنیم. به طور کلی این برنامه متنی را از کاربر دریافت میکند و پس از ارسال آن به سرور، پاسخی مبنی بر دریافت آن توسط سرور دریافت میکند. بنابراین برنامهی ما شامل یک TextBox و یک Button خواهد بود.
بررسی محتوا در یک برنامهی تحت وب
طراحی برنامه تحت وب
ابتدا یک فایل با نام index.html ایجاد کرده و محتوای آن را برابر کد زیر قرار میدهیم (برای تست فایل jquery.js نیز باید کنار این فایل باشد):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Website</title>
<script src="jquery.js"></script>
<script>
function sendToServer(text)
{
var settings = {
"async": true,
"crossDomain": true,
"url": "http://localhost/hello_world/public/test" ,
"method": "POST",
"headers": {
"Content-Type": "application/json",
},
"processData": false,
"data": '{"text":"'+text+'"}'
}
$.ajax(settings).done(function (response) {
console.log(response)
});
}
$( document ).ready(function() {
$( "#btnSubmit" ).click(function() {
sendToServer($( "#txtInput" ).val());
});
});
</script>
</head>
<body>
<input type="text" id = "txtInput"/>
<input type="submit" id = "btnSubmit"/>
</body>
</html>
همانطور که گفتیم این برنامه یک متن را گرفته و در تابع sendToServer پیام را به سرور ارسال کرده و سرور در پاسخ همان پیام را با کمی تغییر به کاربر بر میگرداند. به عنوان مثال اگر پیام کاربر “salam” باشد پاسخ “Your message is salam” خواهد بود.
حال قصد داریم قبل از ارسال شدن پیام آن را از نظر محتوا بررسی کنیم و در صورت عدم وجود محتوای نامناسب آن را به سرور ارسال کنیم. برای این کار تابع checkText را به اسکریپت خود اضافه کرده و تغییراتی را به صورت زیر اعمال میکنیم:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Website</title>
<script src="jquery.js"></script>
<script>
function checkText(text)
{
var settings = {
"async": true,
"crossDomain": true,
"url": "https://api.www.datamoon.ir/v1/text/filter/" ,
"method": "POST",
"headers": {
"Authorization": "Token 9c6ec62a6f7be8e37d4e95813e4349505d037c15",
"Content-Type": "application/json",
},
"processData": false,
"data": '{"text":"'+text+'"}'
}
$.ajax(settings).done(function (response) {
if(response['score'] <= 20)
{
//ok, send it to server
sendToServer(text);
}
else
{
//not ok, do not send it
console.log("Your message cannot be sent!");
}
});
}
function sendToServer(text)
{
var settings = {
"async": true,
"crossDomain": true,
"url": "http://localhost/hello_world/public/test" ,
"method": "POST",
"headers": {
"Content-Type": "application/json",
},
"processData": false,
"data": '{"text":"'+text+'"}'
}
$.ajax(settings).done(function (response) {
console.log(response)
});
}
$( document ).ready(function() {
$( "#btnSubmit" ).click(function() {
checkText($( "#txtInput" ).val())
});
});
</script>
</head>
<body>
<input type="text" id = "txtInput"/>
<input type="submit" id = "btnSubmit"/>
</body>
</html>
برای دریافت API_KEY خود به اینجا مراجعه کنید و پس از دریافت آن قسمت Authorization را به صورت زیر تغییر دهید:
"Authorization": "Token API_KEY"
همانطور که مشاهده میکنید هم اکنون قبل از ارسال پیام به سرور محتوای آن بررسی میشود و در صورت داشتن امتیاز مناسب به سرور ارسال میشود. هرچه امتیاز یک پیام بیشتر باشد، احتمال غیراخلاقی بودن آن بیشتر است. برای سایتهای خیلی حساس میتوان پیامهایی که امتیازشان زیر ۲۰ است را نمایش داد. به طور کلی پیامها با توجه به امتیازشان به پنج دسته قابل تقسیم هستند:
از | تا | نام دسته |
۰ | ۲۰ | قابل انتشار |
۲۰ | ۳۵ | احتمالا قابل انتشار |
۳۵ | ۶۰ | به برنامه بستگی دارد |
۶۰ | ۸۵ | احتمالا غیر قابل انتشار |
۸۵ | ۱۰۰ | غیر قابل انتشار |
۲-۱- بررسی محتوا در سمت کلاینت (مرورگر)
حال میخواهیم بدون اینکه برنامهی سمت کلاینت تغییر کند، متن را از نظر محتوا در سمت سرور ارزیابی کنیم. برای این کار تابعی در سمت سرور به زبان PHP نوشته و آن را به برنامه اضافه میکنیم. در این جا نیز میتوانیم با توجه به امتیاز متن، تصمیم مناسبی را دربارهی پیام ارسال شده توس کاربر بگیریم. برای برنامههای نسخههای مختلفی از آن وجود دارد (وب، موبایل، دسکتاپ و…) قطعا این روش بهتریست.
function checkText($text)
{
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_PORT => "443",
CURLOPT_URL => "https://api.www.datamoon.ir/v1/text/filter/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\"text\":\"$text\"}",
CURLOPT_HTTPHEADER => array(
"Authorization: Token 9c6ec62a6f7be8e37d4e95813e4349505d037c15",
"Content-Type: application/json"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
return false;
} else {
$data = json_decode($response, true);
if ($data["result"]["score"] <= 20)
{
return true;
}
else
{
return false;
}
}
}
بررسی محتوا در یک برنامهی ویندوزی
برای این کار یک پروژهیWPF در Visual Studio ایجاد کرده و یک Button و TextBox در آن قرار میدهیم و در رویداد کلیک دکمه قطعه کد زیر را قرار میدهیم:
private void btnSubmit_Click(object sender, RoutedEventArgs e)
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://api.www.datamoon.ir/v1/text/filter/");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Headers.Add("Authorization", "Token 9c6ec62a6f7be8e37d4e95813e4349505d037c15");
httpWebRequest.Method = "POST";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
string json = "{\"text\":\""+txtText.Text+"\"}";
streamWriter.Write(json);
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
dynamic json = JsonConvert.DeserializeObject(result);
if (json["result"]["score"] <=20)
{
MessageBox.Show("Your message is OK");
}
else
{
MessageBox.Show("Your message is NOT OK");
}
}
}
همانطور که مشاهده خواهید کرد به راحتی میتوانید محتوای نامناسب را از محتوای مناسب شناسایی کرده و در برنامهی خود از این قابلیت بهرهمند شوید.