블로그 이미지
이비그치면

태그목록

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
오직 하루, 한 순간만 나의 아버지의 손 안에서 쉬는 모든 것들이 그 속에서 위안을 얻게 하소서.

내가 아이로서 무엇을 갈망할 수 있을까? 그는 내게 어머니의 마음을 갖게 하시고, 그는 매일 매일 자비로움과 부드러움을 주시네.

고통을 기쁨으로 만들어 주시네. 그는 항상 내게 가까이 계시네. 특별한 순간에는 특별한 사랑을 베푸시네. 일상의 근심을 대신 지시는, 힘과 도움이라는 두 이름의 그. 그의 모든 값진 재산을 지키시고, 모두를 보살피시네. 당신의 날처럼 힘과 물질들을 그가 약속하셨네.

편하고 고요하게 쉬게 하소서. 사랑하는 아버지의 약속 안에서, 값진 맘의 위안을 헛되게 하지 마시고, 내게 하셨던 약속대로,

도와주소서, 내게 일어나는 일들을. 당신의 믿음직한 아버지의 손으로. 단지 하루, 한 순간만이라도, 하늘 나라에 갈 때까지.

위와 같은 html 문에서

글의 내용(text)만을 추출하고 싶을때

BeautifulSoup을 사용하여 다음과같이 간단히 추출할수있다.

 

import re
from bs4 import BeautifulSoup

data =''' 
오직 하루, 한 순간만 나의 아버지의 손 안에서 쉬는 모든 것들이 그 속에서 위안을 얻게 하소서.

내가 아이로서 무엇을 갈망할 수 있을까? 그는 내게 어머니의 마음을 갖게 하시고, 그는 매일 매일 자비로움과 부드러움을 주시네.

고통을 기쁨으로 만들어 주시네. 그는 항상 내게 가까이 계시네. 특별한 순간에는 특별한 사랑을 베푸시네. 일상의 근심을 대신 지시는, 힘과 도움이라는 두 이름의 그. 그의 모든 값진 재산을 지키시고, 모두를 보살피시네. 당신의 날처럼 힘과 물질들을 그가 약속하셨네.

편하고 고요하게 쉬게 하소서. 사랑하는 아버지의 약속 안에서, 값진 맘의 위안을 헛되게 하지 마시고, 내게 하셨던 약속대로,

도와주소서, 내게 일어나는 일들을. 당신의 믿음직한 아버지의 손으로. 단지 하루, 한 순간만이라도, 하늘 나라에 갈 때까지.

''' soup = BeautifulSoup(data, 'html.parser') l = [(div.contents[0].strip(), span.text.strip()) for div in soup.select('div.test') for span in div.select('span')] for match, verse in l: print(match, verse)

실행결과는 아래와 같다

 오직 하루, 한 순간만
 나의 아버지의 손 안에서 쉬는 모든 것들이
 그 속에서 위안을 얻게 하소서.
 
 내가 아이로서 무엇을 갈망할 수 있을까?
 그는 내게 어머니의 마음을 갖게 하시고,
 그는 매일 매일 자비로움과 부드러움을 주시네.
 
 고통을 기쁨으로 만들어 주시네.
 그는 항상 내게 가까이 계시네.
 특별한 순간에는 특별한 사랑을 베푸시네.
 일상의 근심을 대신 지시는, 힘과 도움이라는 두 이름의 그.
 그의 모든 값진 재산을 지키시고, 모두를 보살피시네.
 당신의 날처럼 힘과 물질들을 그가 약속하셨네.
 
 편하고 고요하게 쉬게 하소서.
 사랑하는 아버지의 약속 안에서,
 값진 맘의 위안을 헛되게 하지 마시고,
 내게 하셨던 약속대로,
 
 도와주소서, 내게 일어나는 일들을.
 당신의 믿음직한 아버지의 손으로.
 단지 하루, 한 순간만이라도, 하늘 나라에 갈 때까지.

'{} {}'.format('one', 'two')  --> 'one two'

'{first} {last}'.format(first='아', last='무개')  --> '아 무개'

'{last} {first}'.format(first='아', last='무개')  --> '무개 아'

전 : '111000'   후 : '111111'

'0' 에서 '1'로 바뀐 문자열내 위치값(position값, index)을 알아야할때 

bef_str = '111000'

cur_str = '111111'

bef_val = [fld for fld in bef_str]  --> ['1', '1', '1', '0', '0', '0']

cur_val = [fld for fld in cur_str]  --> ['1', '1', '1', '1', '1', '1']

changed = [bef != cur for bef, cur in zip(bef_val, cur_val)]  --> [False, False, False, True, True, True]

 

 

 

1) 파이선 제공함수 이용


>>> iNum = 1234567
>>> format(iNum, ',d')
'1,234,567'
>>> fNum = 1234567.89
>>> format(fNum, ',.2f')
'1,234,567.89'
>>> 

2) 정규식(Regular Expression) 이용

