Skip to content

Shin-JaeHeon/korean-js

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

korean-js

npm npm npm

korean-js는 가장 간편한 한국어 처리 라이브러리입니다.

종류

import Hangul from 'korean-js/hangul' // 한글
import Text from 'korean-js/text' // 한국어 문자열 처리
import Number from 'korean-js/number' // 숫자와 관련된 처리
import Region from 'korean-js/region' // 지역명 처리

Hangul

import Hangul from 'korean-js/hangul'

한글을 다루는 클래스로, hangul-js@0.2.5와 오리지널 함수를 포함하고 있습니다.

hangul-js의 축약함수(Hangul.d, Hangul.a)는 포함하고 있지 않습니다. 또한 hangul-js의 함수에 관한 설명은 hangul-js@0.2.5README.md에서 가져왔습니다.

HangulMode

한글처리와 관련된 설정을 담당하는 enum입니다. 영문자를 지원하는 경우에는 가독성을 위해 예외적으로 소문자를 사용하는 경우가 있습니다.

  • correctJosa에서 사용하는 모드
    • 주격조사(JuGyeokJosa로도 접근 가능합니다.) : ,
    • 목적격조사(MokJeokGyeokJosa로도 접근 가능합니다.) : ,
    • 보격조사(BoGyeokJosa로도 접근 가능합니다.) : ,

correctJosa

  • str : string 조사를 찾을 단어
  • mode : HangulMode 찾을 조사의 종류 올바른 조사를 반환합니다.

예시

import Hangul from 'korean-js/hangul';
Hangul.correctJosa('가방', HangulMode.주격조사); // 이
Hangul.correctJosa('한글', HangulMode.목적격조사); // 을
Hangul.correctJosa('사과', HangulMode.보격조사); // 는

disassemble

Hangul.disassemble(str:string, grouped:boolean = false)은 문자열 str에 있는 한글을 자음/모음으로 분리하여 문자들의 배열로 돌려줍니다. 이 때 한글이 아닌 문자는 그대로 반환됩니다. Hangul.d처럼 짧은 이름으로 사용할 수도 있습니다.

Hangul.disassemble('가나다'); // ['ㄱ','ㅏ','ㄴ','ㅏ','ㄷ','ㅏ']

Hangul.disassemble('ab가c'); // ['a','b','ㄱ','ㅏ','c']

Hangul.disassemble('ab@!23X.'); // ['a','b','@','!','2','3','X','.']

같은 홑낱자로 이루어진 겹낱자는 분리되지 않습니다.

Hangul.disassemble('ㄲ'); // ['ㄲ']

다른 홑낱자로 이루어진 겹낱자는 분리됩니다.

Hangul.disassemble('ㄳ'); // ['ㄱ','ㅅ']

Hangul.disassemble('ㅚ'); // ['ㅗ','ㅣ']

추가적으로 grouped 옵션을 true로 설정하여 문자열의 각 글자별로 따로 분리할 수 있습니다.

Hangul.d('매드캣MK2', true); 
// [['ㅁ', 'ㅐ'], ['ㄷ', 'ㅡ'], ['ㅋ', 'ㅐ', 'ㅅ'], ['M'], ['K'], ['2']]

윈도우에서 두벌식 키보드로 주어진 문자열을 입력할 때 누르는 키들의 배열이라고 생각하면 쉽습니다.

assemble

Hangul.assemble(arr:string[])는 한글 자음/모음들의 배열 arr을 인자로 받아 이를 조합한 문자열을 돌려줍니다. 이 때 한글이 아닌 문자는 그대로 반환됩니다. Hangul.a처럼 짧은 이름으로 사용할 수도 있습니다.

Hangul.assemble(['ㄱ','ㅏ','ㄴ','ㅏ','ㄷ','ㅏ']); // '가나다'

Hangul.assemble(['a','b','ㄱ','ㅏ','c']); // 'ab가c'

Hangul.assemble(['a','b','@','!','2','3','X','.']); // 'ab@123X.'

이 경우에도 두벌식 키보드에서 주어진 키들을 누를 때 만들어지는 문자열을 돌려준다고 생각하면 쉽습니다.

Hangul.assemble(['ㅗ','ㅐ']); // 'ㅙ'

Hangul.assemble(['ㄹ','ㅂ','ㅅ']); // 'ㄼㅅ'

Hangul.disassemble 함수와 역함수 관계가 아님에 주의하세요.

Hangul.a(Hangul.d('옽ㅏ')); // '오타' ('옽ㅏ' 가 아님)

search

