2. 소개
● 1995년 이후 리눅스 유저
● SW 프로젝트 재미를 들여 여러 가지 참여
● Debian developer - 한국어 관련 패키지
● GNOME 한국어 번역 coordinator
● Embedded software engineer for media &
broadcasting devices
3. 목표: F/OSS 환경의 맞춤법 검사
● 2008년 부터 시작
● 아직 많이 부족한 상태 (뒤에)
● 사람들의 반응
● 칭찬 AND/OR 고정관념과 오해
● 이 발표를 통해 이해하는 시간을
4. 흔한 오해: 오픈소스 맞춤법 검사
● 오해: 어렵고 복잡한 것이니 오픈소스는 별
로 안 좋을 것이다?
● 진실: 맞춤법 검사는 오래전부터 널리 알려
져 있고 오픈소스 맞춤법 검사는 항상 독점
소프트웨어의 검사보다 더 뛰어났다.
● 적어도 유럽 주요 언어에 대해서는.
7. GNU aspell
● GNU version
● 아직도 릴리스되지만 사용 거의 없어짐
● 8비트 내부 구조 고집
● Manual A.2 “Notes on 8-bit characters”
● Manual B.2.4 “Unsupported” / “Hangul”
8. myspell
● ispell 기반
● OpenOffice.org를 위해 작성 - 더 나은 연
동
● 복잡한 규칙 가능 - 더 복잡한 언어 지원 가
능
● 여전히 8비트
9. hunspell
●
László Németh, 헝가리어를 위해 myspell 개선
●
GPL/LGPL/MPL tri-license relicensing
●
Mozilla Firefox & LibreOffice
●
내부 유니코드 사용
●
8비트 인코딩에 없는 헝가리어 부호
●
Man 4 hunspell / Character Encoding
●
어떤 다른 맞춤법 프로그램보다 더 널리 이용됨
●
Mozilla, LibreOffice, Charome, Mac OS X
10. 흔한 오해 - 모국어
● 오해: 한국어는 어렵고 특이한 언어이므로,
전통적인 맞춤법 검사 방식으로 동작하지 않
을 것이다.
● 진실: 한국어는 인류가 쓰는 다른 언어에 비
해 별로 특이하지 않다.
● 아마도 국어 시험의 트라우마?
11. 맞춤법 검사의 범위
● 단어 단위 맞춤법 검사 – 형태론 (morphology)
● 단일한 단어에만 적용
● 주로 white listing - 가능한 단어가 무엇인지 데이터에 저
장
● 띄어쓰기가 없는 언어에서는 별도 처리 필요 (kakasi)
● 문법 검사 - 통사론 (syntax)
● 문장의 전체/일부에 적용
● 주로 black listing - 많이 틀리는 오류 패턴
12. 맞춤법 검사가 하는 일
● 주어진 단어가 올바른 단어인지 판단
● 가능한 단어의 목록을 만든다
● 가능한 단어의 파생 형태 규칙을 기술한다
● 틀린 단어이면 가능성 높은 올바른 단어를
제시
14. 맞는 단어를 찾는 기준
Q: 무엇이 가능성 높은 올바른 단어?
A: 최소한의 “편집”을 통해 만들 수 있는 단
어.
편집 거리 (edit distance, Levenshtein
distance): A, B 두 개의 단어가 있을 때 단
어 A에 몇 번의 최소한의 편집으로 단어 B를
만들 수 있는가.
21. 모아쓰기 & 풀어쓰기 (계속)
● Hunspell 1.1.x – 인코딩 변환 필터 프로그
램으로 테스트
● Hunspell 1.2 or later – ICONV/OCONV
ICONV 가 ㄱㅏ
ICONV 각 ㄱㅏㄱ
...
OCONV ㄱㅏ 가
OCONV ㄱㅏㄱ 각
...
22. 모아쓰기 & 풀어쓰기 (계속)
● 문제점 - 종성은 초성을 다시 쓰라고 가르쳐
주셨지만 유니코드는..
● 예: ㅎㅏㅂㅣㄴㄷㅏ / ㅎㅏㅂㄴㅣㄷㅏ
● 초성/종성이 같으면 검사가 용이하지만 변환
구현 어려움
● 다르면 불필요한 편집 거리 증가 (현재 상태)
23. 모아쓰기 & 풀어쓰기 (계속)
● 복자음/복모음 분해?
● 예: ㅇㅂㅓㅅㅇㅓ / ㅇㅓㅂㅅㅇㅓ
● 역시 분해하면 검사가 용이하지만 변환 구현
어려움
● 다르면 불필요한 편집 거리 증가 (현재 상태)
24. 모아쓰기 & 풀어쓰기 (계속)
● hunspell의 수정 / 기능 추가 필요
● 현재 상태 - 케이스별로만 대응.
REP ㅂㅣㄴ ㅂㄴㅣ
REP ㅇㅂㅓㅅ ㅇㅓㅄ
25. 파생형 구현
● hunspell의 suffix 규칙
$ cat test.dic
1
가다/A
$ cat test.aff
SFX A Y 1
SFX A 다 시다 .
$ hunspell -d test
Hunspell 1.3.2
가다
*
가시다
+ 가다
26. 파생형 구현 (계속)
●
조사는 명사에 그냥 추가
●
한국어는 교착어 (Agglunative language)
●
안녕하세요 : 안녕하다 + 높임 선어말 어미 -시-
+ 종결 어미 -요
●
용언의 가능한 파생형이 너무 많다.
●
이론상 무한 (있었음이었음이었음이었음...)
●
hunspell에서는 2단계 규칙으로만 정의 가능
하므로 개별 규칙으로 정의 못함
●
가다 → 가시다 → 가셨다 → 가셨고 (x) ???
27. 파생형 구현 (계속)
● 선어말 어미 + 어말 어미 조합을 미리 “빌드
”
● Python 코딩이 필요한 맞춤법 사전 탄생
● 용언은 보통 수천가지
SFX A 다 시다 .
SFX A 다 셨다 .
SFX A 다 셨고 .
SFX A 다 셨으
며 .
...
28. 파생형 구현 (계속)
● 정의하기 힘든 어미 조합 있음.
● 공손 선어말 어미
● 가옵시고(o), 가시옵고(o), 가시옵시고(x)
● 문제점 - 가능한 조합이 단어 수 만큼 많다.
빌드 및 런타임 속도 저하의 주범.
● 빌드 방법 최적화 필요. 가능하면 hunspell 수
정.
31. 합성어 처리
● 명사 + 명사, 명사 + 접사, 접사 + 명사
● 유리지갑, 가죽지갑, ~式, ~用
● 기준이 그 단어가 의미가 있는지이기 때문에
구현 쉽지 않음
● 다른 맞춤법 검사도 기준이 가지각색
● 광범위한 허용 vs 소극적 허용
● 현재 구현되지 않음
32. 그 밖의 이슈
●
명확하지 않은 표준
●
1988년 표준어 개정안
●
초중고 국어 교육 과정
●
국립국어원 사전
●
예: 거라/너라 불규칙
●
표준어 규정: 가다/오다 동사에 대해 불규칙
●
7차 교육 과정: 가다/오다 및 추가 동사에 대해 가능한
어미
●
실생활: 가라! 와라! 이거 좀 하거라!
33. 그 밖의 이슈 (계속)
● Hunspell 버전 별로 구현 한계
● 특정 규칙에서 버그
● 예: 오천백일만 팔천사백육십팔 (1.2.14 필요)
● Mac OS X는 아직 1.2.8
34. 단어 데이터 편집
● http://galkwi.appspot.com/
● 온라인 단어 + 품사 + 속성 등 입력, 간단한 리
뷰
● 정기적으로 릴리스에 통합
● 웹 잘 몰라요
● 구글 앱 엔진 나빠요 - 개편 예정
35. 결론
● 사실 별 것 아니다. 국어 시험 트라우마 극
복
● hunspell 및 맞춤법 SW 개선이 필요.