Ruby Programming Date, scan, 웹 처리 한국어 정보의 전산 처리 2017. 5. 22.

Slides:



Advertisements
Similar presentations
Ⅰ. 연산자 Ⅱ. 제어 구조. 연산자 : 할당 연산자 - 사용자가 정의한 변수에 임의의 값을 저장하는 기능 strvar = strVar1+ “ Hello ”
Advertisements

일정 관리 다이어리 제작 JSP Programming with a Workbook. 학습 목표  사용자의 일정을 관리할 수 있는 다이어리에 대하여 알아보자. JSP Programming with a Workbook2.
제철고 프로그래밍언어 2015 가을학기 강의 #2 Python 변수, 입출력, 배열 박성우 POSTECH 컴퓨터공학과 2015 년 9 월 30 일.
파이썬 (Python). 1 일 : 파이썬 프로그래밍 기초 2 일 : 객체, 문자열 3 일 : 문자인코딩, 정규표현식, 옛한글 4 일 : 파일 입출력 5 일 : 함수와 모듈 6 일 : 원시 말뭉치 다루기 실습 7 일 : 주석 말뭉치 다루기 실습 8 일 : 웹 데이터로.
Python Ch.06 RaspberryPi Sejin Oh. Raspberry Pi Python  IDLE(Integrated Development Environment)  라즈베리 파이 배포본들은 일반적으로 파이썬과 파이썬 3 의 IDLE 파 이썬 개발 도구를.
1 파일 및 폴더 다루기 A. 파일이란 : 응용프로그램을 이용해서 만든 사용자가 만든 정보의 집합 - 파일 형식 : 이름과 확장자로 이뤄짐 예 sample.txt 샘플.txt - 복원하려면 휴지통에서 파일선택 후 드래그해서 밖으로 이동 혹은 RESTORE B. 확장자의.
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
열쇠고리 달력의 비밀 괴짜수박들 임아영, 임성현, 이인성.
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
최윤정 Java 프로그래밍 클래스 상속 최윤정
Ruby 프로그래밍 1 문자열 입출력 제어구조 looping 함수 정의
데이터 파일 C 데이터 파일과 스트림(Stream) 텍스트 파일 처리
Lesson 3. 입출력과 제어문.
KIM HEESANG JDBC Programming 3 KIM HEESANG
P150 문제를 프로그래밍 할 것 Source file (헤더파일포함), 실행화면 (학번_이름_1.txt)
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
2007 1학기 11 프로젝트 기초 실습.
KHS JDBC Programming 4 KHS
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
Method & library.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
어서와 C언어는 처음이지 제14장.
인터넷응용프로그래밍 JavaScript(Intro).
Linux/UNIX Programming
2018년 11월 05일 박성진 Web & Internet [08] 레이아웃 P1 2018년 11월 05일 박성진
영상처리 실습 인공지능연구실.
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
Linux/UNIX Programming
Term Projects 다음에 주어진 2개중에서 한 개를 선택하여 문제를 해결하시오. 기한: 중간 보고서: 5/30 (5)
Ruby 프로그래밍 3 Array와 Hash 이용
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
연산자 (Operator).
USN(Ubiquitous Sensor Network)
프로그래밍 원리 Chapter 05 자바스크립트 기초 신한대학교 IT융합공학부 박 호 균.
에어 조건문.
FileMaker를 이용한 데이터 관리 옥현진(KICE).
2장. 변수와 타입.
17장. 제어문과 내장 함수 제어문 내장 함수 제어문 내장 함수.
Java Programming Java Programming 기초 2장 백석대학교 인터넷멀티미디어 LAB1111호.
웹 연동 기술 Yang-Sae Moon Department of Computer Science
Linux/UNIX Programming
Linux/UNIX Programming
지도교수 : 안미정 교수님 사이버 경찰학과 김영훈
[ 단원 04 ] 반복과 배열.
파일 입출력과 그리기.
에어 PHP 입문.
2장 PHP 기초 PHP의 시작과 끝을 이해한다. 주석문에 대하여 이해한다. echo 문을 이용하여 화면에 출력하
Homework #12 (1/2) 프로그램을 작성하고, 프로그램과 실행 결과를 프린트하여 제출한다.
Linux 9.X 기초에서 활용까지 Chapter 06 VI 편집기.
JSP Programming with a Workbook
Homework #3 (1/3) 다음을 수행한 후, 결과 파일들을 출력하여 제출한다.
함수, 모듈.
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
구조체(struct)와 공용체(union)
Ruby 프로그래밍 2 loop, 수열 함수 정의 및 호출 반복과 재귀
디지털 사운드를 GoldWave로 변환하자
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
프로그래밍 개론 Ⅰ-실습 2장 데이터와 식①.
JSP Programming with a Workbook
maria db JDBC PROGRAMMING 5
어서와 C언어는 처음이지 제21장.
 6장. SQL 쿼리.
