Tag Hoister! - codeport/scala GitHub Wiki

사용자 tag 분석

제공된 사용자의 북마크 정보 중 tag를 분석하여 유의미한 정보를 추출하는 내용으로 실습을 진행할 예정

준비할 내용

다음의 내용을 참고하여 JSON 문자열을 패턴 매칭하여 분석할 수 있도록 실습/준비한다.

환경 준비

  1. Scala Project Template 기반의 환경
    • github의 scala project template을 참고
    • 저번 주에 내용이 살짝 업데이트 됨
      • scala 2.9.2 기준으로 버전업
      • JUnit 4.9를 사용
      • sbt 의존성 관리시 %%를 이용한 버전명 자동추가 활용
        • 기존 방식: libraryDependencies += "org.scalaz" % "scalaz-core_2.9.2" % "6.0.4"
        • %% 활용: libraryDependencies += "org.scalaz" %% "scalaz-core" % "6.0.4"
    • 이전에 설정된 프로젝트를 사용해도 무관
    • README.md에 새로 추가된 프로젝트 템플릿 가져오기는 한 번 참고삼아 읽어볼 것. 프로젝트 템플릿에 대한 원격지/브랜치를 별도로 분리해 템플릿이 업데이트 되면 이를 반영할 수 있도록 안내함.

패턴매칭을 이용한 JSON 문자열 내 태그 정보 분석

  1. JSON 정보 parse (패턴매칭 활용)
    • bookmark는 다음과 유사한 형태로 제공된다.

        {
            "userid": "nephilim",
            "bookmark-href": "http://stackoverflow.com/questions/927911/how-can-i-hit-my-friend-outsider-legally",
            "tags": ["stackoverflow","json","lift", "scala"]
        }
      
    • 패턴 매칭을 활용하여 JSON 문자열에서 정보를 추출한다.

        match jsonBookmark {
            case Bookmark(userid,href,tags) => {
                // trie에 tag를 key 
            }
        }
      

분석 목표

내용이 유사한 서로 다른 URL을 추출한다.

  • 유사도는 가칭 not the same but similar(이하, NSBS)라는 알고리즘을 사용한다.

    • NBNS는 다음과 같은 방법으로 구할 수 있다.
      1. 공통 태그가 2개 이상인 사이트의 URL들은 서로 유사하다고 가정한다.
      2. 단, URL이 완전히 동일한 경우는 not the same 조건에 의해 제외한다.
        • 문제를 간단히 하기 위해 URL 문자열이 완전히 일치하면 동일 사이트로 간주
  • 전체 북마크를 분석한 결과 태그의 종류는 URL 개수에 비해 현저히 낮은 비율을 갖는 것으로 확인됐다.

자료구조

  • pis 24장의 다음 자료구조를 미리 실습해오면 더할 나위 없이 좋다
    1. Hash Trie
    2. Red-Black Trees
    3. Bit Set
    4. Array Sequence
    5. Array Stack

JSON 자료

  • 다음 JSON중 하나를 골라서 다운로드한다.
  • 참고
    • bookmark의 사용자는 nephilim, kingori 두 명이다.
    • JSON 자료의 형식을 바꿔도 된다. 앞뒤에 [,]를 추가한다던가. json객체 사이의 ,를 없애는 등의 변경이 가능하다.
    • 실제 bookmark 정보를 사용했으므로 reality가 더해진 만큼 추출 결과는 그리 훌륭하지 못할 수도 있다

사이트에서 Tag 수집