Hangul.search(a:string, b:string)는 문자열 a가 문자열 b를 포함하는지 검사합니다. 이때 포함관계는 '두벌식 키보드 기준으로 a문자열을 입력할 때 누르는 키들의 배열이 b문자열을 입력할 때 누르는 키들의 배열을 포함한다'로 정의합니다. 반환값이 0보다 크거나 같다면 포함합니다.

Hangul.search('달걀','닭'); // 0

Hangul.search('달걀','알'); // -1

indexOf함수와 다릅니다.

var a = '도우미'
  , b = '도움';
  
a.indexOf(b); // -1

Hangul.search(a, b); // 0

실제 사용할 때에는 하나의 단어를 여러개의 문자열과 비교하므로 Hangul.Searcher를 사용하는게 편합니다. 내부적으로 한번만 자모 분리를 수행하므로 효율적입니다.

var searcher = new Hangul.Searcher('닭');

searcher.search('달걀'); // 0
searcher.search('달구지'); // 0
searcher.search('달무리'); // -1

rangeSearch

Hangul.rangeSearch(a:string, b:string)a 문자열에서 b 문자열을 모두 찾고 일치하는 범위를 a 문자열 상의 인덱스로 돌려줍니다. 만약 b 문자열을 찾지 못했다면 빈 배열을 돌려줍니다. 검색 시스템에서 일치하는 부분을 강조하려고 할 때 유용합니다.

var a = '간장공장공장장',
    b = '공장';

Hangul.rangeSearch(a, b); // [[2, 3], [4, 5]]

이하 함수들은 인자로 문자를 받습니다. 자바스크립트에서는 문자 타입이 없으므로 문자열로 대체합니다. 길이가 2 이상인 문자열의 경우 첫 한글자에 대해 판단합니다.

isComplete(c)

주어진 문자가 완성된 한글인지 아닌지 판단합니다. 완성된 한글이란 유니코드로 '가'(0xAC00) ~ '힣'(0xD7A3) 사이에 있는 문자를 말합니다. 'ㄱ', 'ㅙ' 등은 완성된 한글이 아닙니다. Hangul.isCompleteAll(str) 형태로 str의 모든 문자가 완성된 한글인지 판단할 수 있습니다.

isConsonant(c)

주어진 문자가 자음인지 판단합니다. Hangul.isCosonantAll(str) 형태로 str의 모든 문자가 자음인지 판단할 수 있습니다.

isVowel(c)

주어진 문자가 모음인지 판단합니다. Hangul.isVowelAll(str) 형태로 str의 모든 문자가 모음인지 판단할 수 있습니다.

isCho(c)

주어진 문자가 초성으로 쓰일 수 있는지 판단합니다. 'ㄲ'은 초성으로 쓰일 수 있지만 'ㄳ'는 초성으로 쓰일 수 없습니다. Hangul.isChoAll(str) 형태로 str의 모든 문자가 초성인지 판단할 수 있습니다.

isJong(c)

주어진 문자가 종성으로 쓰일 수 있는지 판단합니다. 'ㄲ'은 종성으로 쓰일 수 있지만 'ㄸ'는 종성으로 쓰일 수 없습니다. Hangul.isJongAll(str) 형태로 str의 모든 문자가 종성인지 판단할 수 있습니다.

endsWithConsonant(c)

주어진 문자가 자음으로 끝나는지 판단합니다. 받침이 있거나 자음 하나가 인자로 주어지면 true를 아닌 경우 false를 반환합니다. 한글이 아닌 경우는 false를 반환합니다. 은/는 이/가 구분에 사용할 수 있습니다.

endsWith(c, t)

주어진 문자가 t(타겟)으로 끝나는지 판단합니다. t로 끝나면 true를 아닌 경우 false를 반환합니다. 로/으로 굽분에 사용할 수 있습니다.

Text

import Text from 'korean-js/text'

주의, 위 코드는 Text객체를 덮어 쓸 수도 있습니다. Text를 사용할 경우에는 texttextKR등으로 대체하여야합니다

텍스트를 다루는 클래스입니다. inko@1.0.6hanspell@0.7.2와 오리지널 함수가 포함되어있습니다.

