0.6.3 β€’ Published 8 months ago

hangulx v0.6.3

Weekly downloads
-
License
MIT
Repository
github
Last release
8 months ago

hangulx πŸš€

hangulx is a TypeScript library designed to work with Hangul (Korean characters) in various formats, providing utility functions for detecting, parsing, and manipulating Korean syllables and jamo (individual consonant and vowel components). This package can be especially useful for applications that need to handle Hangul text at a granular level, linguistic research, and educational tools for learning Korean.

Installation

Install the package using package manager

npm install hangulx
yarn add hangulx

Browser

Script tag (using CDN)

<script src="https://unpkg.com/hangulx" type="text/javascript"></script>

Script tag

<script src="hangulx.min.js" type="text/javascript"></script>

Usage

Node.js

import {Hangul} from 'hangulx';
import * as hangulx from 'hangulx';

AMD

<script type="text/javascript">
    (function () {
        hangulx.Hangul.disassemble('ν•œκΈ€');     // ['γ…Ž', 'ㅏ', 'γ„΄', 'γ„±', 'γ…‘', 'γ„Ή']
    })();
</script>

API

Hangul

import

import {Hangul} from 'hangulx';
<script type="text/javascript">
    (function () {
        var Hangul = hangulx.Hangul;    // or
        const {Hangul} = hangulx;
    })();
</script>

Hangul.disassemble(str: string, option?: Hangul.DisassembleOption): string[]

ν•œκΈ€μ„ 자λͺ¨λ‘œ λΆ„λ¦¬ν•©λ‹ˆλ‹€.
Splits Korean Hangul characters into their phonetic components(jamo)

Hangul.disassemble('κ°•');    // [ 'γ„±', 'ㅏ', 'γ…‡' ]
Hangul.disassemble('μ‹»');    // [ 'γ…†', 'ㅏ', 'γ„½' ]

ν•œκΈ€μ΄ μ•„λ‹Œ λ¬ΈμžλŠ” λ°˜ν™˜λ©λ‹ˆλ‹€.
Non-Hangul characters are returned as they are.

Hangul.disassemble('ABC123θ“š!');   // [ 'A',  'B', 'C', '1',  '2', '3', 'θ“š', '!' ]
Hangul.disassemble('ν•œκΈ€A');       // [ 'γ…Ž', 'ㅏ', 'γ„΄', 'γ„±', 'γ…‘', 'γ„Ή', 'A' ]

λ³΅ν•©μžμŒ(쌍자음) (γ„², γ„Έ, γ…ƒ ... ) 뢄리
splitting complex consonants (double consonants) such as γ„², γ„Έ, γ…ƒ.

Hangul.disassemble('κΉŒλ‹­', {doubleConsonant: true});    // [ 'γ„±', 'γ„±', 'ㅏ', 'γ„·', 'ㅏ', 'γ„Ί' ]
Hangul.disassemble('κΊΎλ‹€', {doubleConsonant: true});    // [ 'γ„±', 'γ„±', 'γ…“', 'γ„±', 'γ„±', 'γ„·', 'ㅏ' ]

자음ꡰ(κ²Ήλ°›μΉ¨) (γ„³, γ„΅, γ…„ ... ) 뢄리
splitting consonant clusters (compound final consonants) such as γ„³, γ„΅, γ…„.

Hangul.disassemble('κΉŒλ‹­', {clusterConsonant: true});    // [ 'γ„²', 'ㅏ', 'γ„·', 'ㅏ', 'γ„Ή', 'γ„±' ]
Hangul.disassemble('읽닀', {clusterConsonant: true});    // [ 'γ…‡', 'γ…£', 'γ„Ή', 'γ„±', 'γ„·', 'ㅏ' ]

λ³΅ν•©μžμŒ(쌍자음) 및 자음ꡰ(κ²Ήλ°›μΉ¨) 뢄리
splitting complex consonants (double consonants) and consonant clusters (compound final consonants) such as γ„², γ„Έ, γ…ƒ, γ„³, γ„΅, γ…„.

const option: Hangul.DisassembleOption = {
  doubleConsonant: true,      // 쌍자음(γ„², γ„Έ, γ…ƒ, γ…†, γ…‰) 뢄리 μ—¬λΆ€(각자 λ³‘μ„œ)
  clusterConsonant: true,    // λ³΅ν•©μžμŒ(γ„³, γ„΅, γ„Ά, γ„Ί ...) 뢄리 μ—¬λΆ€(ν•©μš© λ³‘μ„œ)
};

Hangul.disassemble('μ‹»', option);   // [ 'γ……', 'γ……', 'ㅏ', 'γ„±', 'γ……' ]
Hangul.disassemble('λ‹­λ³ΆμŒνƒ•', option);   // [ 'γ„·', 'ㅏ', 'γ„Ή', 'γ„±', 'γ…‚', 'γ…—', 'γ„±', 'γ„±', 'γ…‡', 'γ…‘', 'ㅁ', 'γ…Œ', 'ㅏ', 'γ…‡' ]

