1 | # Hangul.js
|
2 |
|
3 | Hangul.js는 한글로 이루어진 문장의 자음과 모음을 분리하는 자바스크립트 라이브러리입니다. 이 라이브러리를 이용하여 한글검색, 초성검색 등을 할 수 있습니다.
|
4 |
|
5 | ## 설치
|
6 |
|
7 | 웹 페이지에서 사용하려면 hangul.js 파일을 `<script>`태그를 이용하여 삽입합니다.
|
8 | ```html
|
9 | <script src="hangul.js" type="text/javascript"></script>
|
10 | ```
|
11 | node.js와 함께 사용하려면 npm을 이용하여 설치합니다.
|
12 | ```bash
|
13 | npm install hangul-js
|
14 | ```
|
15 |
|
16 | ## 사용방법
|
17 |
|
18 | 웹 페이지에서는 Hangul이라는 객체를 통해 접근할 수 있습니다.
|
19 | ```js
|
20 | Hangul // window.Hangul
|
21 | ```
|
22 | node.js에서는 `require` 키워드를 통해 불러올 수 있습니다.
|
23 | ```js
|
24 | var Hangul = require('hangul-js');
|
25 | ```
|
26 |
|
27 | ### Hangul.disassemble
|
28 | `Hangul.disassemble(string)`은 문자열을 인자로 받아 문자열에 있는 한글을 자음/모음으로 분리하여 문자들의 배열로 돌려줍니다. 이 때 한글이 아닌 문자는 그대로 반환됩니다.
|
29 |
|
30 | ```js
|
31 | Hangul.disassemble('가나다'); // ['ㄱ','ㅏ','ㄴ','ㅏ','ㄷ','ㅏ']
|
32 |
|
33 | Hangul.disassemble('ab가c'); // ['a','b','ㄱ','ㅏ','c']
|
34 |
|
35 | Hangul.disassemble('ab@!23X.'); // ['a','b','@','!','2','3','X','.']
|
36 | ```
|
37 |
|
38 | 같은 홑낱자로 이루어진 겹낱자는 분리되지 않습니다.
|
39 |
|
40 | ```js
|
41 | Hangul.disassemble('ㄲ'); // ['ㄲ']
|
42 | ```
|
43 |
|
44 | 다른 홑낱자로 이루어진 겹낱자는 분리됩니다.
|
45 |
|
46 | ```js
|
47 | Hangul.disassemble('ㄳ'); // ['ㄱ','ㅅ']
|
48 |
|
49 | Hangul.disassemble('ㅚ'); // ['ㅗ','ㅣ']
|
50 | ```
|
51 |
|
52 | 두벌식 키보드로 주어진 문자열을 입력할 때 누르는 키들의 배열이라고 생각하면 쉽습니다.
|
53 |
|
54 | ### Hangul.assemble
|
55 |
|
56 | `Hangul.assemble(array)`는 한글 자음/모음들의 배열을 인자로 받아 이를 조합한 문자열을 돌려줍니다. 이 때 한글이 아닌 문자는 그대로 반환됩니다.
|
57 |
|
58 | ```js
|
59 | Hangul.assemble(['ㄱ','ㅏ','ㄴ','ㅏ','ㄷ','ㅏ']); // '가나다'
|
60 |
|
61 | Hangul.assemble(['a','b','ㄱ','ㅏ','c']); // 'ab가c'
|
62 |
|
63 | Hangul.assemble(['a','b','@','!','2','3','X','.']); // 'ab@123X.'
|
64 | ```
|
65 |
|
66 | 이 경우에도 두벌식 키보드에서 주어진 키들을 누를 때 만들어지는 문자열을 돌려준다고 생각하면 쉽습니다.
|
67 |
|
68 | ```js
|
69 | Hangul.assemble(['ㅗ','ㅐ']); // 'ㅙ'
|
70 |
|
71 | Hangul.assemble(['ㄹ','ㅂ','ㅅ']); // 'ㄼㅅ'
|
72 | ```
|
73 |
|
74 | `Hangul.disassemble` 함수와 역함수 관계가 아닙니다.
|
75 |
|
76 | ```js
|
77 | Hangul.assemble(Hangul.disassemble('옽ㅏ')); // '오타' ('옽ㅏ' 가 아님)
|
78 | ```
|
79 |
|
80 | ### Hangul.search
|
81 |
|
82 | `Hangul.search(string a, string b)`는 a문자열이 b문자열을 포함하는지 검사합니다. 이때 'a문자열이 b문자열을 포함한다'는 '두벌식 키보드 기준으로 a문자열을 입력할 때 누르는 키들의 배열이 b문자열을 입력할 때 누르는 키들의 배열을 포함한다'로 정의합니다. 반환값이 0보다 크거나 같다면 포함합니다.
|
83 |
|
84 | ```js
|
85 | Hangul.search('달걀','닭'); // 0
|
86 |
|
87 | Hangul.search('달걀','알'); // -1
|
88 | ```
|
89 |
|
90 | `indexOf`함수와 다릅니다.
|
91 |
|
92 | ```js
|
93 | var a = '도우미'
|
94 | , b = '도움';
|
95 |
|
96 | a.indexOf(b); // -1
|
97 |
|
98 | Hangul.search(a, b); // 0
|
99 | ```
|
100 |
|
101 | 사실 구현은 간단하게 되어있습니다.
|
102 |
|
103 | ```js
|
104 | var search = function(a, b){
|
105 | var ad = disassemble(a).join('')
|
106 | , bd = disassemble(b).join('');
|
107 |
|
108 | return ad.indexOf(bd);
|
109 | };
|
110 | }
|
111 | ```
|
112 |
|
113 | 실제 사용할 때에는 하나의 단어를 여러개의 문자열과 비교하므로 `Hangul.Searcher`를 사용하는게 편합니다.
|
114 |
|
115 | ```js
|
116 | var searcher = new Hangul.Searcher('닭');
|
117 |
|
118 | searcher.search('달걀'); // 0
|
119 | searcher.search('달구지'); // 0
|
120 | searcher.search('달무리'); // -1
|
121 | ```
|
122 |
|
123 | ### 기타 한글 관련 함수
|
124 |
|
125 | 이하 함수들은 인자로 문자를 받습니다. 자바스크립트에서는 문자 타입이 없으므로 문자열로 대체합니다. 길이가 2 이상인 문자열의 경우 첫 한글자에 대해 판단합니다.
|
126 |
|
127 | #### Hangul.isHangul
|
128 |
|
129 | 주어진 문자가 완성된 한글인지 아닌지 판단합니다. 완성된 한글이란 유니코드로 '가'(0xAC00) ~ '힣'(0xD7A3) 사이에 있는 문자를 말합니다. 'ㄱ', 'ㅙ' 등은 완성된 한글이 아닙니다.
|
130 |
|
131 | #### Hangul.isConsonant
|
132 |
|
133 | 주어진 문자가 자음인지 판단합니다.
|
134 |
|
135 | #### Hangul.isVowel
|
136 |
|
137 | 주어진 문자가 모음인지 판단합니다.
|
138 |
|
139 | #### Hangul.isCho
|
140 |
|
141 | 주어진 문자가 초성으로 쓰일 수 있는지 판단합니다. 'ㄲ'은 초성으로 쓰일 수 있지만 'ㄳ'는 초성으로 쓰일 수 없습니다.
|
142 |
|
143 | #### Hangul.isJong
|
144 |
|
145 | 주어진 문자가 종성으로 쓰일 수 있는지 판단합니다. 'ㄲ'은 종성으로 쓰일 수 있지만 'ㄸ'는 종성으로 쓰일 수 없습니다.
|
146 |
|
147 | #### Hangul.endsWithConsonant
|
148 |
|
149 | 주어진 문자가 자음으로 끝나는지 판단합니다. 한글이 아닌 경우는 자음이 아니라고 간주합니다.
|
150 |
|
151 | ## License
|
152 |
|
153 | (The MIT License)
|
154 |
|
155 | Copyright (c) 2014 Jaemin Jo
|
156 |
|
157 | Permission is hereby granted, free of charge, to any person
|
158 | obtaining a copy of this software and associated documentation
|
159 | files (the "Software"), to deal in the Software without
|
160 | restriction, including without limitation the rights to use,
|
161 | copy, modify, merge, publish, distribute, sublicense, and/or sell
|
162 | copies of the Software, and to permit persons to whom the
|
163 | Software is furnished to do so, subject to the following
|
164 | conditions:
|
165 |
|
166 | The above copyright notice and this permission notice shall be
|
167 | included in all copies or substantial portions of the Software.
|
168 |
|
169 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
170 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
171 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
172 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
173 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
174 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
175 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
176 | OTHER DEALINGS IN THE SOFTWARE.
|
177 |
|