Java 예제: 한글 초성 중성 종성 분리 (자모분리)

유니코드의 특성을 이용해 자모분리합니다. 예를 들면 ‘간’이라는 글자를 ㄱ, ㅏ, ㄴ 으로 분리하는 예제입니다.

유니코드 한글은 0xAC00 으로부터 초성 19개, 중상21개, 종성28개로 이루어지고 이들을 조합한 11,172개의 문자를 갖는다.

한글코드의 값 = ((초성 * 21) + 중성) * 28 + 종성 + 0xAC00
(0xAC00은 ‘ㄱ'의 코드값)

따라서 다음과 같은 계산 식이 구해진다.

유니코드 한글 문자 코드 값이 X일 때,

초성 = ((X - 0xAC00) / 28) / 21
중성 = ((X - 0xAC00) / 28) % 21
종성 = (X - 0xAC00) % 28

이 때 초성, 중성, 종성의 값은 각 소리 글자의 코드값이 아니라 이들이 각각 몇 번째 문자인가를 나타내기 때문에 다음과 같이 다시 처리한다.

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

초성문자코드 = 초성 + 0x1100 //(‘ㄱ’)
중성문자코드 = 중성 + 0x1161 // (‘ㅏ’)
종성문자코드 = 종성 + 0x11A8 - 1 // (종성이 없는 경우가 있으므로 1을 뺌)

 

출처: https://gist.github.com/thirdj/5333532

  1. import java.util.ArrayList;
  2. import java.util.List;
  3.  
  4. import org.springframework.stereotype.Component;
  5.  
  6. @Component
  7. public class UnicodeHandler {
  8.  
  9. private static final int HANGEUL_BASE = 0xAC00; // '가'
  10. private static final int HANGEUL_END = 0xD7AF;
  11. // 이하 cho, jung, jong은 계산 결과로 나온 자모에 대해 적용
  12. private static final int CHO_BASE = 0x1100;
  13. private static final int JUNG_BASE = 0x1161;
  14. private static final int JONG_BASE = (int)0x11A8 - 1;
  15. // 이하 ja, mo는 단독으로 입력된 자모에 대해 적용
  16. private static final int JA_BASE = 0x3131;
  17. private static final int MO_BASE = 0x314F;
  18.  
  19.  
  20. /* https://gist.github.com/thirdj/5333532
  21. */
  22.  
  23. public List<Character> splitHangeulToConsonant(String text) {
  24.  
  25. List<Character> list = new ArrayList<>();
  26.  
  27. for(char c : text.toCharArray()) {
  28. System.out.println(c + "|" + (int)c);
  29. if((c <= 10 && c <= 13) || c == 32) {
  30. list.add(c);
  31. continue;
  32. } else if (c >= JA_BASE && c <= JA_BASE + 36) {
  33. list.add(c);
  34. continue;
  35. } else if (c >= MO_BASE && c <= MO_BASE + 58) {
  36. list.add((char)0);
  37. continue;
  38. } else if (c >= HANGEUL_BASE && c <= HANGEUL_END){
  39. int choInt = (c - HANGEUL_BASE) / 28 / 21;
  40. int jungInt = ((c - HANGEUL_BASE) / 28) % 21;
  41. int jongInt = (c - HANGEUL_BASE) % 28;
  42. char cho = (char) (choInt + CHO_BASE);
  43. char jung = (char) (jungInt + JUNG_BASE);
  44. char jong = jongInt != 0 ? (char) (jongInt + JONG_BASE) : 0;
  45.  
  46. list.add(cho);
  47. list.add(jung);
  48. list.add(jong);
  49. } else {
  50. list.add(c);
  51. }
  52.  
  53. }
  54. return list;
  55.  
  56. }
  57.  
  58. }

 

  1. @RequestMapping("/splitDemo")
  2. @ResponseBody
  3. public String splitHangeulDemo(String text) throws Exception {
  4. text = "아햏햏 가나다R디릴맇 률흏 ㄵ ㅄ 럃뱗갸꺎 끼누뒉 눼";
  5. List<Character> charList = uh.splitHangeulToConsonant(text);
  6. StringBuilder sb = new StringBuilder();
  7. for(char c : charList) {
  8. System.out.println(c + "|" + (int)c);
  9. sb.append(c + ".");
  10. }
  11. return "<pre>" + text + "\n" + sb.toString() + "</pre>";
  12. }

 

[출처] http://yoonbumtae.com/?p=745

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
27 [java][maven] jar 파일 의존성 한번에 다운로드 maven 사용 졸리운_곰 2023.08.24 192
26 Prometheus + Grafana로 Java 애플리케이션 모니터링하기 file 졸리운_곰 2020.12.17 279
25 Blockchain Implementation With Java Code file 졸리운_곰 2019.06.16 338
24 Java 코드로 이해하는 블록체인(Blockchain) 졸리운_곰 2019.06.16 377
23 순수 Java Application 코드로 Restful api 호출 졸리운_곰 2018.10.10 415
22 WebDAV 구현을 위한 환경 설정 file 졸리운_곰 2017.09.24 268
21 [Java] Apache Commons HttpClient로 SSL 통신하기 졸리운_곰 2017.03.27 784
20 JSoup를 이용한 HTML 파싱 졸리운_곰 2017.03.04 320
19 jsoup을 활용해서 Java에서 HTML 파싱하는 방법 정리 file 졸리운_곰 2017.03.04 579
18 NSA의 Dataflow 엔진 Apache NiFi 소개와 설치 file 졸리운_곰 2017.01.23 630
17 wordpress-java-integration 자바와 워드프레스 통합 졸리운_곰 2016.12.30 298
16 Create New Posts in Wordpress using Java and XMLRpc 졸리운_곰 2016.11.14 268
15 자바로 POST 방식으로 통신하기, java httppost 클래스를 활용한 예제 졸리운_곰 2016.11.14 647
14 [Java]아파치 HttpClient사용하기 file 졸리운_곰 2016.11.14 301
13 Building a Search Engine With Nutch Solr And Hadoop file 졸리운_곰 2016.04.21 435
12 Nutch and Hadoop Tutorial file 졸리운_곰 2016.04.21 391
11 Latest step by Step Installation guide for dummies: Nutch 0. file 졸리운_곰 2016.04.21 305
10 Nutch 초간단 빌드와 실행 졸리운_곰 2016.04.21 681
9 Nutch로 알아보는 Crawling 구조 - Joinc 졸리운_곰 2016.04.21 536
8 A tiny bittorrent library Java: 자바로 만든 작은 bittorrent 라이브러리 file 졸리운_곰 2016.04.20 418
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED