Backend/Spring

[Pickmeup Web Project] 간단하게 핫한 태그 추천 알고리즘 만들기(2)

dokylee 2020. 7. 18. 20:44

 

 

 

이전 포스팅에서 구현하기로 했던 태그 스코어링 java로 간단 구현!

 

나는 스프링 프로젝트로 개발 중이라 그냥 스프링 위에다가 구현해봤다.

 

 

Code

package com.example.tagscoring;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import javax.annotation.processing.SupportedSourceVersion;

@SpringBootApplication
public class TagscoringApplication {

    public static void printArraylist(double[] a) {
        for(int i=0; i<a.length; i++) {
            System.out.println(a[i]);
        }
    }

    public static double calcEuclideanDist(double[] p1, double[] p2) {

        double sum = 0;
        double dist;

        for (int i = 0; i < p1.length; i++) {
            sum += Math.pow(p1[i] - p2[i], 2);
        }

        dist = Math.sqrt(sum);

        return dist;
    }

    public static double[] normalization(double[] p, double[] min_p, double[] max_p) {
        double[] norm_p = new double[p.length];

        for (int i = 0; i < p.length; i++) {

            double norm_i;

            // normalize
            norm_i = (p[i] - min_p[i]) / (max_p[i] - min_p[i]);

            // append normalized number
            norm_p[i] = norm_i;
        }

        return norm_p;
    }

    public static void main(String[] args) {
        SpringApplication.run(TagscoringApplication.class, args);



        /*
        1. 태크 스코어
        */

        // p1 포맷 = {해쉬태그가 사용된 사용된 게시물 개수, 해쉬태그를 사용한 게시물의 댓글수 총합, 해쉬태그를 사용한 게시물의 조회수 총합}
        double[] p1 = {100, 2000, 6000}, origin = {0, 0, 0};
        double[] min_p1 = {0, 0, 0}, max_p1 = {400, 4200, 10000};
        double score;

        System.out.println("* point => ");
        printArraylist(p1);
        System.out.println();

        // p1 정규화
        p1 = normalization(p1, min_p1, max_p1);

        System.out.println("* normalized point => ");
        printArraylist(p1);
        System.out.println();

        // p1과 원점 사이의 유클리디안 거리 계산
        score = calcEuclideanDist(p1, origin);

        System.out.println("* score = " + score);
    }

}

Out:

* point =>
100.0
2000.0
6000.0

* normalized point =>
0.25
0.47619047619047616
0.6

* score = 0.8057650833924938