Recent Posts
Recent Comments
Link
관리 메뉴

NaggingMachine

형태소 분석기로 웹 문서 파싱하여 단어만 추출해보자 본문

TechnoBabbler

형태소 분석기로 웹 문서 파싱하여 단어만 추출해보자

naggingmachine 2013. 7. 25. 17:33

예전부터 웹 문서 파싱해서 분석하는 작업을 하려고 했는데, 한다한다하면서 미뤄오던걸 어떤(?) 계기가 있어서 시작하게 되었다. 그리고 그 결과를 다른 분들께 도움이 되고자 공유한다.


온라인 사이트의 단어들을 추출하는 간단한 과정을 수행하고자 한다면 다음과 같은 작업이 필요하다.


1. 웹 문서를 다운로드 받는다.

2. 웹 문서에서 쓸데없는 태그를 제외하고 문장만 추출한다(소위 말하는 readability)/

3. 형태소 분석기를 활용하여 단어를 추출한다.

4. 만약 단어들을 분석하고자 한다면 DB에 저장한다(인덱싱).


우선은 어디까지 가능한지 간단하게 테스트해보기 위해서 오픈 소스들을 찾아봤는데, 아니나 다를까 2시간 정도만에 뚝딱 완성이 가능할 정도로 이미 많은 분들이 험난한 여정을 거쳤고, 그 결과를 확인할 수 있었다.


