한국어 동사 어근으로부터 동사 변화를 구해내는 프로그램입니다. 원래는 살아있는 라틴어 사이트에 포함된 사전에 이용하려고 (라틴어 동사 변화 밑에 한국어 뜻을 달고자) PHP로 된 Korean Verb Conjugate 코드를 찾아봤는데 쓸만한게 없더라구요. 그래서 어제밤부터 뚝딱뚝딱해서 후딱 개발해버렸습니다. 아래는 '되다'를 가지고 테스트해본 결과입니다. 각종 불규칙 동사를 넣어 테스트해봤는데, 만족할 만한 결과가 나와서 바로 라틴어 사전에 적용하기로 결정하고 그냥 만든김에 소스코드까지 공개 해버리기로 했습니다. BSD라이센스로 배포하니 원작자만 밝히시면 자유롭게 사용/수정하셔도 됩니다.
제작하는데 혹시 도움이 될까해서 Dan Bravender라는 사람이 제작한 https://github.com/dbravender/korean_conjugation를 참고해봤는데, 외국인이 만들어서 그런지 쉬운 규칙을 어렵게 쪼개서 코드로 작성했다는 느낌이 들어서 그냥 한국인의 직관을 가지고 새로 짰습니다.
Dan Bravender의 코드대로라면 "보이다"의 평서문 현재 비격식 낮춤형이 "보이야"가 되는 등의 버그가 있는데 ('보이다'를 보 이다(서술격 조사)로 해석하는 듯합니다) 그런 소소한 문제 역시 처리했습니다.
그리고 명사형 활용, 관형사형 활용을 현재, 과거, 미래시제 모두로 변화 가능하고, 의문형 미래시제도 가능합니다. (그리고 학교문법에서는 인정하지 않지만, 라틴어 사전용으로 개발했기에 '대과거' 시제도 넣었습니다. 예를 들어 '갔었다' 이런 변화도 가능하다는 거죠.)
압축 파일 안에 KConjugator.php 와 KConjugatorTest.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_FUTURE와 T_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 | ㄷㅚ.ㄹ | 될 |
하지만 이걸로도 부족하다는게 함정...(으아 망할 교착어!) 더 다양한 활용형 처리가 필요하면 그때가서 늘려야겠습니다..
Bigram을 이용한 검색어 정정기능 개선 (PHP, MySQL) (0) | 2015.07.18 |
---|---|
Bigram을 이용한 오타 검색어 정정, 검색어 제안 기능 (PHP, MySQL) (3) | 2015.07.11 |
문헌 클러스터링 기술을 이용한 유의어 분류(PHP, MySQL) (0) | 2015.05.03 |
좋아요b 페북검정시험 (1) | 2014.04.15 |
페이스북 연동 웹어플리케이션 만들때 주의사항 좋아요b (2) | 2014.03.23 |
JSP로 페이스북과 연동하기! (2) | 2013.12.09 |
댓글 영역