Ruby 프로그래밍 한글 로마자화

Similar documents
Ruby 프로그래밍 5 한글 자소 처리

Microsoft PowerPoint - kandroid_for_HI-CNU.ppt

방송통신표준 KCS.KO 제정일 : 2011 년 6 월 27 일 전화기한글문자자판배열 (Arrangement of Korean Character(Hangeul) on Telephones) 방송통신위원회

국어1권표지

컴퓨터에서텍스트를표현하는방식및문자코드 1. bit 와 byte 컴퓨터속에서모든데이터와명령은 2진수로표상된다. 컴퓨터의저장장치 ( 하드디스크, 플로피디스크, RAM) 에기록 ( 저장 ) 될수있는것은 2진수뿐이며, CPU도 2진수의연산만을사용한다. 0 또는 1( 즉 on


The Korean Alphabet:

Vowel ㅏ [a] ㅜ [u] ㅑ [ja] ㅠ [ju] ㅓ [ ] ㅡ [i] ㅕ [j ] ㅣ [i] ㅗ [o] ㅐ [æ] ㅛ [jo] ㅒ [jæ] ㅔ [e] ㅞ [we] ㅖ [je] ㅟ [wi] ㅘ [wa] ㅢ [ij] ㅝ [w ] ㅚ [we] ㅙ [wæ] Begin

zb 8) 자음을 zb 9) zb 10) 다음 zb 11) zb 12) zb 13) zb 14) ( 2013 년 1 학기기말고사대비 4-2. 우리말의음운체계 (01)_ 비상 ( 김 )1 2 혀의높낮이 행복했던나 3 혀의최고점의위치 4 발음할때장애의유무 5 발음할때입술의

2 음절끝소리규칙 1. 음절끝소리규칙 ( 외우기 - 가느다란물방울 ) - 음절의끝소리 ( 받침 ) 가발음될때 ( ㄱ ),( ㄴ ),( ㄷ ),( ㄹ ),( ㅁ ),( ㅂ ),( ㅇ ) 7자음만으로발음되는것. 그이외의받침은모두이 7 자음중하나로바뀌어발음된다. 예 ) 영어

Microsoft Word - KSR2012A179.doc

기철 : 혜영 : 기철 : 혜영 : ㄴ ㅁ ㅇ ㄴ ㅁ ㅇ ㅇ ㄴ ㅁ ㅇ

1수준

S U M M A C U M L A U D E J U N I O R 중학국어문법연습을소개합니다. 2 문법을벌써공부해야하는가? 국어의문법은변하지않고, 정해져있습니다. 따라서중학교시기에배우는문법개념들이고등학교시기에배우는개념들과이어지고, 이는수능

