شباهت‌سنج متن

سرویس: شباهت‌سنج متن | Similarity Calculation

تعریف مسئله

شباهت‌سنجی متن به معنای آن است که روشی اتخاذ شود تا به وسیله آن بتوان میزان شباهت دو متن به یکدیگر را سنجید. مقیاس مورد استفاده باید قابل مقایسه باشد. یعنی باید بتوان در بین چندین متن، نزدیک‌ترین متن به متن مورد نظر را مشخص کرد.

چگونه کار میکند

هدف از این سرویس تشخیص میزان شباهت دو متن به یکدیگر می‌باشد. هرچه دو متن شبیه‌تر باشند، امتیاز اختصاص یافته به آنها بالاتر خواهد بود.

الگوریتم

الگوریتم استفاده شده ابتدا به ازای هر متن یک اثرانگشت تولید کرده و سپس با مقایسه اثر انگشت‌های متون، میزان شباهت آنها به یکدیگر را می‌سنجد.

کاربرد سرویس

از کاربردهای این سرویس می‌توان به تشخیص تقلب در اخبار یا تشخیص کپی در پیامهای شبکه‌های اجتماعی اشاره کرد. همچنین می‌توان در الگوریتمهای تشخیص گراف انتشار از آن استفاده کرد.

نحوه استفاده

در این سرویس لیستی از جفت متن‌ها به عنوان ورودی دریافت می‌شود. به ازای هر جفت متن، عددی اعشاری بین 0 تا 1 که بیانگر میزان شباهت آن دو متن است بازگردانده می‌شود. 1 بیشترین شباهت و 0 عدم شباهت خواهد بود.

ورودی API

[ { "text1": "ما در دیتاک خوشحال و شاد و خندانیم" ,"text2": "ما در دیتاک خوشحال و شاد و گریانیم" }, { "text1": "اگر مدام توقع داشته باشید که اتفاقات خوب برایتان رخ دهد ، میزان شانس خود را در زندگی افزایش می دهید. هر روزتان را با این جمله اغاز کنید : می دانم امروز یک اتفاق عالی برایم می افتد" ,"text2": "اگر مدام توقع داشته باشید که اتفاقات بد برایتان رخ دهد ، میزان شانس خود را در زندگی کاهش می دهید. هر روزتان را با این جمله اغاز کنید : می دانم امروز یک اتفاق بد برایم می افتد. آنگاه تغییرات را مشاهده خواهید کرد." } ]

خروجی API

[ "63.8972386", "75.2025797” ]

نمونه کد PHP

                                        $ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"https://sakoo.dataak.com/api/services/nlp/similarity_calculation");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
 $data = [
    'text'=>'روحیه تیمی در دیتاک از نان شب هم واجب‌تر است و افرادی که توانایی کار تیمی ندارند در کنار ما آرامش خود را از دست خواهند داد',
    'text1'=> 'کمیته انضباطی فدراسیون فوتبال، رای خود را درباره دیدار تیم های صنعت نفت آبادان و پیکان از سری رقابتهای لیگ برتر صادر کرد',
    'token'=> 'token'
 ];          
 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
 $server_output = curl_exec($ch);
 print_r($server_output);
                                    

نمونه کد java

                                        import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;

    public class MTest {

        public static void main(String[] args) throws Exception{
            URL url = new URL("https://sakoo.dataak.com/api/services/nlp/similarity_calculation");
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            Map<String, String> parameters = new HashMap<>();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            con.setConnectTimeout(5000);
            con.setReadTimeout(5000);
            con.setInstanceFollowRedirects(false);
            
            String token="token";
            token=java.net.URLEncoder.encode(token, "UTF-8").replace("+","%20");
            
            String urlParameters  = "text=روحیه تیمی در دیتاک از نان شب هم واجب‌تر است و افرادی که توانایی کار تیمی ندارند در کنار ما آرامش خود را از دست خواهند داد&text1= کمیته انضباطی فدراسیون فوتبال، رای خود را درباره دیدار تیم های صنعت نفت آبادان و پیکان از سری رقابتهای لیگ برتر صادر کرد.&token="+token;
            try(OutputStream os = con.getOutputStream()) {
                byte[] input = urlParameters.getBytes("utf-8");
                os.write(input, 0, input.length);
            }
            
            DataOutputStream out = new DataOutputStream(con.getOutputStream());
            out.flush();
            out.close();

            int status = con.getResponseCode();
            String s=con.getResponseMessage();
            Reader streamReader = null;
            
            if (status > 299) {
               
                streamReader = new InputStreamReader(con.getErrorStream());
            } else {
                streamReader = new InputStreamReader(con.getInputStream());

                BufferedReader in = new BufferedReader(
                        new InputStreamReader(con.getInputStream()));
                String inputLine;
                StringBuffer content = new StringBuffer();
                while ((inputLine = in.readLine()) != null) {
                    content.append(inputLine);
                }
                in.close();
                
                System.out.println(content);
            }
            con.disconnect();
        }
    }
                                    

نمونه کد python

                                        import requests
url = 'https://sakoo.dataak.com/api/services/nlp/similarity_calculation'
data = {
    'text': 'کمیته انضباطی فدراسیون فوتبال، رای خود را درباره دیدار تیم های صنعت نفت آبادان و پیکان از سری رقابتهای لیگ برتر صادر کرد.',
    'text1':'به گزارش گروه ورزش باشگاه خبرنگاران جوان به نقل از سایت رسمی فدراسیون فوتبال، درباره دیدار تیم های صنعت نفت آبادان و پیکان',
    'token':'token'
}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.3'}
response = requests.post(url, data=data, headers=headers)

print(response.text)