python을 이용한 한글 교정
symspell이라는 알고리즘을 이용하여 한글 교정
lib 변천사는 symspell(C#) → symspellpy → symspellpy-ko
symspellpy-ko를 만들어주신 김희규 저자님께 감사합니다
*repository
- symspell : https://github.com/wolfgarbe/SymSpell
- symspellpy : https://github.com/mammothb/symspellpy
- symspellpy-ko : https://github.com/HeegyuKim/symspellpy-ko
1️⃣ symspell 알고리즘이 먼가??
사전에 apple과 apply가 있다면 이들의 편집거리가 1인 deletions는 appl, pply, …
2인 deletions는 app, ppl, … (편집거리는 설정값)
이런 것을 생성하여 해시 테이블과 같은 빠른 자료 구조로 사전 재구축
입력된 문자도 deletions을 수행하여 사전에 동일한 값이 있는지 체크
결과는 편집 거리가 짧은 순으로 추천
즉, 사전에 등록된 단어(word) and 입력된 단어에서 문자(char)를 지워가면서 편집거리가 가까운 단어일수록 replace 될 수 있다고 판단함
2️⃣ symspellpy-ko 는 머지??
간단하게 symspell 알고리즘을 말했지만 symspell은 한글과 같은 조합형 문자에는 잘 맞지 않는다
예를 들어 입력된 문자가 안뇽이라면 편집거리가 1인 문자는 안심, 안녕이 될 수 있다
하지만 이를 음소분해한다면 “ㅇㅏㄴㄴㅛㅇ”이 될것이고 안심이라는 글자가 편집거리가 1이 될수 없기에 좀 더 정확하게 교정이 가능하다
symspellpy-ko는 이런 음소분해를 지원하다록 수정된 버전
*참고 : https://heegyukim.medium.com/symspell%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%ED%95%9C%EA%B8%80-%EB%A7%9E%EC%B6%A4%EB%B2%95-%EA%B5%90%EC%A0%95-3def9ca00805
🏄♂️ 테스트 결과
https://colab.research.google.com/drive/1guU_doSHuW3-SAJ7xA4J5K4RNb0QsAMz#scrollTo=YOm8aYHj2WWG