#!/bin/python3
# spellcheck
# textblob을 사용한 영어 단어 철자 교정
import sys
from textblob import TextBlob
length = len(sys.argv)
if length >= 2:
for i, arg in enumerate(sys.argv):
if i == 0: continue
string = arg.lower()
string = TextBlob(string)
print(string.correct(), end=" ")
print()
else:
while True:
try:
string = input("")
string = string.lower()
string = TextBlob(string)
print(string.correct())
except:
break
영문 챗봇 만드는 과정에서 단어 철자를 교정하는 게 좋을 것 같아서, 아래의 기사를 참고했습니다.
https://www.geeksforgeeks.org/spelling-checker-in-python/
pyspellchecker 는 기본적인 오류 단어를 잘 잡아내지 못했고,
textblob은 성능이 괜찮았습니다.
다만, 훈련 모델을 사용하는 jamspell이 제일 성능이 좋았습니다.
pyspellchecker
"becuase I am stuid" => "becuase I am stupid"
becuase를 because 로 교정하지 못함.
textblob은 대체로 교정을 잘하지만, 단어가 대문자일 경우, 엉뚱한 단어로 바꾸는 경우가 있기 때문에 소문자로 변환하고 교정 작업을 진행하는 게 좋습니다.
textblob:
"I am the begt spell cherken" => "i am the best spell checked"
cherken이 문맥상으로 보면 checker가 되어야 하는데, 철자는 옳지만 문법은 틀린 checked로 바꾸었습니다.
jamspell은 그중 성능이 제일 좋습니다. 데이터 파일도 별도로 설치해야 하니, 위의 링크 기사를 참고하세요.
아래 기사는 textblob의 성능을 테스트한 내용인데, 제가 테스트했을 때 jamspell은 이것보다 9개를 더 옳게 교정했습니다.
https://stackabuse.com/spelling-correction-in-python-with-textblob/
저는 이 뒤 파일을 각기 spellcheck 와 spellcheck2 파일로 만든 다음, 실행권한을 줘서 (chmod +x filename), '~/bin' 으로 옮겨줬습니다. 그 폴더는 실행패스에 걸려 있어서, 어디에서나 spellcheck를 입력해도 실행됩니다.
명령행에서 교정할 단어를 인자로 나열해도 되고, 표준입력으로 주어도 됩니다.
#!/bin/python3
# spellcheck2
# jamspell을 사용한 영어 단어 철자 교정
# textblob 보다 성능이 조금 더 좋은 듯..훈련모델이라 그런지...
# jamspell 설치법:
# apt-get install swig3.0 # for linux
# pip install jamspell
import sys
import jamspell
corrector = jamspell.TSpellCorrector()
corrector.LoadLangModel('/home/don/work/data/en.bin')
length = len(sys.argv)
if length >= 2:
for i, arg in enumerate(sys.argv):
if i == 0: continue
string = arg.lower()
string = corrector.FixFragment(string)
print(string, end=" ")
print()
else:
while True:
try:
string = input("")
string = string.lower()
string = corrector.FixFragment(string)
print(string)
except:
break