Docker Study 6~7.
Report #2 (기한: 3/16) 데이터 구조 과목의 수강생이 50명이라고 가정한다. 이 학생(학번은 2016????으로 표현됨)들의 중간 시험(0~100), 기말 시험(0~100) 성적을 성적 파일에 작성하라(프로그램을 통해서 또는 수작업으로). 성적 파일을 읽어들여서.
7 생성자 함수.
Linux/UNIX Programming
6 객체.
Ruby Programming 8 Web Crawling 한국어 정보의 전산 처리
Presentation transcript:

Ruby Programming Date, scan, 웹 처리 한국어 정보의 전산 처리 2017. 5. 22.

날짜 처리 문제 날짜와 관련된 연산은 매우 골치 아픈 주제임. 지구의 공전 주기가 딱 떨어지는 정수가 아니기 때문에 윤년을 고려해야 함. (4년에 한 번, 100년에 한 번, … ) 1년을 구성하는 각 달의 날 수가 같지 않음. 입출력 문제: 날짜를 표시하는 방법이 나라마다 다름. 참고: Janssens가 만든 command line tool dseq (cf. seq) 이런 복잡한 문제를 다루어 줄 class를 프로그래밍 언어 차원에서 제공함. ruby에서 Date class를 사용하려면: require ‘date’

Date class의 기본 기능 요일 알아보기: x.wday Date object 생성: x = Date.new(연, 월, 일) 요일 알아보기: x.wday x + 정수: x로부터 정수 날 뒤의 Date object 반환 정수값 반환: 0(일), 1(월), 2(화), … , 6(토) x - 정수: x로부터 정수 날 앞의 Date object 반환 x = Date.new(1970,2,15) ; x + 10000 #1997-07-03 x - y (둘 다 Date object인 경우): 두 날 사이의 날 수 반환 날짜뿐 아니라 시간까지 고려한 연산도 가능. 유리수 반환. y = Date.today ; y - x #17262/1 x.upto(y){|date| … } # x부터 y까지의 enumrator 생성

달력 만들기 (calendar_month.rb) start_day = Date.new(ARGV[0].to_i, ARGV[1].to_i, 1) 그 달의 달력을 출력 사용자가 command line argument로 연, 월 입력하면 $,="\t" print "\t" * start_day.wday #첫날의 요일에 따라 탭 출력 print "일","월","화","수","목","금","토\n" start_day.upto(end_day) do |date| #첫날부터 말일까지 end_day = start_day.next_month-1 #그 달의 말일 print "\n" if date.saturday? #토요일이면 줄바꿈 출력 print date.day, "" #날짜와 탭 출력 end

달력 외양 향상시키기 컬러 출력: colorize gem 이용 (sudo) gem install colorize (Linux에서는 sudo 필요) 일요일을 적색으로 출력하려면: 문자열.red 1년치 달력 출력: start_day를 적절히 조정하면서 1달치 달력 출력 루틴을 12번 반복 첫째 주의 앞의 빈 칸을 앞 달 날들로 채우고 마지막 주의 끝의 빈 칸을 다음 달의 날들로 채우기 calendar.rb 참조

