뉴스

조사처리

최근 수정 시각:

1. 개요 [편집]

한국어 단어 뒤에 조사가 올 때 받침(종성) 유무에 따라 형태가 달라지는 것을 프로그램 코드를 통해 자동으로 처리하는 작업을 흔히 조사처리라고 한다.
era 게임 작업물에서는 보통 ZNAME.ERB/ERH 등의 이름으로 코드가 동봉되어 있으며, 보통 앞에 들어갈 단어가 선정된 후 작업해야 한다는 의미에서 Postfix라는 명칭으로 코드에 기입되어 있기도 한다.

1.1. 필요성 [편집]

이 작업을 하지 않으면 다음과 같은 문장을 게임에서 보게 된다.

레이센은(는) 호빵을(를) 맛있게 먹었다.
카구야은 죽림로 향했다.

이런 현상이 일어나는 이유는 실제로는 스크립트를 대략 다음과 같이 작성하기 때문이다. (이하 eraBasic 기준 표기)

PRINTFORML %요괴%은(는) %아이템%을(를) 맛있게 먹었다.
PRINTFORML %CALLNAME:TARGET%은 %장소:LOCAL%로 향했다.

이 때, 변수 요괴, CALLNAME:TARGET은 해당 경우에 출력될 이름 (레이센/카구야)이 대응되었고, 변수 아이템, 장소:LOCAL은 해당 경우에 출력될 아이템명이나 장소명 (호빵/죽림)이 대응되었다.
조사 처리 함수를 마련하면, 변수로 주어진 문자열을 해석하여 을/(를)과 같은 형식의 조사 표현을 피할 수 있다.

;ZNAME.ERB
@조사처리(앞말, 조사)
#FUNCTIONS
#DIMS 앞말
#DIMS 조사
;대충 조사의 처리 필요성 확인 (~이 가 필요한지, 형태가 바뀌는 조사인지 등)
;대충 앞말 맨 마지막 음절의 받침 유무 확인
;대충 앞말 맨 마지막 음절에 따른 조사 변경 처리
RETURNF %앞말%%변경된조사%

;ZNAME.ERH ; 매크로 처리
#DEFINE 타겟은 조사처리(CALLNAME:TARGET, "은")
#DEFINE LOC장소로 조사처리(장소:LOCAL, "으로")

;PRINT.ERB
PRINTFORML %조사처리(요괴, "는")% %조사처리(아이템, "을")% 맛있게 먹었다.
PRINTFORML %타겟은% %LOC장소로% 향했다.

2. 유형 [편집]

한국어의 조사처리는 크게 받침(종성) 유무에 따른 형태 처리 절차라고 볼 수 있는데, 보통은 규칙에 따르지만 예외적 사항이 존재하기 때문에 코드 처리시 유의하여야 한다.

2.1. 받침에 따라 형태가 바뀌지 않는 조사 [편집]

이러한 조사는 앞말에 따라 형태가 바뀌지 않으므로 조사처리를 고려할 필요가 없다.
  • 보다
  • 같이
  • 에게

등이 존재한다.

2.2. 받침에 따라 형태가 바뀌는 조사 [편집]

(앞말)받침 있음
(앞말)받침 없음
예시
레이센은/레이무는
플랑이/레밀리아가
당신을/마스터를
죽림과/명련사와
카센아/스이카야
이었(다)
였(다)
란이었/유카리였

2.3. 받침에 따라 가 붙는 조사 [편집]

아래에 해당하는 조사는 앞말의 받침이 있으면 가 붙는다.
  • (이)나
  • (이)란
  • (이)든가, (이)든지
  • (이)나마
  • (이)야(말로)

등이 존재한다.

2.3.1. 예외 케이스 [편집]

  • 으로/로
    받침에 따라 형태가 바뀌는 조사에 해당하나, 앞말이 'ㄹ' 받침인 경우 '으'를 제외한다.
  • 나가(내가), 저가(제가)
    일반적인 체크보다는 주로 후처리(일반 처리 이후 한 번 더 처리)를 통해 구현한다.

3. 구현 방식 [편집]

era의 한국어 번역 등에서 사용하는 조사처리 라이브러리들은 이러한 유니코드 분해법을 사용하거나, eramaker 호환이 가능한 주먹구구식 방법론을 통해 조사처리를 구현하고 있다.

3.1. 고전적 방식 [편집]

eraTHYMKR을 비롯한 대부분의 조사처리를 지원하는 번역판 era에서 볼 수 있는 방식으로, 존재 가능한 받침이 없는 모든 음절을 하드코딩한 후, 해당 리스트 내의 존재 유무에 따라 받침/받침없음에 따른 조사처리를 구현한다.

3.1.1. 고전적 방식/지원 조사 [편집]

24.01.05 현재 YMKR에 동봉된, 고전적 방식에서 처리할 수 있는 형태가 바뀌는 조사는 다음과 같다.
지원하는 조사
부분 지원 조사
미지원 조사
은/는, 이/가, 을/를, 과/와, 이었/였, 내가/제가,
으로/로[1], 받침에 따라 가 붙는 조사[2]
아/야[3]

3.2. 유니코드 방식 [편집]

유니코드 디코드 및 인코드가 가능할 때 받침(종성) 유무는 다음과 같은 식으로 구할 수 있다.

<나머지> = (<마지막 음절의 유니코드 치환값> - 0xAC00) % 28
;나머지 값이 0 = 받침이 없다, 8 = ㄹ 받침이다


현재 eraBasic으로 구현된 유니코드 방식의 조사처리 코드는 eraTWKR에서 볼 수 있다.

3.2.1. 유니코드 방식/지원 조사 [편집]

24.01.05 현재 TWKR에 동봉된, 유니코드 방식에서 처리할 수 있는 형태가 바뀌는 조사는 다음과 같다.
지원하는 조사
부분 지원 조사
미지원 조사
은/는, 이/가, 을/를, 과/와, 이었/였, 내가/제가, 으로/로, 받침에 따라 가 붙는 조사[4]
아/야[5]
[1] ㄹ받침 경우 미지원[2] (이)랑, (이)라, (이)며, (이)고, (이)다, (이)였, (이)여, (이)야, (이)나, (이)면, (이)지만, (이)겠, (이)셨, (이)잖, (이)니 만 지원[3] 야 조사 입력시 (이)야 와 같은 방식으로 처리됨 [4] 앞에 해당하지 않는 모든 조사를 해당 방식으로 상정하여 처리함[5] 야 조사 입력시 (이)야 와 같은 방식으로 처리됨