피동 ( 被動 (1 피동과능동 - 피동 : 남의행동을입어서당하는동작을나타냄. 도둑이경찰에게잡히었다. - 능동 : 제힘으로행하는동작을나타냄. 경찰이도둑을잡았다. (2 피동문되기 1 파생적피동 (-이-, -히-, -리-, -기- - 타동사어근 + 접사 ( 능동문주어 부사어

<3828BFACB1B829BEE7BFD5BCBA2D D E687770>

<C3BBB0A2BEF0BEEEC0E7C8B0C7D0C8B85F30332E535FC0DAC0BDC1F6B0A2B0CBBBE728B1E8C1F8BCF7292E687770>

TutorialOnHowToUseTheKoreanRomanizationAndWordDivision(BasicGuide)_

자음과모음 1. 자음체계 조음방법 조음위치 입술소리 ( 순음 ) 잇몸소리 ( 치조음 ) 센입천장소리 ( 경구개음 ) 여린입천장소리 ( 연구개음 ) 목청소리 ( 후음 ) 예사소리 파열음 된소리 안울림소리 울림소리 파찰음 마찰음 비음유음 거센소리예사소리된소리거센소리예사소리

ETRI-0739.hwp


슬라이드 1

<694D424320B5B6C7D0C7D0C0A7C1A62031B4DCB0E820B1B9BEEE E687770>

Ruby 프로그래밍 3

State of New South Wales, Department of Education and Communities, /49

2) 음성 고기 는 ㄱ, ㅗ, ㄱ, ㅣ 의네음운이모여서이루어진단어이다. 그런데두 ㄱ 이발음되는모습을살펴보면, 혀와입천장을이용하여공기의흐름을막았다가터뜨려낸다는공통점이있지만, 첫 ㄱ 과는달리둘째번 ㄱ 은목청을떨어울려낸다는차이점이있다. 이처럼, 구체적인소리하나하나를가리켜음성

PowerPoint Presentation

#1. 문법공부를위한필수! 기본용어 음운체계 1. 모음 : 음절 ( 소리마디 ) 을이룰수있는독립적인소리 하늘 땅 사람 [ 天地人 ] 삼재로기본 3 글자를만들고, 가획하여다른글자를만듦 1 단모음 : 소리내는중에입술모양이나혀의위치가고정되어달라지지않는모음 혀의최고점의위치앞

<B4DCB1E2B1B3C0E72031B1C75FBED5BAD9C0CC2E696E6464>

제1장 권규호의 공무원 국어 제2장 제3장 제4장 음운론 1 음운과 음성 1. 음운의 개념과 종류 (1) 음성과 음운 ① 음성 : 의사소통을 위해 사람의 발음기관을 통하여 나오는 물리적 말소리 음성이란 사람의 입에서 나오는 소리를 말하는 것이다. 그렇다고 휘파람 소리

Booklet Design: Maia Kennedy Second Edition and Recorded Program 2016 Simon & Schuster, Inc. Reading Booklet 2016 Simon & Schuster, Inc. Pimsleur is a

<4D F736F F F696E74202D20C0C7BFB9B0FAC1A4BAB8BDC3BDBAC5DB>

70 diklasifikan berdasarkan perubahan letak dan perubahan cara pelafalan kemudian dianalisis penyebabnya. Berikut adalah variasi cara ucap konsonan ya

Module 1 PAGE Lesson 1 Sound & Script 1 Lesson 2 Greeting & Introduction 75 Lesson 3 Describe Your Surroundings 145 Lesson 4 The Family 212 Lesson 5 P

국어혁명 박수미쌤 2 겹문장 : 두개이상의홑문장이합쳐져서이루어진문장 주어와서술어의관계가두번이상나타남 예 ) 나는학교에갔고, 동생은도서관에갔다. 예 ) 나는동생이건강하기를바란다. 2. 문장의종류 1 문장의종류 2 확장방식 < 이어진문장 > 뜻 : 홑문장이여러개이어진문장.

17장 클래스와 메소드

< D333731C3BBB4C9C0E7C8B B1C734C8A3292D3131BFF936C0CF2E687770>

2 / 27 목차 A MQ-1000 키패드 (RiVO k) B 키패드 기본 설명 및 버튼 이름 C iphone 설정 (VoiceOver, 언어, 키보드) D Bluetooth 페어링 E Bluetooth 연결 F iphone 설정 (빠른 탐색 상태) G 입력언어 동기화

<Hit The Sheep> - 양을 치자! 교육청 문법 선별 4탄 (고퀄해설)

<Hit The Sheep> 양을 치자! 교육청 문법 고퀄해설 7탄

**V PDF..

Transkriptionstabelle für das Han'gŭl-Alphabet nach McCune-Reischauer:

1446년의 훈민정음은 문자 디자인의 출발점이었다. 처음부터 한글은 활 자로 태어났다. 타이포그래피(typography)란 활자[type]로 글을 쓰는 행 위다[graphy]. 붓으로 고급하게 글을 쓴다는 것과 활자로 글쓰기는 그 의미가 다르다. 구텐베르크나 세종은 고

NEGRO - HANGUGO 01 - O Alfabeto Coreano.pub

<B4BABFA55FBFDCB1B9BEEEB7CEBCADC0C7C7D1B1B9BEEEB9DFC0BDB1B3C0B0B7D05FBFE4BEE0C6F7C7D42E687770>

REP - VULGAR - 001, MARCH 비속어를표현하면단순한필터링기능으로는제재가불가능하다. 이러한비속어는사용하기불편하 다는단점이있으나최근에는필터링되지않는변형된형태의욕을매크로에저장해서온라인분쟁시 사용하는경우도있다. 그림 1. 모인기게임의채팅장면. 인터

Microsoft Word - Survival Korean

<B4D9B9AEC8AD5FB1B3C0E75FBFCFBCBABABB28C1BEC7D5292E687770>

차례 01주차 _ 어문규정이뭐예요? 3 1. 어문규정이뭐예요? 대어문규정이뭐예요? 5 3. 어문규정, 왜필요해요? 7 4. 언제만들었어요? 10 02주차 _Nguyên 응우옌? 응웬? 외래어인명표기법 외국지명 외래어표기원칙 1

<Hit The Sheep> 양을 치자! 교육청 문법 고퀄해설!!

금오공대 컴퓨터공학전공 강의자료


Microsoft Word - transliteration.docx

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

PowerPoint Presentation

<C7D1B1B9BEEEB1B3C0E72DBBE7C7D2B8B E687770>

일러두기 1. 이책은 1964년 2월 5일문교부장관의인정을받은, 남상천이만든남천식 ( 南天式 ) 속기법에대한기본편을간추려정리한것이다. 2. 이속기법은속기학의체계를확립하였으며, 쉽고재미있게배울수있도록만들었다. 3. 기본편에대한많은연습문제와속기연습지를남천속기홈페이지 (ww

<B1B9BEEEB9AEB9FDC0C720C0CCC7D8BFCD20BDC7C1A62028C3DFB0A1292E687770>

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint 세션.ppt

PowerPoint Presentation

Microsoft Word - Korean_solt1_module1_lesson1.doc

<BBF5B1B9BEEEBBFDC8B05F32352D315FBABBB9AE5FC3CAC6C731BCE25F6F6B5F E687770>

DBPIA-NURIMEDIA

Microsoft PowerPoint - C++ 5 .pptx

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

Rabbi ( 김기덕) 학력 ) 한양대학교사범대학졸업 - 국어교육, 교육학전공 조교 1 재림 약력 ) 오르비클래스국어과강사 대치, 교대오르비학원출강 미금, 영통명인학원출강 저서 ) 국어영역마스터키 ( 지공신공) 훈련도감비문학, 문학 ( 쏠티북스) 학력 ) 서울대학교약력

