조사처리
최근 수정 시각:
분류
1. 개요 [편집]
한국어 단어 뒤에 조사가 올 때 받침(종성) 유무에 따라 형태가 달라지는 것을 프로그램 코드를 통해 자동으로 처리하는 작업을 흔히 조사처리라고 한다.
era 게임 작업물에서는 보통 ZNAME.ERB/ERH 등의 이름으로 코드가 동봉되어 있으며, 보통 앞에 들어갈 단어가 선정된 후 작업해야 한다는 의미에서 Postfix라는 명칭으로 코드에 기입되어 있기도 한다.
era 게임 작업물에서는 보통 ZNAME.ERB/ERH 등의 이름으로 코드가 동봉되어 있으며, 보통 앞에 들어갈 단어가 선정된 후 작업해야 한다는 의미에서 Postfix라는 명칭으로 코드에 기입되어 있기도 한다.
1.1. 필요성 [편집]
이 작업을 하지 않으면 다음과 같은 문장을 게임에서 보게 된다.
이런 현상이 일어나는 이유는 실제로는 스크립트를 대략 다음과 같이 작성하기 때문이다. (이하 eraBasic 기준 표기)
이 때, 변수 요괴, CALLNAME:TARGET은 해당 경우에 출력될 이름 (레이센/카구야)이 대응되었고, 변수 아이템, 장소:LOCAL은 해당 경우에 출력될 아이템명이나 장소명 (호빵/죽림)이 대응되었다.
조사 처리 함수를 마련하면, 변수로 주어진 문자열을 해석하여 을/(를)과 같은 형식의 조사 표현을 피할 수 있다.
레이센은(는) 호빵을(를) 맛있게 먹었다.
카구야은 죽림로 향했다.
이런 현상이 일어나는 이유는 실제로는 스크립트를 대략 다음과 같이 작성하기 때문이다. (이하 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에 동봉된, 고전적 방식에서 처리할 수 있는 형태가 바뀌는 조사는 다음과 같다.
3.2. 유니코드 방식 [편집]
유니코드 디코드 및 인코드가 가능할 때 받침(종성) 유무는 다음과 같은 식으로 구할 수 있다.
현재 eraBasic으로 구현된 유니코드 방식의 조사처리 코드는 eraTWKR에서 볼 수 있다.
<나머지> = (<마지막 음절의 유니코드 치환값> - 0xAC00) % 28
;나머지 값이 0 = 받침이 없다, 8 = ㄹ 받침이다
현재 eraBasic으로 구현된 유니코드 방식의 조사처리 코드는 eraTWKR에서 볼 수 있다.
3.2.1. 유니코드 방식/지원 조사 [편집]
24.01.05 현재 TWKR에 동봉된, 유니코드 방식에서 처리할 수 있는 형태가 바뀌는 조사는 다음과 같다.