RSS 추출 분리 태그

Download Report

Transcript RSS 추출 분리 태그

UCCViewer
survey
RSS
Writer : daewook-kim
Diagram – Contents
1
RSS 2.0
2
RSS 1.0
3
RSS Reader
4
Design
RSS 2.0 구조
 Analysis





Really Simple Syndication.
RSS 0.9x 의 발전된 버젼.
RSS 0.9x 의 아이템 수의 제한을 없앰.
아이템에 해당하는 모든 구성 요소들은 선택사항.
일반 포털사이트가 지원하는 버젼
RSS 2.0 sample- 1
<?xml version="1.0" encoding="euc-kr" ?>
XML파싱을 위해 필요한 정보선언
<rss version="2.0">
RSS 버전 선언
<channel>
RSS 정보가 시작됨을 의미
<title>아이헬퍼스</title>
//채널명(사이트명 또는 사이트의 메뉴명( 채널필수입력사항 )
<link>http://www.ihelpers.co.kr</link>
//웹사이트 URL정보 또는 채널에 해당하는 웹사이트 URL정보
(채널필수입력사항 )
<description>아이헬퍼스</description>
//채널설명 (채널필수입력사항 )
<language>ko</language>
//채널에 사용한 언어 – 사용가능 언어( KO : 한국어 )
<lastBuildDate>Nov, 15 2004 08:13:29 GMT</lastBuildDate>
//최종변경시간
<webMaster>[email protected]</webMaster>
<item>
<title>RSS에 대하여</title>
<link>http://www.ihelpers.co.kr/programming/lec.php?CMD=view&TYPE=1&IDX=245</link>
<author>손상모</author>
//작성자 ( 또는 작성자 이메일 주소 )
<pubDate>Nov, 15 2004 08:13:29 GMT</pubDate>
//발행일자( RFC 822 형식 )
<category>강좌</category>
//아이템 해당 카테고리( 메뉴 )
</item>
<item>
<title>게시판의 조회수를 정확하게 측정하자</title>
<link>http://www.ihelpers.co.kr/programming/tipntech.php?CMD=view&TYPE=0&IDX=458</link>
<author>손상모</author>
<pubDate>Nov, 13 2004 01:33:48 GMT</pubDate>
<category>Tip&Tech</category>
</item>
<item>
<title>글자와 이미지에 Blink 효과주기</title>
<link>http://www.ihelpers.co.kr/programming/tipntech.php?CMD=view&TYPE=0&IDX=457</link>
<author>손상모</author>
<pubDate>Nov, 12 2004 19:36:07 GMT</pubDate>
<category>Tip&Tech</category>
</item>
</channel>
</rss>
RSS 2.0 sample- 2
< ?xml version = “1.0” enclosing = “euc-kr”?>
//XML파싱을 우해 필요한 정보 선언
<rss version = “2.0” >
//RSS 버전 선언
<channel>
//RSS 정보가 시작됨을 의미
<title>기차와 함께 하는 여행</title>
//RSS 제공 사이트의 타이들을 기록
<link>http://blog.naver.com/lovtort</link>
//RSS 제공 사이트의 URL을 기록
<description>기차를 즐기자~~</description>
//RSS 제공 사이트의 간단한 설명 기록
<language>ko</language>
//RSS 문서에 사용되는 국가 언어 선언
<copyright>Copyrigth©NHN Crop All rights Reserved.</copyright> //RSS 문서 저작권 선언
<item>
//글 기록 시작
<title>< ! [ CDATA [ 안산선탐사6편 – 대야미역 ] ] ></title>
//글의 제목
<link>http://blog.naver.com/lovtrout/80014236050</link>
//글의 전문을 확인할 수 있는 웹 주소
<description> - < ! [ CDATA [
//글 내용 일부 또는 전체를 기록
반월역을 출발, 대야미역을 향해 달리는 안산선
전철. 이 탐사기에서 처음으로 안산선 동글이가 나왔다.
^^반월역을 출발하면
전철은 19%(퍼밀)의 오르막길을 ] ]></description>
<category> - < ! [ CDATA [ 안산선 ] ]> </category>
//글이 포함되어 있는 카테고리
<author>홍길동</author>
//글의 저작자를 기록
<pubDate>Thu, 04 May 2006 02:35:49 + 0900</pubDate>
//글이 작성된 시간을 기록
</item>
//item태그를 닫음으로써 글에 대한 정보가 완료됨을 선언( 글 개수만큼 <item></item>반복 )
</channel>
//열어놓은 채널을 닫음
</rss>
/열어놓은 rss태그 닫음, RSS 문서의 끝
RSS 1.0 구조
 Analysis




RDF Site Summary.
RDF 사용.
Item 구성요소가 Channel 구성요소 밖에서 사용됨.
XML – Namespaces(RSS Module)을 이용한 확장
( Dublin Core Module )
 Default Namespace : http://purl.org/rss/1.0
 Dublin Core : http://purl.org/dc/elements/1.1/
 기본구조 : < rdf : RDF > … < / rdf : RDF >
RSS 1.0 sample
<rdf:RDF
xmlns:rdf=“http://www.w3.org/1999/02/22-rdf-syntax-ns#”
xmlns=“http://purl.org/rss/1.0/ “
//기본네임스페이스 처리
xmlns:dc="http://purl.org/dc/elements/1.1/">
//Dublin Core 방식 네임스페이스
<channel rdf:about="http://www.xml.com/cs/xml/query/q/19">
<title>XML.com</title>
//해당 사이트명
<link>http://www.xml.com/</link> //해당사이트 URL주소
<description>
//사이트에 관한 간략한 설명
XML.com features a rich mix of information and services for the XML community.
</description>
<language>en-us</language>
//사용가능 언어
<items>
<rdf:Seq>
<rdf:li rdf:resource="http://www.xml.com/pub/a/2002/12/04/normalizing.html"/> //출처
<rdf:li rdf:resource="http://www.xml.com/pub/a/2002/12/04/som.html"/>
//출처
</rdf:Seq>
</items>
</channel>
<item rdf:about="http://www.xml.com/pub/a/2002/12/04/normalizing.html">
<title>Normalizing XML, Part 2</title>
<link>http://www.xml.com/pub/a/2002/12/04/normalizing.html</link>
<description>
//아이템에 관한 간략한 설명
In this second and final look at applying relational normalization techniques
</description>
<dc:creator>Will Provost</dc:creator> //작성자
<dc:date>2002-12-04</dc:date>
//작성일자
</item>
</rdf:RDF>
RSS Reader 개요
RSS
- News
- Blog
- Shopping
- Web
RSS Parsing
( Rss 문서를 분리하여 분석 )
Portable Device
(UCC Viewer)
RSS Reader를 구성하는 핵심모듈
HTML내
TITLE
존재하는가?
<item>
< link / >
no
RSS
Document
yes
<item>
< link / >
문서분리
(최소단위로 분리)
XHTML
RSS 문서
문서비교
RSS Parser
문서 분석기
문서 추출기
 문서 분석기에서는 RSS문서를 읽어와 <item>단위로 분리하고 배열 형식으로
저장하게 되는데, RSS문서를 읽어오는 방식은 Socket통신을 이용함
 문서 분석기는 비 상업용으로 공개 되어 있는 RSS Parser0.9버전을 확장하여 사용함.
 문서 분석기는 PHP 스크립트의 xml_parse()함수를 이용하여 RSS문서를
노드(Node)별로 분리한 뒤, 분리된 노드를 배열 형식으로 저장하여 정의해 놓은
분류법을 적용, 해당 단위 태그로 인식하도록 함.
블로그 및 인터넷 뉴스의 컨텐츠 구조
제목(Title)
날짜 또는
작성자,
기타
본문
(Description)
코멘트(댓글)
RSS 추출 분리 태그

RSS 추출 분리 태그
구
분
Parent Tags
Channel Tags
Item Tags





태
그
channel, item, image, textinput
title, link, description, language, copyright, managingeditor,
webmaster, pubdate, lastbuildate, category, generator, docs, cloud
title, link, description, enclosure, guid, pubdate, source
Image : 이미지 정보(GIF, JPEG, PNG)
Textinput : CGI Script와 연계할 수 있는 textinput박스와 submit Button기능
Managingeditor : 수정 담당자 또는 수정 담당자 이메일 주소
Docs : RSS형식에 대한 URL
Guid : 유일한 식별문자
본문 추출기 상세 설계도
1. 본문 URL 추적모듈
<link>
(RSS내주소)
URL
Socket
통신모듈
(HTML소스 추출)
HTML
URL
두 단계
이상 URL
찾기 실패
시 프로그램
중단
실패
아니오
<iframe>
<frame>내
URL 추출 모듈
HTML
소스 내
Title, 초록이 존재?
아니오
문서 변환기
(XHTML로 변환)
예
HTML
2. 문서 분석 모듈
3. 본문 비교/추출 모듈
본문
예
분리
문자열과,
<description>
비교.
유사도 최대값?
문서 분리 모듈
(<div> 단위 분리)
문서 전처리 모듈
모바일
디바이스
분리 문자열
(순수 Text)
Analysis
 본문 URL 추적 모듈
 URL 유추 방식 적용, RSS Parser에서 분리된 <item>집합 중 <link>정보와
