상세 컨텐츠

본문 제목

PHP 한국어 처리 : KConjugator(한국어 동사 변화 처리기)

프로그래밍

by ∫2tdt=t²+c 2015. 1. 18. 18:01

본문




한국어 동사 어근으로부터 동사 변화를 구해내는 프로그램입니다. 원래는 살아있는 라틴어 사이트에 포함된 사전에 이용하려고 (라틴어 동사 변화 밑에 한국어 뜻을 달고자) PHP로 된 Korean Verb Conjugate 코드를 찾아봤는데 쓸만한게 없더라구요. 그래서 어제밤부터 뚝딱뚝딱해서 후딱 개발해버렸습니다. 아래는 '되다'를 가지고 테스트해본 결과입니다. 각종 불규칙 동사를 넣어 테스트해봤는데, 만족할 만한 결과가 나와서 바로 라틴어 사전에 적용하기로 결정하고 그냥 만든김에 소스코드까지 공개 해버리기로 했습니다. BSD라이센스로 배포하니 원작자만 밝히시면 자유롭게 사용/수정하셔도 됩니다.


제작하는데 혹시 도움이 될까해서 Dan Bravender라는 사람이 제작한 https://github.com/dbravender/korean_conjugation를 참고해봤는데, 외국인이 만들어서 그런지 쉬운 규칙을 어렵게 쪼개서 코드로 작성했다는 느낌이 들어서 그냥 한국인의 직관을 가지고 새로 짰습니다.

Dan Bravender의 코드대로라면 "보이다"의 평서문 현재 비격식 낮춤형이 "보이야"가 되는 등의 버그가 있는데 ('보이다'를 보 이다(서술격 조사)로 해석하는 듯합니다) 그런 소소한 문제 역시 처리했습니다.

그리고 명사형 활용, 관형사형 활용현재, 과거, 미래시제 모두로 변화 가능하고, 의문형 미래시제도 가능합니다. (그리고 학교문법에서는 인정하지 않지만, 라틴어 사전용으로 개발했기에 '대과거' 시제도 넣었습니다. 예를 들어 '갔었다' 이런 변화도 가능하다는 거죠.)



KConjugator.zip


압축 파일 안에 KConjugator.phpKConjugatorTest.php가 있습니다. 실제 라이브러리는 KConjugator.php 파일에 들어있고, KConjugatorTest.php는 이를 이용하는 예제를 보여줍니다. PHP를 알면 누구나 쉽게 사용할수 있게 짜놓았지만, 그래도 친절하게 사용방법 설명 곁들입니다. 




메소드 설명

__construct($base, $contraction = true)

* 생성자입니다. 활용할 동사의 어간과 축약여부를 인자로 넣어주면 됩니다.

$base: 종결어미 '-다'를 제외한 동사 어간

$contraction: 모음 축약 사용여부 (true면 축약함, false면 축약하지 않음)


conjugate($mode, $tense, $formal = F_INFORMAL, $high = H_LOW)

* 활용형을 구하여 반환합니다. 인자로 서법, 시제, 격식, 높임 여부를 넣어주면 됩니다.

$mode: 서법 및 기타 변화형태를 설정합니다.

M_DECLARATIVE : 평서형

M_INQUISITIVE : 의문형

M_IMPERATIVE : 명령형

M_PROPOSITIVE : 청유형

M_NOMINAL : 명사형

M_ADJECTIVAL : 관형사형


$tense: 시제를 설정합니다.

T_PRESENT: 현재시제

T_PAST: 과거시제

T_FUTURE: 미래시제 (ex:-할 것이다)

T_CONDITIONAL: 조건부 미래 시제 (ex:-하겠다)

T_PLUPERFECT: 대과거 시제


$formal: 격식 여부를 설정합니다.

F_FORMAL: 격식체 ($mode가 M_NOMINAL일 경우 '~함' 명사형)

F_INFORMAL: 비격식체 ($mode가 M_NOMINAL일 경우 '~하기' 명사형)


$high: 높임말 여부를 설정합니다.

H_HIGH: 높임말

H_LOW: 반말