우선 형태소 분석기는 KAIST에서 제작한 한나눔형태소분석기를 사용했다. (http://kldp.net/projects/hannanum) 그리고 Java용 readability는 Snacktory를 사용했다. (https://github.com/karussell/snacktory) Python이나 perl용도 있으니 찾아보면 된다. Snacktory의 경우 Maven 프로젝트로 구성되어 있는데, 여기에 또 dependency가 걸려있어서 maven이 아닌 순수한 java 프로젝트로 구성하고자 했더니 불편함이 이만저만이 아니다. 그래도 비교적 수월하게 dependency해결하고 나니 정말 잘된다.


다음은 Wikipedia에서 '인터넷' 관련 정보인 https://ko.wikipedia.org/wiki/%EC%9D%B8%ED%84%B0%EB%84%B7 링크를 분석한 결과이다. 


우선 Readability의 결과부터 보면


인터넷(Internet, 누리망, 문화어: 인터네트)은 전 세계의 컴퓨터가 서로 연결되어 TCP/IP(Transmission Control Protocol/Internet Protocol)라는 통신 프로토콜을 이용해 정보를 주고받는 컴퓨터 네트워크이다. 인터넷이란 이름은 1973년 TCP/IP의 기본 아이디어를 생각해 낸 빈튼 서프와 밥 간이 '네트워크의 네트워크'를 지향하며 모든 컴퓨터를 하나의 통신망 안에 연결(Inter Network)하고자 하는 의도에서 이를 줄여 인터넷(Internet)이라고 처음 명명하였던 데 어원을 두고 있다. 이후 인터넷은 "정보의 바다"라고 불리면서 전 세계의 컴퓨터가 서로 연결되어 TCP/IP를 이용해 정보를 주고 받게 되었다.[1] 복수의 통신망을 집합시킨 광역 통신망을 뜻하는 일반명사를 '인터네트워크'(internetwork)라고 하는데, 미국 국방성의 아파넷은 이러한 인터네트워크를 본격적으로 구축한 최초의 사례였다. 아파넷은 당초에는 연구용으로만 쓰였으나 참여 기관이 늘어나면서 다양한 목적으로 아파넷을 쓰고자 하는 요구가 많아졌다. 또한, 컴퓨터의 종류가 다양해지면서 프로토콜을 재정비할 필요성이 부각되었다. 1983년, 미국 국방성은 군사용 네트워크 기능을 밀넷(MILNET, Military Network)으로 분리시키고, 아파넷은 민간용 네트워크가 되었다. 또한, 초창기에 사용하던 NCP(Network Control Program)보다 데이터 전송 속도 및 안정성이 향상된 TCP/IP를 공식 프로토콜로 도입했다. 이로 인해 현대적인 컴퓨터 네트워크의 기본 구조가 갖춰졌으며, 이 때를 즈음하여 '인터넷'은 단순히 일반명사 '인터네트워크'의 약어가 아닌 고유명사 취급을 받기 시작했다.[2] 'internetwork'의 약어인 'internet'과 구별하기 위해 고유명사 인터넷은 'Internet' 또는 'INTERNET' 등으로 표기한다. 인터넷은 LAN 등 소규모 통신망을 상호 접속하는 형태에서 점차 발전하여 전 세계를 망라하는 거대한 통신망의 집합체가 되었다. 인터넷에는 PC 통신처럼 모든 서비스를 제공하는 중심이 되는 호스트 컴퓨터도 없고 이를 관리하는 조직도 없다. 인터넷을 대표하는 조직으로 ISOC(Internet Society)가 있지만 인터넷을 총괄 관리하는 기구는 아니다. 그러나 인터넷을 총괄적으로 관리하지는 않지만 인터넷상의 어떤 컴퓨터 또는 통신망에 이상이 발생하더라도 통신망 전체에는 영향을 주지 않도록 실제의 관리와 접속은 세계 각지에서 분산적으로 행해진다.[3] 대중적인 월드 와이드 웹은 하이퍼텍스트 전송 프로토콜(HTTP)과 함께 사용되고, HTTP로 되어 있는 웹 페이지를 보기 위한 웹 브라우저로는 마이크로소프트의 인터넷 익스플로러, 모질라 재단의 모질라 파이어폭스 등을 이용한다. 인터넷은 표준 인터넷 프로토콜 집합(TCP/IP)을 사용해 전 세계 수십억 명의 사용자들에게 제공되는 지구 전체의 컴퓨터 네크워크 시스템이다. 인터넷은 개인, 학교, 기업, 정부 네트워크 등을 한정적 지역에서 전체 영역으로 유선, 무선, 광케이블 기술 등을 통해 연결하여 구성한 네트워크들의 네트워크이다. 인터넷은 하이퍼텍스트 마크업 언어(HTML)나 전자 우편을 지원하는 기반 기술 등을 통해 광대한 범위의 정보 자원과 서비스들을 운반한다. 인터넷에 의해 전화, 음악, 영화, 텔레비전 등의 기존 커뮤니케이션 미디어들은 재구현되고 재정의되었으며, 음성 인터넷 프로토콜 VoIP(Voice over Internet Protocol)와 인터넷 프로토콜 텔레비전 IPTV(Internet Protocol Television) 등과 같은 새로운 서비스들도 생겨나게 되었다.[4] 신문이나 도서 등의 출판물들도 웹사이트 기술에 맞춰 새롭게 구현되었는데, 블로그나 RSS 등과 같은 형태로 독자들에게 서비스되었다. 인터넷에 의해 사람들의 소통방식도 인스턴스 메시지, 인터넷 포럼, SNS 등으로 진화해 나갔다. 아웃렛이나 소규모 상인, 도매상의 영역에서도 온라인 쇼핑몰이 거대한 변화를 가져왔다. 인터넷을 통한 기업 간 거래와 금융서비스 등에 의해 전체 유통체계도 영향을 받게 되었다.[5] 인터넷의 유래는 1960~1970년대 미국 국방부 산하의 고등 연구국(Advanced Research Projects Agency, ARPA)의 연구용 네트워크가 시초이며, 군사용 네트워크는 밀네트(MILNET)로 발전되었다. 동서냉전이 한창이던 때 미국 국방부 고등계획국에서는 핵전쟁 등의 상황에서도 살아남을 수 있는 네트워크를 연구하였다. 연구결과 기존의 회선 교환(circuit switching)방식보다는 패킷 교환(packet switching)방식이 매우 견고하고 생존성이 높았다. 최초의 2 노드간의 상호연결은 1969년 10월 29일 UCLA와 SRI연구소간에 연결되었다. 이 통신망을 ARPANET이라고 하였으며 현재의 인터넷망의 시초이다.[6] 현재와 같이 TCP/IP 기반의 네트워크가 된 것은 1983년 1월 1일 ARPANET이 NCP 패킷 송출을 중단한 것이 기점이다. ARPANET과 별도로 1986년 미국과학재단(National Science Foundation)은 5곳의 슈퍼컴퓨터 센터를 연결하여 NSFnet을 만들었는데, 1980년대 말에 이르러 ARPANET이 흡수통합되면서 대학, 연구소, 정부기관, 기업 등 세계 모든 곳을 연결하는 국제 통신망으로 발전하게 되었다. 인터넷의 상업적 이용이 허용되고, 인터넷을 보다 편리하게 사용할 수 있는 브라우저로서 1993년 모자이크(Mosaic)가 출시되면서 사용자가 폭발적으로 증가하였다. 현재는 전 세계 146개국 5,000여 컴퓨터 네트워크와 900만대 이상의 호스트 컴퓨터가 연결되어 있다. 대한민국에서는 1993년에 인터넷 접속 서비스를 실시 하였으며 1990년대 후반부터 PC와 초고속 인터넷이 빠르게 보급되었고 이후 국민 대부분이 초고속 인터넷을 이용하였는데, 김대중 정부는 과감한 초고속 인터넷망 투자로, 미국이나 일본보다 앞선 인터넷 문화를 만들었다.[7] 김대중 정부는 1998년 6월에 초고속 인터넷 서비스를 시작했고, 4년 만에 대한민국은 초고속 인터넷 가입자가 1000만 명을 넘어섰었다.[8] 2002년 2월에 전세계 인터넷 이용자의 수는 5억 4420만 명에 이르렀는데, 북미 지역이 1억 8123만 명으로 가장 많았고, 그 다음이 유럽 지역으로 1억 7135만 명에 달했으며, 중동과 아프리카 지역은 이용률이 매우 낮았다. 2001년에 대한민국의 인구 100명당 인터넷 이용자의 수는 51명으로 세계 5위 수준이었는데, 2000년에는 세계 6위였으나 미국과 캐나다를 추월하고 싱가포르에는 추월 당해서 5위가 되었고, 이에 아이슬란드(68명), 싱가포르(61명), 노르웨이(60명), 스웨덴(52명) 등은 인구 100명당 인터넷 이용자의 수가 대한민국보다 많았고 미국(50명), 일본(45명) 등은 대한민국보다 적었다. 2003년 6월에 대한민국의 인터넷 이용자수는 2861만 1000명이고, 2006년 12월에 초고속 인터넷 서비스 가입자는 1401만 1419명이었다.[9]


이렇게 된 결과물을 형태소 분석기로 돌리면


인터넷(Internet,, 누리망, 문화, 인터네트, 전, 세계, 컴퓨터, 연결, TCPIPTransmission, Control, ProtocolInternet, Protocol, 통신, 프로토콜, 이용, 정보, 컴퓨터, 네트워크, 인터넷, 이름, 1973년, TCPIP, 기본, 아이디어, 생각, 빈튼, 서프, 밥, 간, 네트워크, 네트워크, 지향, 컴퓨터, 하나, 통신망, 안, 연결(Inter, Network)하고, 의도, 이, 인터넷(Internet), 명명, 데, 어원, 이후, 인터넷, 정보, 바, 전, 세계, 컴퓨터, 연결, TCPIP, 이용, 정보, 1, 복수, 통신망, 집합, 광역, 통신망, 뜻, 일반명사, 인터네트워크internetwork, 미국, 국방성, 아파넷, 인터네트워크, 본격적, 구축, 최초, 사례, 아파넷, 당초, 연구용, 참여, 기관, 다양, 목적, 아파넷, 요구, 컴퓨터, 종류, 다양, 프로토콜, 재정비, 필요성, 부각, 1983년, 미국, 국방성, 군사용, 네트워크, 기능, 밀넷(MILNET,, Military, Network, 분리, 아파넷, 민간용, 네트워크, 초창기, 사용, NCPNetwork, Control, Program, 데이터, 전송, 속, 안정성, 향상, TCPIP, 공식, 프로토콜, 도입, 이, 현대적, 컴퓨터, 네트워크, 기본, 구조, 때, 즈음, 인터넷, 일반명사, 인터네트워크, 약어, 고유명사, 취급, 시작, 2, internetwork, 약어, internet, 구별, 고유명사, 인터넷, Internet, INTERNET, 등, 표기, 인터넷, LAN, 등, 소규모, 통신망, 접속, 형태, 발전, 전, 세계, 망라, 거대한, 통신망, 집합체, 인터넷, PC, 통신, 서비스, 제공, 중심, 호스트, 컴퓨터, 이, 관리, 조직, 인터넷, 대표, 조직, ISOCInternet, Society, 인터넷, 총괄, 관리, 기구, 인터넷, 총괄적, 관리, 인터넷상, 컴퓨터, 통신망, 이상, 발생, 통신망, 전체, 영향, 실제, 관리, 접속, 세계, 각지, 분산적, 3, 대중적, 월드, 와이드, 웹, 하이퍼텍스트, 전송, 프로토콜(HTTP), 사용, HTTP, 웹, 페이지, 웹, 브라우저, 마이크로소프트, 인터넷, 익스플로러, 재단, 파이어폭스, 등, 이용, 인터넷, 표준, 인터넷, 프로토콜, 집합(TCP/IP), 사용, 전, 세계, 수십억, 명, 사용자들, 제공, 지구, 전체, 컴퓨터, 네크워크, 시스템, 인터넷, 개, 학교, 기업, 정부, 네트워크, 등, 한정적, 지역, 전체, 영역, 유, 무선, 광케이블, 기술, 등, 연결, 구성한, 네트워크들, 네트워크, 인터넷, 하이퍼텍스트, 마크업, 언어(HTML), 전자, 우편, 지원, 기반, 기술, 등, 광대한, 범위, 정보, 자원, 서비스들, 운반, 인터넷, 전화, 음악, 영화, 텔레비전, 등, 기존, 커뮤니케이션, 미디어들, 재구현, 재정의, 음성, 인터넷, 프로토콜, VoIPVoice, over, Internet, Protocol, 인터넷, 프로토콜, 텔레비전, IPTVInternet, Protocol, Television, 등, 서비스들, 4, 신문, 도, 등, 출판물들, 웹사이트, 기술, 구현, 블로그, RSS, 등, 형태, 독자들, 서비스, 인터넷, 사람, 소통방식, 인스턴스, 메, 인터넷, 포럼, SNS, 등, 진화, 아웃렛, 소규모, 상, 도매상, 영역, 온라인, 쇼핑몰, 거대, 변화, 인터넷, 기업, 거래, 금융서비스, 등, 전체, 유통체계, 영향, 5, 인터넷, 유래, 19601970년대, 미국, 국방부, 산하, 고등, 연구국(Advanced, Research, Projects, Agency, ARPA, 연구용, 네트워크, 시초, 군사용, 네트워크, 밀네트(MILNET), 발전, 동서냉전, 한창, 때, 미국, 국방부, 고등계획국, 핵전쟁, 등, 상황, 수, 네트워크, 연구, 연구결과, 기존, 회선, 교환(circuit, switching방식, 패킷, 교환(packet, switching방식, 견고, 생존성, 최초, 2, 노드간, 상호연결, 1969년, 10월, 29, UCLA, SRI연구소간, 연결, 통신망, ARPANET, 현재, 인터넷망, 시초, 6, 현재, TCPIP, 기반, 네트워크, 것, 1983년, 1월, 1, ARPANET, NCP, 패킷, 송출, 중단, 것, 기점, ARPANET, 별도, 1986년, 미국과학재단(National, Science, Foundation, 5곳, 슈퍼컴퓨터, 센터, 연결, NSFnet, 1980년대, 말, ARPANET, 흡수통합, 대학, 연구소, 정부기관, 기업, 등, 세계, 곳, 연결, 국제, 통신망, 발전, 인터넷, 상업적, 이용, 허용, 인터넷, 편리, 사용, 수, 브라우저, 1993년, 모자이크(Mosaic), 출시, 사용자, 폭발적, 증가, 현재, 전, 세계, 146개국, 5,000, 컴퓨터, 네트워크, 900만대, 이상, 호스트, 컴퓨터, 연결, 대한민국, 1993년, 인터넷, 접속, 서비스, 실시, 1990년대, 후반, PC, 초고속, 인터넷, 보급, 이후, 국민, 대부분, 초고속, 인터넷, 이용, 김대중, 정부, 과감, 초고속, 인터넷망, 투자, 미국, 일본, 인터넷, 문화, 7, 김대중, 정부, 1998년, 6월, 초고속, 인터넷, 서비스, 시작, 4년, 만, 대한민국, 초고속, 인터넷, 가입자, 1000, 명, 8, 2002년, 2월, 전세계, 인터넷, 이용자, 수, 5억, 4420, 명, 북미, 지역, 1억, 8123, 명, 다음, 유럽, 지역, 1억, 7135, 명, 중동, 아프리카, 지역, 이용률, 2001년, 대한민국, 인구, 100명, 인터넷, 이용자, 수, 51명, 세계, 5위, 수준, 2000년, 세계, 6위, 미국, 캐나다, 추월, 싱가포르, 추월, 5위, 이, 아이슬란드(68명),, 싱가포르(61명),, 노르웨이(60명),, 스웨덴(52명), 등, 인구, 100명, 인터넷, 이용자, 수, 대한민국, 미국(50명),, 일본(45명), 등, 대한민국, 2003년, 6월, 대한민국, 인터넷, 이용자수, 2861, 1000명, 2006년, 12월, 초고속, 인터넷, 서비스, 가입자, 1401, 1419명, 9


이렇게 나온다. 대부분은 다 맘에 드는데 괄호( 처리가 잘 되지 않는것 같다. 구분자로 인식해주면 좋으련만. 어쩌면 한나눔형태소분석기의 플러그인으로 이미 만들어져있을지도 모르니 확인해 볼 필요는 있겠다. 참고로 한나눔형태소분석기 문서를 잘 살펴보면 등록되지 않은 단어(unk로 분류)의 경우 단어를 추가하는등의 추가 작업도 가능해서 자연스럽게 확장이 가능하다.


간단하게 만들어본 Eclipse 프로젝트를 공유하는 것으로 끝~


nanum-noun.zip