음력 처리 LunarSolarConverter.rb를 require하여 이용 calendar.rb에 음력 날짜 추가하기 $,="-" ; print l.lunarYear, l.lunarMonth, l.lunarDay l = LunarSolarConverter.new.SolarToLunar(Solar.new(1970, 2, 15)) if date.saturday? #토요일이면 cvt = LunarSolarConverter.new #음력-양력 변환기 object 생성 end #음력 월, 일, 줄바꿈 출력 print lunar.lunarMonth,"-",lunar.lunarDay,"\n" lunar = cvt.SolarToLunar(Solar.new(date.year,date.month,date.day)) calendar_lunar.rb 참조

파일 한꺼번에 읽기 파일을 열어서 그 안의 문자열들을 읽을 때, 대개 라인을 한 줄씩 읽는 것이 보통임. File.open(filename).each do |line| … end lines = File.open(filename).readlines 파일 전체를 한꺼번에 읽는 것도 가능 str = File.read(filename) File.open에서는 “r:UTF-8”처럼 인코딩을 명시하나 File.read에서는 :encoding=>'utf-8'과 같이 함. UTF-8이 default이므로 UTF-8일 때는 안 써도 됨.

scan 메소드로 정규표현 처리 문자열.scan(/정규표현/) : 문자열 내에서 정규표현에 match되는 부분들을 찾아서 Array로 만들어 반환 정규표현 내에 group(괄호로 묶은 부분)이 없으면 단순 문자열들의 Array를 반환. group이 있으면 각 match 내의 group에 해당하는 부분들로 이루어진 Array들의 Array를 반환. "abc xyz 가나다".scan(/\w+/) #["abc", "xyz", "가나다"] #[["John", "90"], ["Mary", "80"], ["Bill", "70"]] str="John,90;Mary,80;Bill,70" ; str.scan(/(\w+),([0-9]+)/) str.scan(/(\w+),([0-9]+)/).each{|name,score| ... }와 같이 정규표현 내의 각 group을 변수로 직접 받아서 사용할 수 있음.

csv 파일을 scan 메소드로 처리하기 학생들의 5과목 성적 들어 있는 파일에서 총점, 평균 내기 File.read(ARGV[0]) #파일 전체를 읽어서, scan하여 $, = "\t" ; $\ = "\n" #필드 구분자, 레코드 구분자 지정 .each do | name, kor, eng, math, phy, che, job | sum = kor.to_i + eng.to_i + math.to_i + phy.to_i + che.to_i #정규표현 내의 7개의 group을 7개의 변수로 지칭 end print name, kor, eng, math, phy, che, sum, avg, job avg = sum / 5.0 라인 단위로 읽어서 split으로 분리하는 것과 같은 효과.

웹에서 파일 읽어 오기 (uri.rb) 헤더 파일 가져오기: require 'open-uri' open(url) do |f| #url을 열어서 f로 지칭. read로 파일 전체 읽기 f.read.scan( /<a href="(.*?)"/ ).each do |link| #정규표현 /<a href="(.*?)"/ 내의 괄호 부분에 매치되는 것들을 link로 지칭 puts link #출력 end f.each_line으로 한 라인씩 읽어들일 수도 있음.

웹에서 파일 읽어 오기 2 (http.rb) url = url[7..-1] if url.start_with? "http://" domain, sub = url.split("/",2) #url을 domain과 나머지로 분리 url = url[7..-1] if url.start_with? "http://" url=ARGV[0] Net::HTTP.start(domain) do |http| #http 접속 require "net/http" #헤더 파일 불러오기 http.get("/"+sub).body #그 domain 내의 특정 파일 읽어오기 .scan( /<a href="(.*?)">/ ).each do |link| #scan으로 검색 end puts link net/http가 domain에 접속하여 파일을 읽어오는 2 단계로 되어 있는 데 비해, open-uri는 이를 한 단계로 축약.