설계란 무엇인가?

<31372D31312D303928C7FCBCBAB9CE2DBCDBC1F6C8A E687770>

슬라이드 1

파란문법 v3.7 ( 이론편 ) 破亂文法 破깰파 亂어지러울란 박지성지음 현대청운고등학교

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Microsoft PowerPoint - chap06-2pointer.ppt

광릉한샘학원 3. 음절 ( 音節 ) 한번에낼수있는소리마디를나타내는문법단위로, 음절은의미와전혀관계가없는음성학적문법단위일뿐이다. 음절이만들어지기위해서는반드시모음이있어야한다. 모든말은음절단위로마디를이루어서발음된다. 국어의음절구조 1 모음단독예 ) 아 2 자음 + 모음예 )

정답과해설 본문 02 부록 25 중등문법

ISSN (Online) Commun Sci Disord 2016;21(4): Original Article Consonant Frequency and Phonological

문학석사학위논문 고유어와한자어의음절구조비교연구 2 음절어를중심으로 년 월 서울대학교대학원 국어국문학과국어학전공 Maya Atayeva( 마야아타예바 )

<BEF0BEEEC3BBB0A25FC6EDC1FDBABB28C3D6C1BE5F E687770>

adfasdfasfdasfasfadf

Week5

JAVA PROGRAMMING 실습 08.다형성

슬라이드 1

Microsoft PowerPoint - Chapter 6.ppt

PowerPoint 프레젠테이션

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

붓다 와 붇다 ' 붓다 ' 는 " 살가죽이나어떤기관이부풀어오르다." 라는뜻을나타내는말로, " 얼굴이붓다 / 병으로간이붓다 / 울어서눈이붓다 / 다리가퉁퉁붓다 / 벌에쏘인자리가붓다 / 편도선이부어서말하기가어렵다." 와같이쓰이는말이고, ' 붇다 ' 는 " 분량이나수효가많아

歯ki 조준모.hwp

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

<BBF5C5CDB9CEC0BB20C0A7C7D120BEF0BEEE28B9DFC0BD5FBEEEC8D62920B1B3C0E72E687770>

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

ThisJava ..

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

C 언어 프로그래밊 과제 풀이

PowerPoint Presentation

1.0 Word Analysis, Fluency, and Systematic Vocabulary Development Standard Examples 1.4 단어 첫음 중간음 끝음 ( 받침 ) 가 ㄱ ㅏ - 꽃 ㄲ ㅗ ㅊ 연 ㅇ ㅕ ㄴ 색 ㅅ ㅐ ㄱ 말 ㅁ ㅏ ㄹ 1.

<37B1C733C8A3202E687770>

PowerPoint 프레젠테이션