Hangul.disassembleToString(str: string, option?: Hangul.DisassembleToStringOption): string

ν•œκΈ€μ„ λΆ„ν•΄ν•˜μ—¬ 자λͺ¨λ‘œ λΆ„λ¦¬λœ λ¬Έμžμ—΄λ‘œ λ°˜ν™˜ν•©λ‹ˆλ‹€.

Hangul.disassembleToString('ν•œκΈ€');   // γ…Žγ…γ„΄γ„±γ…‘γ„Ή
Hangul.disassembleToString('ꡬ글');   // γ„±γ…œγ„±γ…‘γ„Ή

Separator μ‚¬μš©

Hangul.disassembleToString('ν•œκΈ€', {separator: ','});   // γ…Ž,ㅏ,γ„΄,γ„±,γ…‘,γ„Ή
Hangul.disassembleToString('ꡬ글', {separator: ','});   // γ„±,γ…œ,γ„±,γ…‘,γ„Ή

Hangul.disassembleToGroup(str: string, option?: Hangul.DisassembleOption): string

ν•œκΈ€μ„ κΈ€μžλ³„λ‘œ 자λͺ¨λ‘œ λΆ„λ¦¬ν•©λ‹ˆλ‹€.
Splits Korean Hangul into individual jamos for each character.

Hangul.disassembleToGroup('ν”„λž‘μŠ€');   // [['ㅍ', 'γ…‘'], ['γ„Ή', 'ㅏ', 'γ…‡'], ['γ……', 'γ…‘']]

Interface: Hangul.DisassembleOption

OptionDescriptionRequired
doubleConsonant쌍자음(γ„², γ„Έ, γ…ƒ, γ…†, γ…‰) 뢄리 μ—¬λΆ€ Determines whether double consonants (e.g., γ„², γ„Έ, γ…ƒ, γ…†, γ…‰) should be disassembledN
clusterConsonantλ³΅ν•©μžμŒ(γ„³, γ„΅, γ„Ά, γ„Ί ...) 뢄리 μ—¬λΆ€ Determines whether cluster consonants (e.g., γ„³, γ„΅, γ„Ά, γ„Ί) should be disassembledN
risingJDiphthongγ…£(οΌ»jοΌ½)계 μƒμŠΉμ΄μ€‘λͺ¨μŒ(γ…‘, γ…•, γ…•, γ… , ㅐ, γ…–) 뢄리 μ—¬λΆ€ Determines whether rising diphthongs with γ…£j should be disassembledN
risingWDiphthongγ…—/γ…œ(w)계 μƒμŠΉμ΄μ€‘λͺ¨μŒ(γ…˜, ㅝ, γ…™, γ…ž) 뢄리 μ—¬λΆ€ Determines whether rising diphthongs with γ…—/γ…œw should be disassembledN
fallingDiphthongν•˜κ°•μ΄μ€‘λͺ¨μŒ(γ…’) 뢄리 μ—¬λΆ€ Determines whether falling diphthongs should be disassembledN

Syllable

ν•œκΈ€μ˜ 음절 뢄리/μ‘°ν•© 및 기타 κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.
Provides functions for splitting and combining Korean Hangul syllables, along with other features.

import

import {Syllable} from 'hangulx';
<script type="text/javascript">
    (function () {
        var Syllable = hangulx.Syllable;    // or
        const {Syllable} = hangulx;
    })();
</script>

Syllable.disassemble(str: string): ISyllable[]

λ¬Έμžμ—΄μ„ 음절(μ΄ˆμ„±, 쀑성, μ’…μ„±)둜 λΆ„λ¦¬ν•©λ‹ˆλ‹€.
Splits a string into syllables consisting of initial sounds (cho), medial sounds (jung), and final sounds (jong).

Syllable.disassemble('κ°€μœ„');   // [{ cho: 'γ„±', jung: 'ㅏ', jong: undefined }, { cho: 'γ…‡', jung: 'γ…Ÿ', jong: undefined }]

음절둜 λ‚˜λˆŒ 수 μ—†λŠ” λ¬ΈμžλŠ” μ œκ±°λ˜μ–΄ λ°˜ν™˜λ©λ‹ˆλ‹€.
Characters that cannot be divided into syllables are removed and not returned.

Syllable.disassemble('κ°•-A1γ…Ž');    // [{ cho: 'γ„±', jung: 'ㅏ', jong: 'γ…‡' }]
Syllable.disassemble('γ„±γ„³A1');     // []

Syllable.disassembleFromChar(char: string): ISyllable | null

문자λ₯Ό 음절(μ΄ˆμ„±, 쀑성, μ’…μ„±)둜 λΆ„λ¦¬ν•©λ‹ˆλ‹€.
Splits single character into syllables consisting of initial sounds (cho), medial sounds (jung), and final sounds (jong).

Syllable.disassembleFromChar('κ°•');    // { cho: 'γ„±', jung: 'ㅏ', jong: 'γ…‡' }
Syllable.disassembleFromChar('되');    // { cho: 'γ„·', jung: 'γ…š', jong: undefined }

길이가 1을 μ΄ˆκ³Όν•˜λŠ” 경우 첫번째 문자λ₯Ό λΆ„λ¦¬ν•©λ‹ˆλ‹€. 1개 μ΄μƒμ˜ 문자λ₯Ό 음절 λΆ„λ¦¬ν•˜λ €λ©΄ Syllable.disassemble ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
If the length exceeds 1, only the first character is split into syllables. To disassemble more than one character into syllables, use the Syllable.disassemble function.

Syllable.disassembleFromChar('μ„Έμ’…λŒ€μ™•');   // { cho: 'γ……', jung: 'γ…”', jong: undefined }

뢄리할 수 μ—†λŠ” λ¬ΈμžλŠ” null λ°˜ν•œλ©λ‹ˆλ‹€.
Characters that cannot be split are returned as null.

Syllable.disassembleFromChar('γ……');    // null
Syllable.disassembleFromChar('A');    // null
Syllable.disassembleFromChar('7');    // null
Syllable.disassembleFromChar('-');    // null

Syllable.assemble(syllable: ISyllable | ISyllable[]): string

음절(μ΄ˆμ„±, 쀑성, μ’…μ„±)을 λ³‘ν•©ν•˜μ—¬ λ¬Έμžμ—΄λ‘œ λ°˜ν™˜ν•©λ‹ˆλ‹€.
Merges syllables consisting of initial sounds (cho), medial sounds (jung), and final sounds (jong) into a string.

Syllable.assemble({cho: 'γ„±', jung: 'ㅏ'});               // κ°€
Syllable.assemble({cho: 'γ…Ž', jung: 'ㅏ', jong: 'γ…‚'});   // ν•©
Syllable.assemble({cho: 'γ……', jung: 'γ…“', jong: 'γ„²'});   // μ„ž
Syllable.assemble({cho: 'γ…‚', jung: 'ㅏ', jong: 'γ„Ό'});   // 밟

Syllable.assemble({cho: 'A', jung: 'γ…“', jong: 'γ„΄'})   // Error - Invalid cho("A" can not be cho)
Syllable.assemble({cho: 'γ„±', jung: 'γ…“', jong: 'γ…ƒ'})   // Error - Invalid jong("γ…ƒ" can not be jong)
Syllable.assemble({cho: 'γ…Ž', jung: 'A', jong: 'γ„΄'})   // Error - Invalid jung("A" can not be jung)

μ—¬λŸ¬κ°œμ˜ μŒμ ˆμ„ 병합할 수 μžˆμŠ΅λ‹ˆλ‹€.
Multiple syllables can be merged.

const syllables: ISyllable[] = [
  {cho: 'γ„±', jung: 'ㅏ', jong: 'γ…‚'},
  {cho: 'γ…‡', jung: 'γ…—', jong: undefined},
  {cho: 'γ„΄', jung: 'γ…•', jong: 'γ„΄'},
];

Syllable.assemble(syllables);   // κ°‘μ˜€λ…„

Syllable.disassemble ν•¨μˆ˜λ‘œ λΆ„λ¦¬ν•œ μŒμ ˆμ„ λ‹€μ‹œ ν•©μΉ  수 μžˆμŠ΅λ‹ˆλ‹€.
Syllables split using the Syllable.disassemble function can be recombined.

const syllables: ISyllable[] = Syllable.disassemble('μ„Έμ’…λŒ€μ™•');
/* [
     { cho: 'γ……', jung: 'γ…”', jong: undefined },
     { cho: 'γ…ˆ', jung: 'γ…—', jong: 'γ…‡' },
     { cho: 'γ„·', jung: 'ㅐ', jong: undefined },
     { cho: 'γ…‡', jung: 'γ…˜', jong: 'γ…‡' }
   ] */

Syllable.assemble(syllables);   // μ„Έμ’…λŒ€μ™•
0.2.0-beta.2

9 months ago

0.2.0-beta.1

9 months ago

0.2.1-beta.1

9 months ago

0.2.0-beta.6

9 months ago

0.2.0-beta.5

9 months ago

0.2.0-beta.4

9 months ago

0.2.0-beta.3

9 months ago

0.1.0

9 months ago

0.2.0-beta.9

9 months ago

0.3.0

9 months ago

0.2.0-beta.8

9 months ago

0.2.0-beta.7

9 months ago

0.2.0-beta.10

9 months ago

0.6.3

8 months ago

0.4.5

8 months ago

0.6.2

8 months ago

0.4.4

8 months ago

0.4.7

8 months ago

0.4.6

8 months ago

0.5.0

8 months ago

0.4.1

9 months ago

0.4.0

9 months ago

0.6.1

8 months ago

0.5.2

8 months ago

0.4.3

8 months ago

0.6.0

8 months ago

0.5.1

8 months ago

0.4.2

8 months ago

0.0.2

9 months ago

0.0.1

9 months ago