설치
pip install git+https://github.com/ssut/py-hanspell.git
테스트 코드 수행
from hanspell import spell_checker
# 맞춤법 검사할 텍스트를 입력하세용
text = "안녕 하세요. 만나서 반갑 습니다."
try:
# 맞춤법 검사 수행하는 메소드
result = spell_checker.check(text)
print("Checked Text:", result.checked) # 수정된 텍스트
print("Original Text:", result.original) # 원본 텍스트
print("Errors Found:", result.errors) # 발견된 오류 수
print("Corrections:", result.words) # 각 단어의 교정 결과
except Exception as e:
print("Error occurred:", e)
이런! result가 없는 에러 발생..
문제 파악
- 라이브러리를 뜯어서 어느 URL로 요청하는지 파악 ( Lib/site-packages/hanspell/constants.py )
- 요청 URL을 접속해보자.
- 엥? 갑자기 키를 찾는다?? 바로 네이버 맞춤법 검사기로 이동해보자.
- 이렇게 맞춤법검사기를 들어가서, F12 -> Network 탭을 누른 후, 아무 텍스트나 입력하고 검사하기를 눌러본다.
- 그럼 이렇게 확인할 수 있다. url을 보니 passportKey와 _callback이 더 있다.. callback은 아마 naver측에서 붙이는 것이므로 잠시 재껴두고 passportKey에 집중해보자. 결국, url을 요청할 떄, 저 key를 넣어주어야 한다는 것이다.
url = "https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=네이버+맞춤법+검사기"
res = requests.get(url)
html_text = res.text
match = re.search(r'passportKey=([^&"}]+)', html_text)
if match:
passport_key = match.group(1)
print(passport_key)
return passport_key
else:
return False
간단하게 코드를 작성해보고 찍어보면..
- 이제 해당 passport_key를 url 요청할 때 같이 넘겨주어야 한다. 아까 라이브러리 끄쩍이던 폴더에 들어가서 spell_checker.py를 들어간다.
- 이렇게 인자로 passportKey를 추가로 받도록 수정한다. ( 원래는 text만 받습니다 )
- 아래쪽에 payload에 passportKey를 같이 보내도록 코드를 수정한다.
- 그리고 check를 보낼 때, passportKey를 같이 보내도록 코드를 수정하고 요청해보면..!!!!
from hanspell import spell_checker
# 맞춤법 검사할 텍스트를 입력하세용
text = "안녕 하세요. 만나서 반갑 습니다."
try:
passportKey = get_passport_key()
# 맞춤법 검사 수행하는 메소드
result = spell_checker.check(text, passportKey)
print("Checked Text:", result.checked) # 수정된 텍스트
print("Original Text:", result.original) # 원본 텍스트
print("Errors Found:", result.errors) # 발견된 오류 수
print("Corrections:", result.words) # 각 단어의 교정 결과
except Exception as e:
print("Error occurred:", e)
또! 문제 발생
- 위의 과정을 거치고 나니,
- 이러한 에러가 생겼다. 이는 json.loads에서 주로 생기는 에러라고 한다.
Library 수정-2
- 코드를 찾아보니 이녀석이 하나 있다.
- 단순히 json.loads의 에러인지, 아니면 맞춤법 검사 요청 자체가 실패한건지 확인하기 위해 r.text의 값을 찍어보면..
- 값은 잘 넘어오고있는 것을 확인할 수 있다.
- 형태를 보아 콜백함수로 감쌓여 있는 형태인, JSONP이다. 아마 형태가 달라서 에러가 나는 듯 하다.
해결
- JSONP형태를 정규화를 통해 해제하고 넘겨보면..!!
- 이렇게 정상적으로 작동되는 모습을 확인할 수 있다.
참고 사이트
https://github.com/ssut/py-hanspell/issues/41
py-hanspell spell_checker.check 사용 시 KeyError: 'result' · Issue #41 · ssut/py-hanspell
안녕하세요. chec = spell_checker.check() 사용 시 KeyError: 'result'가 반환됩니다. hanspell\spell_checker.py 내 line 62 에서 html = data['message']['result']['html'] 부분 중 ['result'] 부분에서 keyerror가 발생한 것 같습니다.
github.com
https://github.com/ssut/py-hanspell/issues/48
KeyError: Result 에러 해결 방법을 좀 더 간편하게 수정해 보았습니다. · Issue #48 · ssut/py-hanspell
초기에는 issue #47 해결방법을 적용하신 뒤 이후 매일 변경되는 passportKey에 대해서 아래와 같이 코드를 사용하면 번거롭게 매번 passportKey를 수동으로 변경하지 않으셔도 될 것 같아 공유드립니다.
github.com
'Python' 카테고리의 다른 글
[ Python ] TextBlob을 이용한 영어 형태소 분석 해보기 (1) | 2025.02.09 |
---|---|
[ Python ] 일본어 형태소 분석기 MeCab을 설치해보자 (0) | 2025.02.09 |
[Python] CharacterTextSplitter의 chunk_size와 chunk_overlap의 동작 과정 (1) | 2024.12.15 |
[ Python ] PyTorch Error : shm.dll not found (0) | 2024.05.20 |
Python에서 GPT API를 사용해보자 - 1 (0) | 2024.05.16 |