Wednesday, July 20

실시간 인플루언서


%ec%8a%a4%ed%81%ac%eb%a6%b0%ec%83%b7 2016 07 21 %ec%98%a4%ec%a0%84 2.53.02

프로젝트 소개

종합설계 프로젝트로 SEO 관련 내용을 다뤄보려고 잠시 실시간 검색어 분석을 한 적이 있습니다. 실시간으로 올라오는 3대 포털 사이트의 검색어 순위와 음원 차트 순위를 기반으로 인플루언서(영향력있는 사람)를 선별하는 작업입니다. 각각을 타당한 이유에 맞게 가중치를 부여하고 분석하는 과정이 재미있었습니다. 하지만 단순히 웹 크롤링과 수치 부여 만으로는 좋은 데이터를 얻는데에 한계가 있었다는 것을 깨닫고 주제를 바꾸었습니다.

프로젝트 요약

프로젝트 풀이

주요 알고리즘 1 - LIKE QUERY 적용

def Exchanger(keywords,strdate,enddate)
  @keywords = keywords.split(',')
  @tscore = 0
  #For each objects search tuples including strings left side & right side. %string% format in LIKE QUERY
  @keywords.each do | keyword |
    @tmp1 = SearchNaver.where("issue_title LIKE ?", ("%"+keyword+"%")).where("issue_date between ? and ? ", DateTime.parse(strdate), DateTime.parse(enddate))
    @tmp2 = SearchDaum.where("issue_title LIKE ?", ("%"+keyword+"%")).where("issue_date between ? and ? ", DateTime.parse(strdate), DateTime.parse(enddate))
    @tmp3 = SearchGoogle.where("issue_title LIKE ?", ("%"+keyword+"%")).where("issue_date between ? and ? ", DateTime.parse(strdate), DateTime.parse(enddate))

    #Naver : Daum : Google = 3 : 1 : 1
    @tscore = Exchanger_loop(@tmp1, @tscore) * 3
    @tscore = Exchanger_loop(@tmp2, @tscore)
    @tscore = Exchanger_loop(@tmp3, @tscore)
  end
  #iChart Part with LIKE QUERY, Now's Data
  @keywords.each do | keyword |
    @tmp4 = IChart.where("iChart_artist LIKE ?", ("%"+keyword+"%"))
    @tscore = Exchanger_loop_for_ichart(@tmp4, @tscore)
  end

  Artist.where(artist_name: @keywords[0]).first.update_attribute(:artist_score, (Artist.where(artist_name: @keywords[0]).first.artist_score + @tscore))
end

주요 알고리즘 2 - 가중치 부여 작업

#Exchange by ichart
def Exchanger_loop_for_ichart(tmp, tscore)
  tmp.each do |t|
    case t.iChart_rank
      when 1
        tscore += 100
      when 2..10
        tscore += 10
      when 11..20
        tscore += 1
      when 21..30
        tscore += 0.1
      when 31..50
        tscore += 0.01
      else
        next
      end 
  end
  tscore
end

프로젝트 소감

해당 프로젝트는 중간에 멈추었지만, 실시간 검색어 데이터를 다뤄볼 수 있는 좋은 경험이었습니다. 그리고 실시간 영향력을 판별하는 기준에는 여러가지가 있지만, 단순히 웹 상에서 돌아다니는 검색어 순위만으로는 좋은 데이터를 얻기 어렵다고 생각하게 되었습니다. 때문에 좋은 영향력 데이터를 위해서는 발로 뛰어서 사람들의 의견을 구하고 여러 지역과 다양한 연령층의 사람들의 목소리를 들을 수 있는 조사원들과 분석원들이 필요하다는 것을 깨달았습니다. 검색 엔진의 위대함을 다시한번 깨닫습니다.

급하게 혼자 구현해야하는 상황이라, 변수명이나 좀 더 재사용성을 고려한 소스코드로 리팩토링하지 못한 아쉬움이 있습니다. 하지만 크롤링을 하는 과정에서 일어나는 이슈들에 대해서 공부할 수 있었습니다.


공유하기