forked from codeport/scala
-
Notifications
You must be signed in to change notification settings - Fork 0
Tag Hoister!
nephilim edited this page Jun 10, 2012
·
3 revisions
제공된 사용자의 북마크 정보 중 tag를 분석하여 유의미한 정보를 추출하는 내용으로 실습을 진행할 예정
다음의 내용을 참고하여 JSON 문자열을 패턴 매칭하여 분석할 수 있도록 실습/준비한다.
- 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 정보 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
는 다음과 같은 방법으로 구할 수 있다.- 공통 태그가 2개 이상인 사이트의 URL들은 서로 유사하다고 가정한다.
- 단, URL이 완전히 동일한 경우는 not the same 조건에 의해 제외한다.
- 문제를 간단히 하기 위해 URL 문자열이 완전히 일치하면 동일 사이트로 간주
-
-
전체 북마크를 분석한 결과 태그의 종류는 URL 개수에 비해 현저히 낮은 비율을 갖는 것으로 확인됐다.
- pis 24장의 다음 자료구조를 미리 실습해오면 더할 나위 없이 좋다
- Hash Trie
- Red-Black Trees
- Bit Set
- Array Sequence
- Array Stack
- 다음 JSON중 하나를 골라서 다운로드한다.
- 참고
- bookmark의 사용자는 nephilim, kingori 두 명이다.
- JSON 자료의 형식을 바꿔도 된다. 앞뒤에 [,]를 추가한다던가. json객체 사이의 ,를 없애는 등의 변경이 가능하다.
- 실제 bookmark 정보를 사용했으므로 reality가 더해진 만큼 추출 결과는 그리 훌륭하지 못할 수도 있다