gimchi 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,97 @@
1
+ ---
2
+ "구미": "Gumi"
3
+ "영동": "Yeongdong"
4
+ "백암": "Baegam"
5
+ "옥천": "Okcheon"
6
+ "합덕": "Hapdeok"
7
+ "호법": "Hobeop"
8
+ "월곶[월곧]": "Wolgot"
9
+ "벚꽃[벋꼳]": "Beotkkot"
10
+ "한밭[한받]": "Hanbat"
11
+ "구리": "Guri"
12
+ "설악": "Seorak"
13
+ "칠곡": "Chilgok"
14
+ "임실": "Imsil"
15
+ "울릉": "Ulleung"
16
+ "대관령[대괄령]": "Daegwallyeong"
17
+ "백마[뱅마]": "Baengma"
18
+ "신문로[신문노]": "Sinmunno"
19
+ "종로[종노]": "Jongno"
20
+ "왕십리[왕심니]": "Wangsimni"
21
+ "별내[별래]": "Byeollae"
22
+ "신라[실라]": "Silla"
23
+ "학여울[항녀울]": "Hangnyeoul"
24
+ "알약[알략]": "allyak"
25
+ "해돋이[해도지]": "haedoji"
26
+ "같이[가치]": "gachi"
27
+ "맞히다[마치다]": "machida"
28
+ "좋고[조코]": "joko"
29
+ "놓다[노타]": "nota"
30
+ "잡혀[자펴]": "japyeo"
31
+ "낳지[나치]": "nachi"
32
+ "압구정": "Apgujeong"
33
+ "낙동강": "Nakdonggang"
34
+ "죽변": "Jukbyeon"
35
+ "낙성대": "Nakseongdae"
36
+ "합정": "Hapjeong"
37
+ "팔당": "Paldang"
38
+ "샛별": "saetbyeol"
39
+ "울산": "Ulsan"
40
+ "중앙": "Jung-ang"
41
+ "반구대": "Ban-gudae"
42
+ "세운": "Se-un"
43
+ "해운대": "Hae-undae"
44
+ "부산": "Busan"
45
+ "세종": "Sejong"
46
+ "한복남": "Han Boknam (Han Bok-nam)"
47
+ "홍빛나": "Hong Bitna (Hong Bit-na)"
48
+ "강남대로": "Gangnam-daero"
49
+ "세종로": "Sejong-ro"
50
+ "개나리길": "Gaenari-gil"
51
+ "충청북도": "Chungcheongbuk-do"
52
+ "제주도": "Jeju-do"
53
+ "의정부시": "Uijeongbu-si"
54
+ "양주군": "Yangju-gun"
55
+ "도봉구": "Dobong-gu"
56
+ "신창읍": "Sinchang-eup"
57
+ "삼죽면": "Samjuk-myeon"
58
+ "인왕리": "Inwang-ri"
59
+ "당산동": "Dangsan-dong"
60
+ "봉천 1동": "Bongcheon 1(il)-dong"
61
+ "종로 2가": "Jongno 2(i)-ga"
62
+ "퇴계로 3가": "Toegyero 3(sam)-ga"
63
+ "청주시": "Cheongju"
64
+ "함평군": "Hampyeong"
65
+ "순창읍": "Sunchang"
66
+ "남산": "Namsan"
67
+ "속리산": "Songnisan"
68
+ "금강": "Geumgang"
69
+ "독도": "Dokdo"
70
+ "경복궁": "Gyeongbokgung"
71
+ "무량수전": "Muryangsujeon"
72
+ "연화교": "Yeonhwagyo"
73
+ "극락전": "Geungnakjeon"
74
+ "안압지": "Anapji"
75
+ "남한산성": "Namhansanseong"
76
+ "화랑대": "Hwarangdae"
77
+ "불국사": "Bulguksa"
78
+ "현충사": "Hyeonchungsa"
79
+ "독립문": "Dongnimmun"
80
+ "오죽헌": "Ojukheon"
81
+ "촉석루": "Chokseongnu"
82
+ "종묘": "Jongmyo"
83
+ "다보탑": "Dabotap"
84
+ "집": "jib"
85
+ "짚": "jip"
86
+ "밖": "bakk"
87
+ "값": "gabs"
88
+ "붓꽃": "buskkoch"
89
+ "먹는": "meogneun"
90
+ "독립": "doglib"
91
+ "문리": "munli"
92
+ "물엿": "mul-yeos"
93
+ "굳이": "gud-i"
94
+ "좋다": "johda"
95
+ "가곡": "gagog"
96
+ "조랑말": "jolangmal"
97
+ "없었습니다.": "eobs-eoss-seubnida"
@@ -0,0 +1,135 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'helper'
4
+
5
+ class TestGimchi < Test::Unit::TestCase
6
+ def test_korean_char
7
+ ko = Gimchi::Korean.new
8
+ assert_equal true, ko.korean_char?('ㄱ') # true
9
+ assert_equal true, ko.korean_char?('ㅏ') # true
10
+ assert_equal true, ko.korean_char?('가') # true
11
+ assert_equal true, ko.korean_char?('값') # true
12
+
13
+ assert_equal false, ko.korean_char?('a') # false
14
+ assert_equal false, ko.korean_char?('1') # false
15
+ assert_raise(ArgumentError) { ko.korean_char?('두자') }
16
+ end
17
+
18
+ def test_complete_korean_char
19
+ ko = Gimchi::Korean.new
20
+
21
+ assert_equal false, ko.complete_korean_char?('ㄱ') # false
22
+ assert_equal false, ko.complete_korean_char?('ㅏ') # false
23
+ assert_equal true, ko.complete_korean_char?('가') # true
24
+ assert_equal true, ko.complete_korean_char?('값') # true
25
+
26
+ assert_equal false, ko.korean_char?('a') # false
27
+ assert_equal false, ko.korean_char?('1') # false
28
+ assert_raise(ArgumentError) { ko.korean_char?('두자') }
29
+ end
30
+
31
+ def test_dissect
32
+ ko = Gimchi::Korean.new
33
+
34
+ arr = ko.dissect '이것은 한글입니다.'
35
+ # [이, 것, 은, " ", 한, 글, 입, 니, 다, "."]
36
+
37
+ assert_equal 10, arr.length
38
+ assert_equal Gimchi::Korean::Char, arr[0].class
39
+ assert_equal Gimchi::Korean::Char, arr[1].class
40
+ assert_equal Gimchi::Korean::Char, arr[2].class
41
+
42
+ ch = arr[2]
43
+ assert_equal 'ㅇ', ch.chosung
44
+ assert_equal 'ㅡ', ch.jungsung
45
+ assert_equal 'ㄴ', ch.jongsung
46
+
47
+ ch.chosung = 'ㄱ'
48
+ ch.jongsung = 'ㅁ'
49
+ assert_equal '금', ch.to_s
50
+ assert_equal 3, ch.to_a.length
51
+
52
+ ch.jongsung = nil
53
+ assert_equal '그', ch.to_s
54
+ assert_equal 2, ch.to_a.compact.length
55
+ assert_equal true, ch.complete?
56
+ assert_equal false, ch.partial?
57
+
58
+ ch.chosung = nil
59
+ assert_equal 1, ch.to_a.compact.length
60
+ assert_equal false, ch.complete?
61
+ assert_equal true, ch.partial?
62
+ assert_equal 'ㅡ', ch.to_s
63
+
64
+ ch.jungsung = nil
65
+ assert_equal 0, ch.to_a.compact.length
66
+ assert_equal false, ch.complete?
67
+ assert_equal true, ch.partial?
68
+ assert_equal '', ch.to_s
69
+
70
+ assert_raise(ArgumentError) { ch.chosung = 'ㅡ' }
71
+ assert_raise(ArgumentError) { ch.chosung = 'ㄳ' }
72
+ assert_raise(ArgumentError) { ch.jungsung = 'ㄱ' }
73
+ assert_raise(ArgumentError) { ch.jongsung = 'ㅠ' }
74
+ end
75
+
76
+ def test_read_number
77
+ ko = Gimchi::Korean.new
78
+ assert_equal "천 구백 구십 구", ko.read_number(1999)
79
+ assert_equal "마이너스 백점일이삼", ko.read_number(- 100.123)
80
+ assert_equal "천 오백 삼십 일억 구천 백 십만 육백 칠십 팔점삼이일사",
81
+ ko.read_number("153,191,100,678.3214")
82
+
83
+ # 나이, 시간 ( -살, -시 )
84
+ assert_equal "나는 스무살", ko.read_number("나는 20살")
85
+ assert_equal "너는 열세 살", ko.read_number("너는 13 살")
86
+ assert_equal "지금은 일곱시 삼십분", ko.read_number("지금은 7시 30분")
87
+ end
88
+
89
+ def test_pronounce
90
+ require 'yaml'
91
+ require 'ansi'
92
+
93
+ ko = Gimchi::Korean.new
94
+ cnt = 0
95
+ s = 0
96
+ test_set = YAML.load File.read(File.dirname(__FILE__) + '/pronunciation.yml')
97
+ test_set.each do | k, v |
98
+ cnt += 1
99
+ k = k.gsub(/[-]/, '')
100
+ t, tfs = ko.pronounce(k, :pronounce_each_char => false, :slur => k.include?(' '), :debug => true)
101
+ if v.include? t.gsub(/\s/, '')
102
+ r = ANSI::Code::BLUE + ANSI::Code::BOLD + v.join(' / ') + ANSI::Code::RESET if v.length > 1
103
+ s += 1
104
+ else
105
+ r = ANSI::Code::RED + ANSI::Code::BOLD + v.join(' / ') + ANSI::Code::RESET
106
+ end
107
+ puts "#{k} => #{t} (#{ko.romanize t}) [#{tfs.join(' > ')}] #{r}"
108
+ end
109
+ puts "#{s} / #{cnt}"
110
+ # FIXME
111
+ assert s >= 410
112
+ end
113
+
114
+ def test_romanize
115
+ ko = Gimchi::Korean.new
116
+
117
+ cnt = 0
118
+ s = 0
119
+ test_set = YAML.load File.read(File.dirname(__FILE__) + '/romanization.yml')
120
+ test_set.each do | k, v |
121
+ cnt += 1
122
+ rom = ko.romanize k.sub(/\[.*/, '')
123
+ if rom.downcase.gsub(/[\s-]/, '') == v.downcase.gsub(/\(.*\)/, '').gsub(/[\s-]/, '')
124
+ r = ANSI::Code::BLUE + ANSI::Code::BOLD + rom + ANSI::Code::RESET
125
+ s += 1
126
+ else
127
+ r = ANSI::Code::RED + ANSI::Code::BOLD + rom + ANSI::Code::RESET
128
+ end
129
+ puts "#{k} => #{r} [#{v}]"
130
+ end
131
+ puts "#{s} / #{cnt}"
132
+ # FIXME
133
+ assert s >= 55
134
+ end
135
+ end
metadata ADDED
@@ -0,0 +1,111 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gimchi
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Junegunn Choi
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-04-05 00:00:00.000000000 +09:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: bundler
17
+ requirement: &2156236300 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ~>
21
+ - !ruby/object:Gem::Version
22
+ version: 1.0.0
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: *2156236300
26
+ - !ruby/object:Gem::Dependency
27
+ name: jeweler
28
+ requirement: &2156235820 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 1.5.2
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: *2156235820
37
+ - !ruby/object:Gem::Dependency
38
+ name: rcov
39
+ requirement: &2156235340 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ type: :development
46
+ prerelease: false
47
+ version_requirements: *2156235340
48
+ - !ruby/object:Gem::Dependency
49
+ name: ansi
50
+ requirement: &2156234860 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: 1.2.2
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: *2156234860
59
+ description: Gimchi knows how to pronounce Korean string and how to write them in
60
+ roman alphabet.
61
+ email: junegunn.c@gmail.com
62
+ executables: []
63
+ extensions: []
64
+ extra_rdoc_files:
65
+ - LICENSE.txt
66
+ - README.ko.rdoc
67
+ - README.rdoc
68
+ files:
69
+ - config/default.yml
70
+ - lib/gimchi.rb
71
+ - lib/gimchi/char.rb
72
+ - lib/gimchi/korean.rb
73
+ - lib/gimchi/pronouncer.rb
74
+ - LICENSE.txt
75
+ - README.ko.rdoc
76
+ - README.rdoc
77
+ - test/helper.rb
78
+ - test/pronunciation.yml
79
+ - test/romanization.yml
80
+ - test/test_gimchi.rb
81
+ has_rdoc: true
82
+ homepage: http://github.com/junegunn/gimchi
83
+ licenses:
84
+ - MIT
85
+ post_install_message:
86
+ rdoc_options: []
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ! '>='
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ requirements: []
102
+ rubyforge_project:
103
+ rubygems_version: 1.6.2
104
+ signing_key:
105
+ specification_version: 3
106
+ summary: Gimchi reads Korean.
107
+ test_files:
108
+ - test/helper.rb
109
+ - test/pronunciation.yml
110
+ - test/romanization.yml
111
+ - test/test_gimchi.rb