UNPKG

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