아래와 같은 형식의 성경구절 텍스트를

01 1:1 태초에 하나님이 천지를 창조하시니라

01 1:2 땅이 혼돈하고 공허하며 흑암이 깊음 위에 있고 하나님의 신은 수면에 운행하시니라

01 1:3 하나님이 가라사대 빛이 있으라 하시매 빛이 있었고

.

.

파싱하여 권, 장, 절, 성경text 로 나누려고 하는데

파이선과 정규식을 썼더니 한줄 코딩으로 해결이 되네요


line = '01 1:1 태초에 하나님이 천지를 창조하시니라'

dummy1, vol, chap, verse, content, dummy2 = re.split('(\d{2}) (\d+):(\d+) (.*)', line)


참 군더더기 없고 간결합니다

파이선, 정규식 텍스트처리에 강추합니다




앞의 글에 소개드린 프로그램을 혹시 보신분들중에
소스 중간중간 나와있는 이상한 표현들로 어려움을 겪으신 분들을 위해
유틸리티 하나 소개해드릴까 한다

수식(Expression)이 일반숫자, 수의 상징적인 표현(예를 들어 x, y) 그리고 연산기호(+, -등)를 이용하여 숫자해를 구하는 문제를 간결하게 표현하기 위하여 고안된 체계라면

정규식(Regular Expression)은 텍스트(문자열)의 패턴/반복형태를 표현하기 위하여 상징적인 표현(Metacharacter 예를 들어 *, ?, .)과 일반문자들(literal, normal text characters)로
구성되는 텍스트 표현형식이라고 할수있겠다

여기에서 Regular는 정규로 번역이 되어있는데  반복적인 주기를 갖고있는 어떤 규칙을 형용하기 위한 단어이다

텍스트가 어떤 규칙을 가지고 반복될때 이 텍스트를 처리하기 위해서 정규식을 이용하면
아주 간결하게 표현이 가능하고 이 때문에 많은 프로그램언어가 이를 지원하고 있다

그런데 사실 이 정규식은 처음 보게되면 좀 암호같아서 그 의미를 이해하기가 어렵다
그리고 또 정규식을 만들어서 그 결과를 확인해보기 전에는 어덯게 처리될지 짐작이
어려운 경우도 많다

다음에 소개하는 유틸리티 프로그램은 
정규식 작성과 연습, 확인 그리고 오류의 발견및 수정에 아주 유용한 툴이다

Kodos --  http://kodos.sourceforge.net/

아래 화면 실제 사용예다

연재물의 연재회차와 제목을 주어진 텍스트에서 추출하려는 정규식을 테스트해보려고 한다
<938> 夫子之得邦家者인댄 所謂立之斯立하며  -- 이게 원하는 결과물이다
해당 텍스트를 Search String 에 입력한다(또는 Copy && Paste)
정규식을 Regular Expression Pattern에 입력
아래에 있는 Match 또는 Match All 탭을 눌러 결과 확인(결과가 파란글자로 나타난다)

윈도우도움말파일을 이용하여
앞의 글에서 만들었던 연재칼럼 스크랩파일들을 편리하게 볼수있는 방법을
소개하고자 한다
윈도우도움말파일은 파일확장자가 .chm인 파일로 별도의 실행프로그램없이
MS 윈도우에서 클릭하면 실행되는 파일이다
주로 MS윈도우의 사용자매뉴얼파일로 많이 제공되는 파일형식이다
실행된 모양은 아래 그림과 같다


만드는 방법은 [윈도우도움말 만들기] 로 검색을 해보면 많이 찾을수 있다
유틸리티를 이용해서 만드는 방법과 프로그램을 작성해서 만드는 방법이 있다

MS에서 제공하는 Html Help Workshop을 이용하는 방법이 많이 소개되고 있다
하지만 좀 손이 많이 가서 익숙해지기전까지는  도움말파일만들기가 쉽지않다

여기서는 앞의 파이선 프로그램을 약간 수정하고 또 하나의 파이선 프로그램을 만들어 
이 도움말파일만드는 작업을 좀 쉽게  해보고자 한다
물론 프로그램작성이 쉽다는 얘기는 아니다

1) HTML Help Workshop 설치
   - http://www.microsoft.com/downloads/details.aspx?familyid=00535334-c8a6-452f-9aa0-d597d16580cc&displaylang=en 에서 다운받아 설치

2) 목록파일과 내용파일(연재물웹페이지)을 만든다 
    - 게시물 스크랩 프로그램 변경하여 [게시물제목##내용페이지]형식의 목록파일 작성
    - 아래의 프로그램을 다운받아 실행
     


3) 위의 목록파일을 처리하여 HTML Help Workshop프로그램에서 사용할 
    프로젝트파일(.hhp)과 목차파일(.hhc)을 만든다
    - 아래의 프로그램을 다운받아 IDLE(Python GUI)에서 실행
    
