LSA를 활용하여, 뉴스를 클러스터링 하는 모듈을 만들어 테스트해보았다.

결과는 다음과 같다.

네이버 뉴스 무작위 20개 클러스터링 결과

 


0. "‘가족끼리 왜이래’ 삼각관계 끝났지만.. 서강준 “남지현 못 잊어”"와의 유사 문서 

1. "진짜 사나이-여군특집2 이다희, 몸무게 54kg 깜짝 공개"와의 유사 문서 

2. "k팝스타 이봉연 jyp 낙점, 박혜수는 탈락"와의 유사 문서 

3. "[포토]걸스데이 혜리, 예뻐졌다"와의 유사 문서 

4. "‘아빠를 빌려드립니다’ 방민아, 충무로 차세대 유망주 발견!"와의 유사 문서 
  --> ‘아빠를 빌려드립니다’ 방민아 “우리 아버지도 애교 많았으면…” [0.6510]
  --> 아빠를 조재윤 민아와 러브라인 원했지만 거절 당해 [0.4000]

5. "‘아빠를 빌려드립니다’ 방민아 “우리 아버지도 애교 많았으면…”"와의 유사 문서 
  --> ‘아빠를 빌려드립니다’ 방민아, 충무로 차세대 유망주 발견! [0.6510]
  --> 아빠를 조재윤 민아와 러브라인 원했지만 거절 당해 [0.5136]

6. "[포토] 방민아-서강준 웸드라마 연기도전"와의 유사 문서 

7. "아빠를 조재윤 민아와 러브라인 원했지만 거절 당해"와의 유사 문서 
  --> ‘아빠를 빌려드립니다’ 방민아, 충무로 차세대 유망주 발견! [0.4000]
  --> ‘아빠를 빌려드립니다’ 방민아 “우리 아버지도 애교 많았으면…” [0.5136]

8. "파리 주요 관광지, 테러 후 관광객 줄어 한산"와의 유사 문서 

9. "패네타 전 미 국방장관 “파리 테러는 ‘정보 실패’ 결과”"와의 유사 문서 

10. "미국 부통령 자택 총격…테러 가능성에 긴장 고조"와의 유사 문서 

11. "갤럭시노트4 s-lte skt·kt서 우선 출시"와의 유사 문서 
  --> skt, 광고가처분 첫 심리날 갤노트4 s-lte 출시 [0.6147]

12. "skt, 광고가처분 첫 심리날 갤노트4 s-lte 출시"와의 유사 문서 
  --> 갤럭시노트4 s-lte skt·kt서 우선 출시 [0.6147]

13. "[핫 키워드] 13월의 세금, 김향기 김새론, 추자현 중국, 강예원 민낯, 삼시세끼 손호준"와의 유사 문서 

14. "[대종상 맛보기] 충무로 이끌★…여진구·임시완·김새론·김향기 ④"와의 유사 문서 

15. "슈퍼맨이 돌아왔다 삼둥이 김 먹방 하정우와 비교해보니?"와의 유사 문서 
  --> 슈퍼맨이 돌아왔다 삼둥이, 썰매 끌다 지친 송일국 걱정 남다른 효심 [0.4848]

16. "슈퍼맨이 돌아왔다 삼둥이, 썰매 끌다 지친 송일국 걱정 남다른 효심"와의 유사 문서 
  --> 슈퍼맨이 돌아왔다 삼둥이, 송일국 자유로운 영혼이라 걱정이다 [0.6649]
  --> 슈퍼맨이 돌아왔다 삼둥이 김 먹방 하정우와 비교해보니? [0.4848]

17. "슈퍼맨이 돌아왔다 삼둥이, 송일국 자유로운 영혼이라 걱정이다"와의 유사 문서 
  --> 슈퍼맨이 돌아왔다 삼둥이, 썰매 끌다 지친 송일국 걱정 남다른 효심 [0.6649]

18. "나탈리 포트만도 스티븐 잡스 영화 거절…디카프리오·크리스찬 베일 등 잇따른 고사"와의 유사 문서 
  --> 크리스찬 베일, 스티븐 잡스 영화 하차..부담 느껴 [0.5290]

19. "크리스찬 베일, 스티븐 잡스 영화 하차..부담 느껴"와의 유사 문서 
  --> 나탈리 포트만도 스티븐 잡스 영화 거절…디카프리오·크리스찬 베일 등 잇따른 고사 [0.5290]

 