<title>정보를 활용.
 탐색 중 일치하는 부분이 있게 되면 해당 URL을 본문의 URL로 인지하고
추적을 멈추게 하였고, 정확도을 높이기 위해 본문의 일부분(초록
중에서도 일부분)도 같이 검색하도록 함.
 무한 반복 에러를 방지하기 위해 첫번째 검색에서
<frame>,<iframe>태그를 찾아내고 해당 속성중 ‘src’( Tag요소 중 주소를
나타내는 attribute)에 해당하는 내용을 재 추적하는 두 단계 URL탐색방법
 문제점
 국내 대부분의 Vendor들이 본문의 URL을 <frame>, </iframe>태그를
이용하여 적어도 한번 이상 감추고 있다.
• 국내 Vendor의 URL 은닉 횟수 : 엠파스 1번, 네이버 2번, 다음 1번
Analysis
 HTML 특정 단위 분리과정
 본문 추출기의 문서 분석기가 URL의 HTML소스에서 본문의 위치를
알아내는 방법은 구조화 되고, 복잡한 HTML 문서를 분석하기 위해
우선 HTML을 특정단위로 분리하는 과정이 필요함.
1.
2.
3.
구분자를(Seperator)를 이용하여 문서전체를 자르고 배열로 저장 하는 방법
패턴매칭(Pattern matching)을 이용하여 분리하고 싶은 영역만 추출하는 방법
HTML문서를 엘리먼트(Element)단위로 파싱(Parsing)하는 방법
 결론
 위의 방법 중 논문에서 가장 간단하면서도 효과적인 ‘구분자를 이용한
분리방법’을 선택하고 본문의 순수 Text를 가능한 한 많이 포함할 수
있는 최소단위의 구분자 Tag 를 찾는다.
 </div>태그를 최소단위로 하였을 때 매우 높은 정확도를 나타냄.
 외국의 웹 사이트를 살펴보면 <div>와 Css(Cascading Style Sheet)를
주로 시용하여 HTML구조를 MarkUp하고 있다.( 웹 2.0 권고안 )
Analysis
 <div>태그를 구분자로 한 구조적 정보단위의 분리방법에 의한 HTML 문서구조
<table>
<tr>
<td>
<table>
<tr>
<td>
<div>
컨텐츠 또는 컨텐츠를 포함하고 있는 문단1.
배열요소 1.
</div>
</td>
</tr>
</table>
<td>
<table>
<tr>
<td>
<div>
컨텐츠 또는 컨텐츠를 포함하고 있는 문단2.
배열요소 2.
</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
배열요소 3.
Analysis
<script>
Alert(msg);
</script>
<p><div>
컨텐츠
내용입니다.
</body>
컨텐츠
내용입니다.
<전 처리 과정 후 변형된 문서 내용 >
 본문 추출기의 본문 추출방식은 RSS문서에서 추출한 <description>의 내용을 이용.
 RSS의 <description>은 본문의 내용을 모두 반영하거나, 적어도 일부분 반영하기
때문에 </div>태그로 분리된 각 배열의 요소와 <description>의 요소를 비교하여
가장 유사성이 높은 배열요소를 본문으로 가정하고 순수 Text를 추출하는 방식.
 사용되는 비교함수 ( PHP 스크립트의 similar_text() 8 )

두 문자열의 유사성을 %단위로 계산
 문서 변환기는 기본적인 XHTML템플릿에 추출된 본문의 Text를 삽입함으로써
어렵지 않게 일정 레이아웃을 유지 할 수 있었다.
 HTML과 유사한 문법의 XHTML을 각 이동통신사에서 지원하기 때문에 일정한
양식만 지켜주면 이동통신사들의 각각의 단말기에서 원활히 출력된다.
UCCViewer