The Mongolic Vowel Shift revisited

PowerPoint Presentation

Transcription:

Ruby 프로그래밍한글로마자화 한국어정보의전산처리 2017. 5. 17.

jaso_call_me.rb 의함수들을메소드로바꾸기 한글인지아닌지판정, 초성, 중성, 종성알아내기는문자열에대해서만수행하는일이므로, 이들함수를 free function 보다는 String class 내의메소드로정의하는것이합리적임. class String def hangeul? (0xac00..0xd7a3).include? self.ord def onset # 반환값은 0~18, 0: ㄱ. 1: ㄲ,..., 18: ㅎ (self.ord - 0xac00) / 588 def nucleus # 반환값은 0~20, 0: ㅏ, 1: ㅐ,..., 20: ㅣ ( (self.ord - 0xac00) % 588 ) / 28 def coda # 반환값은 0~27, 0: 받침없음, 1: ㄱ, 2: ㄲ,... 27: ㅎ (self.ord - 0xac00) % 28

로마자화프로그램의구조 입력 : 한글문자열 ( 한글아닌문자가중간에들어있어도무방 ) 출력 : 한글을로마자로변환하여출력. 기타문자는그대로출력. String 클래스에 romanize 메소드추가 Syllable 클래스추가 : 초성, 중성, 종성 3 개의멤버변수를포함 음운규칙의적용방식 방법 1: 한글 -> 로마자화 -> 음운규칙 방법 2: 한글 -> 음운규칙 -> 로마자화 : 방법 2 를택함. 음운규칙적용을위해 String 을우선 Syllable 들의 Array 로변환 phon 함수 : Syllable 들의 Array 를입력으로받아, 음운규칙적용한뒤, Syllable 들의 Array 를반환 phon 함수내부에서각종음운규칙함수를호출하여사용 romanize 메소드에서 phon 함수를호출하여음운규칙이적용된 Syllable 들의 Array 를받아서 각 syllable 의초성, 중성, 종성을각각로마자로변환 이렇게로마자로변환된결과를문자열로통합 : join 메소드이용

Syllable class 정의 class Syllable # 음절클래스. 초성, 중성, 종성 3 개의멤버로이루어져있음. attr_accessor :onset, :nucleus, :coda # 이 class 의 3 개의멤버를 class 외부에서도참조할수있도록개방. # 음운규칙적용시필요함. def initialize(onset=nil, nucleus=nil, coda=nil) # 이 class 에속하는 object 를만들때 (new) 멤버들의값을초기화 # 값을주지않으면 nil 로초기화 @onset = onset @nucleus = nucleus @coda = coda

String class 에 to_syls 메소드추가 def to_syls #Syllable 들의 Array 로변환. 나중에음운규칙의적용을위해 ) syls = [] # 결과를저장할 Syllable 들의 Array self.each_char do c # 입력문자열의각문자 c 에대해 c = [@@hanja[c.ord]].pack 'U' if @@hanja.has_key? c.ord #c 가한자이면이것을대응하는한글로바꿔줌 syls << (c.hangeul?? Syllable.new(c.onset, c.nucleus, c.coda) : c) #c 가한글이면한글음절의초성, 중성, 종성값을구하여이셋으로 #Syllable instance 를만들어 syls 에추가 #c 가한글이아니면그냥 c 자체를 syls 에추가 #syls: [ 제 1 음절 [ 초, 중, 종 ], 제 2 음절 [ 초, 중, 종 ],..., 끝음절 [ 초, 중, 종 ]] syls #syls Array 반환