$mode가 M_IMPERATIVE(명령형)이나 M_PROPOSITIVE(청유형)일 경우 시제는 T_PRESENT(현재)만 사용할 수 있습니다.

$mode가 M_NOMINAL(명사형)일 경우 T_FUTURET_PLUPERFECT를 사용할 수 없습니다.

$mode가 M_ADJECTIVAL(관형사형)일 경우 T_CONDITIONAL와 T_PLUPERFECT를 사용할 수 없습니다.


setContraction($contraction = true)

* 모음 축약여부를 다시 설정합니다.

$contraction: 축약 사용 여부


아래는 KConjugator로 '되다'를 활용해본 결과입니다.

baseㄷㅚ
base2ㄷㅚ
base3ㄷㅚ
D0IL ㄷㅚ.ㅓ
D0IH ㄷㅚ.ㅓ요 돼요
D0FL ㄷㅚ.ㄴ다 된다
D0FH ㄷㅚ.ㅂ니다 됩니다
D1IL ㄷㅚ.ㅓㅆ.어 됐어
D1IH ㄷㅚ.ㅓㅆ.어요 됐어요
D1FL ㄷㅚ.ㅓㅆ.다 됐다
D1FH ㄷㅚ.ㅓㅆ.습니다 됐습니다
D2IL ㄷㅚ.ㄹ 것ㅣ.야 될 것이야
D2IH ㄷㅚ.ㄹ 것ㅣ.야요 될 것이에요
D2FL ㄷㅚ.ㄹ 것ㅣ.다 될 것이다
D2FH ㄷㅚ.ㄹ 것ㅣ.ㅂ니다 될 것입니다
D3IL ㄷㅚ겠.어 되겠어
D3IH ㄷㅚ겠.어요 되겠어요
D3FL ㄷㅚ겠.다 되겠다
D3FH ㄷㅚ겠.습니다 되겠습니다
Q0IL ㄷㅚ.ㅓ? 돼?
Q0IH ㄷㅚ.ㅓ요? 돼요?
Q0FL ㄷㅚ.니? 되니?
Q0FH ㄷㅚ.ㅂ니까? 됩니까?
Q1IL ㄷㅚ.ㅓㅆ.어? 됐어?
Q1IH ㄷㅚ.ㅓㅆ.어요? 됐어요?
Q1FL ㄷㅚ.ㅓㅆ.니? 됐니?
Q1FH ㄷㅚ.ㅓㅆ.습니까? 됐습니까?
Q2IL ㄷㅚ.ㄹ 것ㅣ.야? 될 것이야?
Q2IH ㄷㅚ.ㄹ 것ㅣ.야요? 될 것이에요?
Q2FL ㄷㅚ.ㄹ 것ㅣ.니? 될 것이니?
Q2FH ㄷㅚ.ㄹ 것ㅣ.ㅂ니까? 될 것입니까?
Q3IL ㄷㅚ겠.어? 되겠어?
Q3IH ㄷㅚ겠.어요? 되겠어요?
Q3FL ㄷㅚ겠.니? 되겠니?
Q3FH ㄷㅚ겠.습니까? 되겠습니까?
I0IL ㄷㅚ.ㅓ
I0IH ㄷㅚ.세요 되세요
I0FL ㄷㅚ.ㅓ라 돼라
I0FH ㄷㅚ.십시오 되십시오
P0IL ㄷㅚ.ㅓ
P0IH ㄷㅚ.ㅓ요 돼요
P0FL ㄷㅚ자 되자
P0FH ㄷㅚ.ㅂ시다 됩시다
N0I ㄷㅚ.ㅁ
N0F ㄷㅚ.기 되기
N1I ㄷㅚ.ㅓㅆ.음 됐음
N1F ㄷㅚ.ㅓㅆ.기 됐기
N3I ㄷㅚ겠.음 되겠음
N3F ㄷㅚ겠.기 되겠기
A0 ㄷㅚ.는 되는
A1 ㄷㅚ.ㄴ
A2 ㄷㅚ.ㄹ




하지만 이걸로도 부족하다는게 함정...(으아 망할 교착어!) 더 다양한 활용형 처리가 필요하면 그때가서 늘려야겠습니다..


관련글 더보기

댓글 영역