dateMode

  • 띄어쓰기
    • '' 또는 ' '이외의 구분자가 필요한 경우에는 아래의 TRIMSPACE 대신 문자열을 사용할 수 있습니다.
    • TRIM : ''' 예) 2019년4월8일20시19분48초
    • SPACE : ' ' 예) 2019년 4월 8일 20시 19분 48초
  • 표시 범위
    • 시간
      • SECOND : 초까지 표시합니다. 예) 20시 19분 48초
      • MINUTES : 분까지 표시합니다. 예) 20시 19분
      • HOUR : 시간까지 표시합니다. 예) 20시
    • 날짜
      • DATE : 일까지 표시합니다. 예) 2019년 4월 8일
      • MONTH : 월까지 표시합니다. 예) 2019년 4월
      • YEAR : 년까지 표시합니다. 예) 2019년
      • MONTH_DATE : 월, 일만 표기합니다. 예) 4월 8일

InkoOption

inko 라이브러리의 설정 인터페이스입니다.

declare interface InkoOption {
  allowDoubleConsonant: boolean
}

SpellCheckResult

hanspell 라이브러리의 결과 인터페이스입니다.

declare interface SpellCheckResult {
  type?: string,
  token: string,
  suggestions: Array<string>,
  context?: string,
  info: string
}

checkSpell(str, useDaum, timeout)

  • 파라메터
    • str : string
    • useDaum ?: boolean, 기본값은 boolean
    • timeout ?: number, 기본값은 10000(10초)
  • 반환 값
    • Promise<Array<SpellCheckResult>>

맞춤법 검사를 합니다. 기본 검사기는 부산대학교 인공지능연구실 (주)나라인포테크의 맞춤법 검사기 입니다.

ko2en(str, option)

  • str : string
  • option ?: InkoOption

한글을 로마자로 바꿉니다.

en2ko(str, option)

  • str : string
  • option ?: InkoOption

로마자를 한글로 바꿉니다.

dateTime(date, mode)

  • date : Date
  • mode : dateMode = [dateMode.SPACE, dateMode.DATE, dateMode.SECOND]

날짜 + 시간을 반환합니다. 예) 2019년 4월 8일 20시 19분 48초

date(date, mode)

  • date : Date
  • mode : dateMode = [dateMode.SPACE, dateMode.DATE]

날짜를 반환합니다. 예) 20시 19분 48초

time(date, mode)

  • date : Date
  • mode : dateMode = [dateMode.SPACE, dateMode.DATE]

시간을 반환합니다. 예) 2019년 4월 8일

Number

import Number from 'korean-js/number'

주의, 위 코드는 기본 객체인 Number를 덮어쓰게 됩니다. Number를 사용할 경우에는 numbernumberKR등으로 대체하여야합니다

숫자를 처리하는 부분입니다.

NumberMode

import NumberMode from 'korean-js/number/mode

  • 숫자
    • NumberMode.Unit4 : 숫자는 한국어로 바꾸지않고, 4자리마다 단위를 추가합니다.
      • 예 : toKorean(1234567890, NumberMode.Unit4) // 12억3456만7890
    • NumberMode.Unit : 숫자는 한국어로 바꾸지않고, 각각에 단위를 추가합니다.
      • 예 : toKorean(1234567890, NumberMode.Unit4) // 1십2억3천4백5십6만7천8백9십
  • 전화번호(숫자)
    • phone
    • phoneSKT
    • NetworkIOT
    • NetworkPC
    • phoneKTF
    • phoneLGT
    • Seoul
    • Gyeonggi
    • Incheon
    • Gangwon
    • Chungnam
    • Chungbuk
    • Daejeon
    • Sejong
    • Busan
    • Ulsan
    • Daegu
    • Gyeongbuk
    • Gyeongnam
    • jeonbuk
    • Gwangju
    • Jeonnam
    • Jeju
    • 핸드폰
    • 핸드폰SKT
    • IOT통신
    • PC통신
    • 핸드폰KTF
    • 핸드폰LGT
    • 서울
    • 경기
    • 인천
    • 강원
    • 충남
    • 충북
    • 대전
    • 세종
    • 부산
    • 울산
    • 대구
    • 경북
    • 경남
    • 전북
    • 광주
    • 전남
    • 제주
  • 지역(전화번호를 지역이름으로)
    • 010
    • 011
    • 012
    • 013
    • 016
    • 014
    • 02
    • 031
    • 032
    • 033
    • 041
    • 042
    • 043
    • 044
    • 051
    • 052
    • 053
    • 054
    • 055
    • 061
    • 062
    • 063
    • 064

toPhoneNumberString(number, gukbeon, split, split2)

  • number : number, 예) 12345678
  • gukbeon : 국번, 예) NumberMode.Seoul, NumberMode.서울
  • split : 전화번호 구분자(기본값 : '')
  • split2 : 국번 구분자(기본값 : '') : '-'이면 공이-XXXX-XXXX, ')'이면 공이)XXXX-XXXX

숫자를 한글로 표기된 전화번호로 바꿉니다.

number.toPhoneNumberString(12345678, NumberMode.Seoul); //공이일이삼사오육칠팔

toPhoneNumber(number, gukbeon, split, split2)

  • number : number, 예) 12345678
  • gukbeon : 국번, 예) NumberMode.Seoul, NumberMode.서울
  • split : 전화번호 구분자(기본값 : '-')
  • split2 : 국번 구분자(기본값 : '-') : '-'이면 02-XXXX-XXXX, ')'이면 02)XXXX-XXXX

한글을 숫자로 표기된 전화번호로 바꿉니다.

number.toPhoneNumber('일이삼사오륙칠팔', NumberMode.Seoul); //02-1234-5678

toKorean(n, ?mode)

  • n : number, 한국어로 바꿀 숫자입니다.
  • mode : NumberMode, 변환 방법에 대해 설정합니다.

mode가 설정되지 않으면 모두 한국어로 바꿉니다.

toKorean(1234567890) // 십이억삼천사백오십육만칠천팔백구십

toNumber(str)

  • str : string 숫자로 바꿀 한국어입니다.

아래와 같은 유형의 한국어를 숫자로 바꿀 수 있습니다.

  • 삼천이백오십오
  • 삼천백오십오
  • 삼천백십오
  • 삼천백십오

, , 앞에서는 을 생략해도 정상적으로 인식이 가능합니다.

Region

import Region from 'region' 지역명을 다루는 클래스로, region-name-kr를 사용하고 있습니다.

shortProvinceName2(list, ?allow3words)

  • list : 지역 리스트
  • allow3words : 부울경, 수도권같이 3글자로 된 축약어의 허용 여부

충청남도와 충청북도가 들어있으면 충청도로 줄이고 싶을때, list내에 있는 다음과 같은 지역명을 축약시킵니다.

  • 전북 + 전남 = 전라
  • 전북 + 전남 + 광주 = 호남
  • 경북 + 경남 = 경상
  • 경북 + 경남 + 부산 + 대구 + 울산 = 영남
  • 경남 + 부산 + 울산 = 부울경
  • 충북 + 충남 = 충청
  • 충북 + 충남 + 세종 = 호서
  • 서울 + 인천 = 경인
  • 서울 + 인천 + 경기 = 수도권

shortProvinceName(list)

부산 광역시 처럼 띄어쓰기가 되있는 경우, 부산광역시trim됩니다.

다음과 같은 지역명을 축약시킵니다.

  • 전라북도 + 전라남도 = 전라도
  • 전라북도 + 전라남도 + 광주광역시 = 호남 지방
  • 경상북도 + 경상남도 = 경상도
  • 경상북도 + 경상남도 + 부산광역시 + 대구광역시 + 울산광역시 = 영남 지방
  • 경상남도 + 부산광역시 + 울산광역시 = 부울경
  • 충청북도 + 충청남도 = 충청도
  • 충청북도 + 충청남도 + 세종특별자치시 = 호서 지방
  • 서울특별시 + 인천광역시 = 경인 지방
  • 서울특별시 + 인천광역시 + 경기도 = 수도권

japanese(list, mode = 2)

시도, 시군구를 일본어로 번역합니다.

부산 광역시 처럼 띄어쓰기가 되있는 경우, 부산광역시trim됩니다.

mode

mode가 0일 경우 한자(世宗特別自治市)로 반환됩니다.

mode가 1일 경우 카타카나(セジョントゥクピョルジャチシ)로 반환합니다.

mode가 2일 경우 한자, 카타카나 병기(世宗(セジョン)特別自治市)로 반환합니다.

고성군의 경우 고성군(경남), 고성군(강원)으로 구분해야 변환이 가능합니다.

mode = 2 예시

  • 특별/광역시/도 : 세종특별자치시世宗(セジョン)特別自治市
  • 특별/광역시 구/군 :서울특별시 영등포구ソウル特別市 永登浦(ヨンドゥンポ)区
  • 도 시/군 : 강원도 평창군江原(カンウォン)道 平昌(ピョンチャン)郡
  • 도 시 구 : 경기도 수원시 권선구京畿(キョンギ)道 水原(スウォン)市 勧善(クォンソン)区

mode = 1 예시

  • 특별/광역시/도 : 세종특별자치시セジョントゥクピョルジャチシ
  • 특별/광역시 구/군 :서울특별시 영등포구ソウルトゥクピョルシ ヨンドゥンポグ
  • 도 시/군 : 강원도 평창군カンウォンド ピョンチャングン
  • 도 시 구 : 경기도 수원시 권선구キョンギド スウォンシ クォンソング

mode = 0 예시

  • 특별/광역시/도 : 세종특별자치시世宗特別自治市
  • 특별/광역시 구/군 :서울특별시 영등포구ソウル特別市 永登浦区
  • 도 시/군 : 강원도 평창군江原道 平昌郡
  • 도 시 구 : 경기도 수원시 권선구京畿道 水原市 勧善区