String class 에 romanize 메소드추가 def romanize #romanize 메소드추가 #onsets=[' ㄱ ',' ㄲ ',' ㄴ ',' ㄷ ',' ㄸ ',' ㄹ ',' ㅁ ',' ㅂ ',' ㅃ ',' ㅅ ',' ㅆ ',' ㅇ ',' ㅈ ',' ㅉ ',' ㅊ ',' ㅋ ',' ㅌ ',' ㅍ ',' ㅎ '] onset2alpha=['g','kk','n','d','tt','r','m','b','pp','s','ss','','j','jj','ch','k','t','p','h','l'] # 맨끝에ㄹ l 추가. 보통의초성ㄹ =r, ㄹ뒤의초성ㄹ =l #nuclei=[' ㅏ ',' ㅐ ',' ㅑ ',' ㅒ ',' ㅓ ',' ㅔ ',' ㅕ ',' ㅖ ',' ㅗ ',' ㅘ ',' ㅙ ',' ㅚ ',' ㅛ ',' ㅜ ',' ㅝ ',' ㅞ ',' ㅟ ',' ㅠ ',' ㅡ ',' ㅢ ',' ㅣ '] nucleus2alpha = ['a','ae','ya','yae','eo','e','yeo','ye','o','wa','wae','oe','yo','u','wo','we','wi','yu','eu','ui','i'] #codas = [' 채움 ',' ㄱ ',' ㄲ ',' ㄳ ',' ㄴ ',' ㄵ ',' ㄶ ',' ㄷ ',' ㄹ ',' ㄺ ',' ㄻ ',' ㄼ ',' ㄽ ',' ㄾ ',' ㄿ ',' ㅀ ',' ㅁ ',' ㅂ ',' ㅄ ',' ㅅ ',' ㅆ ',' ㅇ ',' ㅈ ',' ㅊ ',' ㅋ ',' ㅌ ',' ㅍ ',' ㅎ '] coda2alpha = # ㄱ, ㄷ, ㅂ초성은 g, d, b 인데비해종성은 k, t, p ['','k','k','k','n','n','n','t','l','k','m','p','l','l','p','l','m','p','p','t','t','ng','t','t','k','t','p','t'] self.to_syls.map{ syl syl.class()==syllable? onset2alpha[syl.onset] + nucleus2alpha[syl.nucleus] + coda2alpha[syl.coda] : syl }.join("") #Syllable 인것은위의세 Array 에서대응하는로마자로바꿈 #Syllable 이아닌것은원래것그대로

음운규칙적용 국어의로마자표기법에서경음화는반영하지않음. ㅎ축약은명사에서는반영하지않고, 용언에서만반영. 한국어의대개의음운규칙은앞음절의종성과뒤음절의초성사이에서일어남. 다음의순서로반영함. 재음절화 ( 연음법칙 ): 밥이 바비, 숲을 수플 초성ㄹ관련규칙 : 역행유음화, 초성ㄹ제약 순행유음화 비음화 : { ㅂ, ㄷ, ㄱ } { ㅁ, ㄴ, ㅇ } / 비음 ㅎ축약 : { ㅂ, ㄷ, ㅈ, ㄱ } ~ ㅎ { ㅍ, ㅌ, ㅊ, ㅋ } 구개음화일부반영 : 닫히다 / 다치다 /, 묻히다 / 무치다 / 음절말중화 : romanize 메소드에서반영 String class 내의함수로 phon 을만들고, 여러음운규칙에해당하는함수를 phon 이호출하도록함. 이들함수는클래스내부에서만사용. romanize 메소드에서 phon 함수호출

def resyllabification(coda) # 재음절화 coda2resyl = [ # 재음절화가일어날때, 앞음절종성이무엇인가에따라앞음절종성및뒤음절초성이무엇으로바뀔지를정해놓은 Array [0,11], #0 채움 : 채움, ㅇ [0,0], #1 ㄱ : 채움, ㄱ [0,1], #2 ㄲ : 채움, ㄲ [1,9], #3 ㄳ : ㄱ, ㅅ [0,2], #4 ㄴ : 채움, ㄴ [4,12], #5 ㄵ : ㄴ, ㅈ [0,2], #6 ㄶ : 채움, ㄴ않아 -> 아나 # 실제발음이 ' 안하 ' 가아님 ) [0,3], #7 ㄷ : 채움, ㄷ [0,5], #8 ㄹ : 채움, ㄹ [8,0], #9 ㄺ : ㄹ, ㄱ [8,6], #10 ㄻ : ㄹ, ㅁ [8,7], #11 ㄼ, ㄹ, ㅂ [8,9], #12 ㄽ : ㄹ, ㅅ [8,16], #13 ㄾ : ㄹ, ㅌ [8,17], #14 ㄿ : ㄹ, ㅍ [0,5], #15 ㅀ : 채움, ㄹ앓아 아라 # 실제발음이 ' 알하 ' 가아님 [0,6], #16 ㅁ : 채움, ㅁ [0,7], #17 ㅂ : 채움, ㅂ [17,9], #18 ㅄ : ㅂ, ㅅ [0,9], #19 ㅅ : 채움, ㅅ [0,10], #20 ㅆ : 채움, ㅆ [21,11], #21 ㅇ : ㅇ, ㅇ [0,12], #22 ㅈ : 채움, ㅈ [0,14], #23 ㅊ : 채움, ㅊ [0,15], #24 ㅋ : 채움, ㅋ [0,16], #25 ㅌ : 채움, ㅌ [0,17], #26 ㅍ : 채움, ㅍ [0,11], #27 ㅎ : 채움, ㅇ좋아 조아 # 실제발음이 ' 조하 ' 가아님 ] [coda2resyl[coda][0], coda2resyl[coda][1]] # 앞음절종성, 뒤음절초성