4) 윈도우의 시작 -> 실행 (cmd 입력)  -> 확인 -> 도스 실행창이 뜨면
   - cd c:\HanjaIyagi
   - C:\HanjaIyagi>"c:\Program Files\HTML Help Workshop\hhc.exe" HanjaIyagi.hhp

5) 작업폴더에서 확인해보면 HanjaIyagi.chm 파일이 만들어진것을 볼수있다
   이것으로 원래 도움말만들기 작업은 완료가 되는것인데 목차파일의 한글처리문제때문에
   이 chm파일을 클릭해보면 목차부분이 깨져보인다
   그래서 좀 번거롭지만 한가지 작업을 더 해주어야지 최종완성본이 만들어진다

6) KeyTools 유틸리티 사용
    - 임시폴더 하나 생성(예: c:\Output)
    - http://www.keyworks.net/keytools.htm 에서 다운받아 설치
    - 설치가 끝나면 실행
    - Decompile 클릭
      . Source file -- Browse버튼 눌러 c:\HanjaIyagi\HanjaIyagi.chm 선택
      . Destination folder -- Browse버튼 눌러 C:\Output 선택
      . OK 버튼 클릭
    - 위의 작업이 끝나면 C:\Output 폴더를 연다
    - UltraEdit 같은 에디터로 HanjaIyagi.hhc 를 Open한후에 새이름으로저장을 선택하고
       (하지만 이름을 바꿀 필요는 없다) 서식을 ANSI/ASCII 로 하여 다시 저장한다
    - cmd창 열어 cd c:\Output
    - C:\Output>"c:\Program Files\HTML Help Workshop\hhc.exe" HanjaIyagi.hhp  

7) Output폴더의 HanjaIyagi.chm 클릭해보면 아래와 같이 잘 만들어진
    연재물보기를 볼수있을것이다

신문칼럼/게시글 스크랩

2010. 7. 23. 17:01 | Posted by 이비그치면


동아일보에 매일 연재되는 [한자이야기]라는 연재물이 있다
잠깐동안에 볼수있고, 새겨두면 좋은 이야기도 있고 한자공부도 할겸해서
즐겨보는 유익한 칼럼이다

2006년 1월 2일부터 시작된 연재물인데 필자는 몇번 바뀌었지만 아직까지 (2010년 7월 28일)
연재가 되고있으니 꽤나 장수하고있는 칼럼이다
이 칼럼을 전부 스크랩하는 방법을 소개한다
먼저 다음과 같이 동아일보 사이트에 접속해 한자이야기로 기사를 검색한다
www.donga.com에서 <문화> 선택
혹은  http://news.donga.com/Culture
해당사이트로 이동한후 아래와 같이 주요연재목록에서 [한자이야기] 선택

매 페이지마다 15개씩의 연재물이 있고 현재 950회까지 연재가 되고있다
원하는 회차를 클릭해서 내용을 볼수있고  저장(스크랩)을 원하면 익스플로러의 파일을 눌러
<다른 이름으로 저장>하기를 눌러 저장할수 있다
물론 이렇게 저장하는 방법도 있겠지만 그럼 엄청난 수고를 해야만 한다 그리고 페이지에 불필요한 군더더기들도 많이 붙어있어 보기에 깔끔하지 않다

이런 반복적인 일을 바로 컴퓨터에게 시키면 엄청난 시간과 노력을 절약할수가 있다 
이렇게 하기 위해서는 약간의 프로그래밍지식이 필요하지만
파이선을 이미 알고계신분이라면 제가 작성한 파이선 프로그램이 그리 어렵지는 않을것이다
그리고 설사 프로그램을 모르신다해도 아래의 순서대로 하면
원하는 결과물을 얻을 수 있을것이다

파이선(Python) 설치안된 경우
1. c:\HanjaIyagi 폴더 만든다
2. 파이선 설치한다
    - www.python.org 에 접속
    - DOWNLOAD 로 들어간다
    - Python 2.7 Windows installer (Windows binary -- does not include source) 클릭
    - 실행버튼 누름
    - 다운로드 완료후 설치 클릭
    - next버튼 계속 클릭하고 finish눌러 설치 완료

3. 아래의 파일을 다운로드하여 c:\폴더에 저장
  


4. 시작 => 모든 프로그램 => Python 2.7 => IDLE(Python GUI)

5. IDLE 창이 열리면 (Python Shell)   
   - File => Open => c:\폴더로 이동 => 다운받은 hanja_이야기.py 선택
   - 새로 열린 창에서 프로그램 소스를 확인할 수 있다
   - Run => Run Module 해서 프로그램 실행(전체 스크랩하는데 약 10분 정도 걸림)

6. c:\HanjaIyagi 에서 결과물 확인

파이선(Python) 설치된 경우
-  위에서 2번만 제외하고 동일


.

연재강좌의 파일 일괄받기

2010. 7. 23. 16:59 | Posted by 이비그치면
.
이전 1 다음