ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Error py-hanspell KeyError 에러 코드와 해결 방법
    DEV/python 2023. 12. 20. 10:29
     

    사용자 환경 : M1 Mac

     

    에러가 발생한 설치 패키지

    pip install git+https://github.com/ssut/py-hanspell.git
    

     

     

    에러코드  : 

    ---------------------------------------------------------------------------
    KeyError                                  Traceback (most recent call last)
    Cell In[1], line 4
          1 from hanspell import spell_checker
          3 sent = "맞춤법 틀리면 외 않되? 쓰고싶은대로쓰면돼지 "
    ----> 4 spelled_sent = spell_checker.check(sent)
          6 hanspell_sent = spelled_sent.checked
          7 print(hanspell_sent)
    
    File ~/anaconda3/envs/dev-sample/lib/python3.10/site-packages/hanspell/spell_checker.py:62, in check(text)
         59 passed_time = time.time() - start_time
         61 data = json.loads(r.text)
    ---> 62 html = data['message']['result']['html']
         63 result = {
         64     'result': True,
         65     'original': text,
       (...)
         69     'words': OrderedDict(),
         70 }
         72 # 띄어쓰기로 구분하기 위해 태그는 일단 보기 쉽게 바꿔둠.
         73 # ElementTree의 iter()를 써서 더 좋게 할 수 있는 방법이 있지만
         74 # 이 짧은 코드에 굳이 그렇게 할 필요성이 없으므로 일단 문자열을 치환하는 방법으로 작성.
    
    KeyError: 'result'

     

     

    해결방법 1

    2023/12/20 기준 내가 수정한 코드로 실행해 본 결과 실행이 잘 되는 것을 확인하였다.

     

    기존 py-hansepll을 제거하고 새로 받아보도록 하자.

    // 기존 py-hanspell(hanspell) 제거
    pip uninstall py-hanspell
    
    // 수정된 코드 다운로드
    pip install git+https://github.com/Seokhyeon-Park/hanspell.git

     

    jupyter notebook을 사용한다던가 터미널에서 진행 중이라면 종료 후 재실행하고 확인하자.

     

    만약 위 코드가 막혔다면 직접 수정하는 방법이 존재한다.

    (뭔가 주기적으로 막을 것 같은 느낌, 해결방법 2를 참고하자)

     

    물론 해당 방법도 2023/12/20일 기준임을 참고하자.

     

     

    해결방법 2

     

    우선 오리지널 코드 기준으로 수정하는 방법을 설명한다.

     

    물론 위 수정된 코드에서 수정해도 된다.

    (아마 pip에서 오리지널 패키지로 찾으려면 "py-hanspell", 수정한 패키지는 "hanspell"로 검색될 것이다. 혼동하지 말자.)

     

    우선 네이버 맞춤법검사기를 들어가서 개발자 도구를 켜준다.

     

    개발자 도구는 웹 사이트에서 [우클릭] -> [검사] 혹은 [F12]를 누르면 된다.

    (맞춤법 검사기 : https://search.naver.com/search.naver?where=nexearch&sm=top_sug.pre&fbm=1&acr=1&acq=%EB%A7%9E%EC%B6%A4&qdt=0&ie=utf8&query=%EB%A7%9E%EC%B6%A4%EB%B2%95%EA%B2%80%EC%82%AC%EA%B8%B0)

     

     

    그 다음 아무 값이나 입력 후 검사하기를 누른다.

     

    기존 코드에서는 message -> result -> html을 찾아서 사용했다.

     

    오브젝트 내의 html이 notag_html로 변경된 듯 보인다.

     

    해당 Payload를 뜯어보자

     

     

    여기서 _callback을 빼고 패키지에 모두 옮겨주면 된다.

     

    패키지 경로는 하단 명령어로 확인 가능하다.

    pip show hanspell
    // 또는 pip show py-hanspell

     

     

    해당 경로에서 패키지 폴더로 들어가서 "spell_checker.py"를 열어서 코드를 수정하자.

     

    spell_checker.py 코드수정 1

    // 코드 중간 payload 부분을 본인이 "확인한" 값으로 수정하자.
    // 하단 값은 2023/12/20일 내가 직접 브라우저에서 확인한 값으로 예시 코드이다.
    payload = {
        'passportKey': 'c384b2ff8b3456f9338af70b63f1e611131353bf',
        'where': 'nexearch',
        'color_blindness': 0,
        '_': 1702974192406,
        'q': text
    }

     

    spell_checker.py 코드수정 2

    data = json.loads(r.text)
    
    // 코드 중간에 html = data['message']['result']['html'] 부분의 "html"을 "notag_html"로 변경하자
    // 만약 reponse 값이 달라졌다면 해당 값에 맞춰서 수정하면 될 것이다.
    html = data['message']['result']['notag_html']
    result = {
        'result': True,
        'original': text,
        'checked': _remove_tags(html),
        'errors': data['message']['result']['errata_count'],
        'time': passed_time,
        'words': OrderedDict(),
    }

    댓글

Designed by Tistory.