비음화메소드 def nasalization(coda) # 앞음절종성과뒤음절초성ㄴ, ㅁ이만났을때일어나는비음화를다룸 # 앞음절종성의변화만다룸. case coda # 앞음절종성이 when 1 ; 21 # ㄱ이면ㅇ으로바꿈. 예 : 독립 독닙 동닙 when 7,27 ; 4 # ㄷ, ㅎ이면ㄴ으로바꿈. # 예 : 묻니 문니, 좋니 졷니 존니 when 17 ; 16 # ㅂ이면ㅁ으로바꿈. 예 : 법라 법나 범나 else ; coda # 기타의경우 coda를그대로둠

ㅎ축약 : 용언어간말자음이ㅎ인경우 def aspiration_verb(onset) # 앞음절종성ㅎ과뒤음절초성의축약을다룸 # 뒤음절초성의변화만다룸. case onset # 뒤음절초성이 when 0 ; 15 # ㄱ이면ㅋ으로바꿈 # 예 : 않고 않코, 앓고 알코, 좋고 좋코 when 3 ; 16 # ㄷ이면ㅌ으로바꿈. 예 : 좋더라 좋터라 when 7 ; 17 # ㅂ이면ㅍ으로바꿈. when 12 ; 14 # ㅈ이면ㅊ으로바꿈. 예 : 좋지 조치 else ; onset # 기타의경우 onset 을그대로둠

ㅎ축약 : 접미사 '- 히 -' 의경우 def aspiration_hi(coda, onset) # 앞음절종성, 뒤음절초성둘다고려해야함 # 앞음절종성과뒤음절초성ㅎ이만났을때의축약을다룸 # 뒤음절초성의변화만다룸. case coda when 1 ; 15 # 앞음절종성이ㄱ이면뒤음절초성을ㅋ으로바꿈 # 예 : 먹히고 머키고 when 7,22 ; 14 # 앞음절종성이ㄷ, ㅈ이면뒤음절초성을ㅊ으로바꿈 # 예 : 묻혀 무텨 무쳐 ( 구개음화 ), 젖힐 저칠 when 17 ; 17 # 앞음절종성이ㅂ이면뒤음절초성을ㅍ으로바꿈 # 예 : 잡혀 자펴 else ; onset # 기타의경우 onset 을그대로둠

def phon(syls) #Syllable 들의 Array 를 input 으로받아서, 음운규칙이적용된결과를 Syllable 들의 Array 로반환 syls.each_cons(2) do ap,dui # 각각의인접한두음절에대해. ap== 앞음절, dui== 뒤음절 next if ap.class()!= Syllable or dui.class()!= Syllable # 둘중하나라도한글음절이아니면그냥통과 case dui.onset # 뒤음절초성이 when 11 # ㅇ이면 ap.coda, dui.onset = resyllabification(ap.coda) # 재음절화 ( 연음법칙 ) when 5 # ㄹ이면초성ㄹ관련음운규칙을적용 if ap.coda == 4 # 앞음절종성이ㄴ이면 ap.coda = 8 # ㄹ로바꿈 ( 역행유음화 ) 예 : 신라 -> 실라 elsif ap.coda!= 0 and ap.coda!= 8 # 앞음절종성이채움, ㄹ이아니면 dui.onset = 2 # 뒤음절초성을ㄴ으로바꿈 ( 초성ㄹ의분포제약 ) 예 : 종로 -> 종노, 독립 -> 독닙 ap.coda = nasalization(ap.coda) dui.onset = 19 if ap.coda == 8 # 종성ㄹ뒤의초성ㄹ은 'l' 로바꿈. when 2 # ㄴ이면 if ap.coda == 8 # 앞음절종성이ㄹ이면순행유음화적용 dui.onset = 19 # 뒤음절초성을ㄹ [l] 로바꿈. 예 : 별내 -> 별래 else ap.coda = nasalization(ap.coda) # 비음화 when 6 # ㅁ이면비음화적용 ap.coda = nasalization(ap.coda)