내용에 대해선 나중에 포스트.

반응형
Posted by N'

String 자료형을 다루기 위한 좋은 방법 중 하나로 정규표현식이라는 것이 있다.

본 프로젝트에서 사용된 크롤러에서도 들어가 있는 내용 중 하나로, 한번 만들어두면 계속해서 사용할 수 있기 때문에 이 곳에 적어두도록 한다.

%s는 지우고 싶은 태그명을 넣어두면 된다. 방법에 따라 분류하도록 한다.

1. html의 태그를 지울때 내용까지 지우는 방식이다. 예를들어 <script>asd</script> 로 되어 있다면, asd까지 모두 지우게 된다. 이러한 것은 html문서 중 내용으로써, 쓸모없는 부분인 script나 style태그 등 뷰의 값을 지정해둔 부분을 모두 지워버리기에 유용하다.

<( )*%s([^>])*?> -> <%s>로 치환

<( )*(/)( )*?%s()*> -> </%s>로 치환

 

--> 여기까지 태그안의 내용이 있는 부분을 모두 지우고, 태그만으로 남길수 있다. 예를 들면, <style weight = ...........>로 되어있다면, <style>로 변환한다.

 

(<%s>)([^(<%s>\.</%s>)])*?(</%s>) 는 공백으로 치환

(<%s>)[\s\S]*?(</%s>) 역시 공백으로 치환

 

2. html의 태그를 지울때 태그만 지우는 방식이다.  <script>asd</script> 로 되어 있다면, asd만 남기게 된다.

<( )*%s([^>])*?> -> <%s>로 치환

<( )*(/)( )*?%s()*> -> </%s>로 치환

 

태그를 정규화후, 해당 태그만을 지우면 된다. <%s>, </%s> 등으로 공백으로 삭제.

 

 

3. 기타 쓰레기 값 삭제 부분이다. 파싱을 하다보면, html태그가 아닌 이상한 value가 존재한다. 이런 것들은 휴리스틱하게 찾아보는 수밖에 없는 것 같다.


(&deg(;)|&lt(;)|&gt(;)|&quot(;)|&nbsp(;)|&amp(;)|&lsquo(;)

|&rsquo(;)|&#160(;)|&ldquo(;)|&rdquo(;)|&sdot(;))


를 공백으로 바꿔주면 된다.

 

 

4. 개행문자 삭제 부분이다.

(\\r){1,20}|(\\n){1,20}|(\\r\\n){1,20} {1,20}는 은 해당 그룹 (???)의 출현빈도에 따라서 적용할 수 있는 방법이다. 

 

5. 모든 태그를 지우는 방법은 다음과 같다.

<(/)?([a-zA-Z0-9]*)(\\s[a-zA-Z0-9]*=[^>]*)?(\\s)*(/)?>

 

남은 응용은 정규표현식과 관련된 내용을 찾아서 응용하길 바란다.


반응형
Posted by N'

Crawler란 웹에서 지속적으로 데이터를 수집해오는 녀석을 말한다.

어떤 Root Url을 기초로 문서를 파싱 그 안의 Url을 수집해서 계속적으로 문서를 파싱하며, 그 안에서 유용한 내용은 따로 DB에 저장해두도록 한다.

본 프로젝트에서는 수많은 자료가 필요하기 때문에 하둡의 분산 저장 시스템인 hdfs에 저장하도록 하였다. 

Crawler의 기본적인 구조는 총 세가지 단계로 나누어 진다. (Master, Slave, Monitor)

Master는 기본적으로 Url을 지속적으로 수집해주는 녀석, Slave는 데이터를 파싱하고, 그 안에서 Url이 있으면, 어떠한 공유 저장공간으로 보내게 된다.

본 프로젝트에서는 네이버의 뉴스 Url을 가져오도록 하기 때문에 위의 과정까지는 필요없지만, 마스터가 Url을 지속으로 수집해 메모리상에 구현된 큐에 넣어주고, 슬레이브는 이 큐에서 데이터를 빼내 수집하도록 하는 구조이다.

 

아래는 발표 때 썼던 PT자료.(아래 그림을 본다면 바로 짜볼 수 있지 않을까? ㅋ)

 

본 프로젝트 백업을 위해 소스는 첨부. ㅋ

CrawlerEnd.zip

 

 

 

반응형
Posted by N'