when 18 # ㅎ이면 if ((dui.nucleus==6 and (dui.coda==0 or dui.coda==20) ) or (dui.nucleus==20 and [0,4,8,16].include? dui.coda)) and [1,7,17,22].include? ap.coda #(( 중성ㅕ and ( 종성무, ㅆ ) ) or ( 중성ㅣ and ( 종성무, ㄴ, ㄹ, ㅁ ) )) and 앞음절종성이ㄱ, ㄷ, ㅂ, ㅈ # 즉, 종성ㄱ, ㄷ, ㅂ, ㅈ뒤에 ' 혀, 혔, 히, 힌, 힐, 힘 ' 이오는경우 dui.onset = aspiration_hi(ap.coda, dui.onset) ap.coda = 0 # 앞음절종성을없앰. 먹힌 -> 먹킨 -> 머킨 # 평장애음과ㅎ의축약 : 피사동접사 '- 히 -' 의경우에만반영함 # 기타경우는반영안함. 예 : 각하 gakha, 법학 beophak else # 뒤음절의초성이ㅇ, ㄹ, ㄴ, ㅁ, ㅎ이아닌경우. 여기서는앞음절종성ㅎ과뒤음절초성의축약만다룸. case ap.coda # 앞음절종성이 when 6, 15 # ㄶ, ㅀ이면 ( 예 : 않, 앓 ) ㅎ과평장애음의축약 dui.onset = aspiration_verb(dui.onset) # 앞음절종성은그대로놔둬도됨. ㄶ은 n 으로, ㅀ은 l 로변환될것이기때문 when 27 # ㅎ이면 ( 예 : 좋 ) ㅎ과평장애음의축약 dui.onset = aspiration_verb(dui.onset) ap.coda = 0 # 앞음절종성을없앰. 좋고 -> 좋코 -> 조코 #case dui.onset 의끝 #syls.each_cons(2) do ap,dui 의끝 syls # 음운규칙적용결과를 Syllable 들의 Array 로반환 #phon 함수의끝

romanize 메소드수정 : 음운규칙반영 romanize 메소드의마지막부분에서 phon 함수호출추가 def romanize phon(self.to_syls).map{ syl syl.class()==syllable? onset2alpha[syl.onset] + nucleus2alpha[syl.nucleus] + coda2alpha[syl.coda] : syl }.join("")

자습문제 : 예일식로마자표기법 한국정부에서고시한로마자표기법과별도로 한국어 / 한글의로마자표기법에는 매퀸 - 라이샤워式표기법과 예일 (Yale) 式표기법이있음. https://en.wikipedia.org/wiki/yale_romanization_of_korean 언어학계에서는예일식표기법이주로쓰임. 한글표기를예일식로마자표기법으로변환하는 ruby 스크립트를작성해보시오.

한자의중국음과한국음비교통계 입력 : 약 4000 자의한자에대해한국음과중국음을대비한자료 음절별, 초성별, 중성별, 초 중성별, 중 종설별 출력 : 한국음을기준으로이에대응하는중국음의빈도, 예시글자들

dic = Hash.new # 결과를저장할 Hash 를만듦. 한국음 =>( 중국음 => 한자 ) File.open(ARGV[0],"r:UTF-8").each do line # 입력파일의각라인에대해 comb, kor, chi = line.chomp.split("\t") # 탭으로분리 한자, 한국음, 중국음 dic[kor] = Hash.new #dic[kor] 가 nil 이면빈 Hash 를만듦 dic[kor][chi] = Array.new #dic[kor][chi] 가 nil 이면빈 Array 를만듦 dic[kor][chi] << comb #dic[kor[chi] 에한자추가 File.open(ARGV[1], "w:utf-8") do of # 출력파일을엶 dic.sort.each do k, c_combs #dic 을소트 ( 한국음가나다순 ). k= 한국음 of << k << "\t" # 한국음출력. c_combs == Hash ( 중국음 => 한자목록 ) c_combs.sort{ x,y y[1].length<=>x[1].length }.each do c, combs # 한자목록의길이 ( 한자수 ) 로소트. c= 중국음, combs= 한자목록 of << c << "\t" << combs.length << "\t" << combs.join("/") << "\n" # 중국음, 탭, 한자수, 탭, 한자 / 한자 / 한자 /, 줄바꿈