python : RAKE 라이브러리 사용 문제(해결) With NLTK

Aurora·2025년 3월 26일
1

keyWord_modelTest

목록 보기
4/4
post-thumbnail

📜 목차

문제 1. RAKE 라이브러리를 사용한 flask사용 중 에러

error내용

FileNotFoundError: No such file or directory: 
'...nltk_data/tokenizers/punkt_tab/english/ortho_context.tab'

원인 분석

뭘 못 찾고 있다고 뜬다.
어라, 이상하다. python -m pip install rake_nltk 만 하면 되는 문제가 아니었나?

아니다. nltk를 내부적으로 사용하는데, 자동으로 함께 설치하지 않기 때문에 nltk도 함께 설치해줘야 한다고 한다.

그래서 rake를 사용하기 위해서는 rake_nltk와 nltk를 함께 설치하는 것이 일반적이라고 한다.

어라, 또 이상하다. python -m pip install nltk 를 해도 여전히 같은 문제가 있다.

RAKE는 내부적으로 nltk.sent_tokenize()를 사용하는데, 이 함수는 punkt tokenizer모델이 설치되어 있어야 작동한다고 한다.

그런데 에러메세지를 보면 punkt_tab폴더 경로를 찾고 있는데, 이 부분이 잘못된 것 같다.


해결과정

GPT가 알려준 해결 방법

  1. 터미널창에서 import nltk 를 한 후, nltk.download('punkt') 를 하라고 하였다.
    이렇게 punkt를 다운로드하면 된다고 한다.

⇒ 해결 X 여전히 같은 문제 발생함

  1. 그럼 C:\Users\SSAFY\AppData\Roaming\nltk_data\tokenizers 해당 경로에 punkt_tab이 있는지 확인하라고 하였다. 그런데 punkt밖에 없는 상황이었다.
    그랬더니 punkt_tab폴더를 만들고 그 안에 필요한 파일을 하나하나 만들라고 하였다.
    ⇒ 만들라는 파일 직접 하나하나 다 만들었는데 해결X
  2. punkt_tab폴더를 만들고, 그 안에 english폴더를 만들고, 그 안에 만들라는 파일 하나하나 다 만들었는데, 아무리 생각해도 이상하다 싶었다. 빈 파일로 둘 거면서 왜 이 파일들을 만들어야 하는지 알아보니,
    이 각각의 파일들은 라이브러리 실행 중 사용될 사전들이라 한다. 그럼 빈파일은 의미가 없다.
    그리고 이거를 하나하나 수동으로 만드는 것도 말이 안 된다는 생각이 들었다.
  3. 이 외에도 패키지 재설치, 폴더 재생성 등 같은 것을 계속 다운로드하는 노가다가 반복되다가 GPT를 던지고 나만의 해결 방법을 찾았다.

나만의 해결 방법

  1. 현재 상황은 punkt를 다운로드하여 punkt가 있지만, 정작 찾고 있는 건 punkt_tab이고, 이 폴더가 없어 수동으로 만들고 있던 상황.
    → punkt_tab경로를 찾고 있으니 터미널창에서 import nltk 를 한 후, nltk.download('punkt_tab') 를 해보면 어떨까? 결과는, 다운로드가 잘 됐다.
    ⇒ 이제 라이브러리를 사용하여 flask서버를 실행시켜 사용해봤다. 바로 해결이 됐다!

Q : 해당 라이브러리가 설치된 경로에서 punkt폴더명을 punkt_tab으로 바꾸면 되는 것 아니었을까? -> 결론은, 이 두 폴더를 다 다운로드해서 비교해보니, 내용물이 크게 달랐다. 따라서, 단순 폴더명만 바꾼다고 해결되는 것이 아니다.

결론

punkt_tab 경로가 꼬인 문제도 아니었고, 찾을 수 없는 경로를 하나하나 수동으로 만드는 것도 해결방법이라 볼 수 없었다.

내 감대로 해보니 바로 해결이 되었다.

GPT는 간단 노가다를 시킬 때만 좋다는 것을 알면서도, 이 문제에 대해 구글링해도 나오는 명확한 해결법이 없어서 많이 헤맸다….. 결국 GPT의 도움을 받은 결과는 시간낭비한 것으로 이어진 듯 하지만,

GPT에 의존하지 말고 에러메세지 그대로 읽고 해결하면 된다”는 메세지를 기록하는 것으로 도움이 되면 좋겠다.

참고

RAKE? rake_nltk? NLTK?

RAKE

RAKE는 Rapid Automatic Keyword Extraction의 약자.

텍스트에서 핵심 키워드나 구절을 뽑아내는 알고리즘.

지도학습도 아니고 복잡한 모델도 아니고, 그냥 규칙 기반.

작동 방식은 이렇다.

  1. 문장을 구두점 기준으로 나눈다.
  2. 불용어(stopwords)를 기준으로 키워드 후보를 만든다.
  3. 후보 키워드들에 점수를 매긴다 (빈도 + 함께 등장한 정도).
  4. 점수 높은 애들을 중요한 키워드라고 본다.

별다른 전처리 없이도 쓸 수 있고, 빠르고 직관적이라 자주 쓰인다.

단점은 문맥을 고려하지 못한다는 점. 의미 파악까진 못함.


rake_nltk

rake_nltk는 위 RAKE 알고리즘을 Python으로 구현한 라이브러리.

핵심은 NLTK 기반이라는 것.

불용어 처리, 토크나이징 등을 NLTK에 의존한다.

즉, rake_nltk만 설치한다고 해서 바로 돌아가지 않는다.

nltk도 같이 있어야 함.

그리고 nltk.download()로 필요한 리소스도 직접 내려받아야 한다.

예: stopwords. 다운로드 반드시 할 것.


NLTK

Natural Language Toolkit.

파이썬에서 자연어 처리를 할 수 있게 도와주는 라이브러리.

오래됐고, 꽤 방대한 기능을 제공한다.

할 수 있는 일은 많다.

  • 단어/문장 분리 (토큰화)
  • 불용어 제거
  • 품사 태깅
  • 어간 추출, 표제어 추출 등

rake_nltk는 이 중 불용어랑 토크나이저만 빌려 쓰는 거고,

그 외에도 NLP 전반에 사용할 수 있는 도구 모음.


결론

rake는 개념. 알고리즘 자체.

rake_nltk는 그걸 파이썬에서 쓸 수 있게 만든 라이브러리.

nltk는 자연어 처리 기능 제공하는 기반 라이브러리.

rake_nltk는 nltk에 의존하고 있기 때문에 둘 다 설치해야 제대로 돌아감.

nltk 리소스도 반드시 다운로드할 것.

punkt모델을 사용하기 때문에 punkt경로를 찾아야 하는데, 왜 punkt_tab경로를 찾나?

두 경로의 차이

항목설명
punktnltk 공식 문장 분리 모델. english.pickle 같은 파일이 이 경로에 저장된다.
punkt_tab존재하지 않는 잘못된 경로. punkt 경로를 잘못 해석하거나 참조해서 생긴 것으로 보인다.

경로가 왜 꼬였을까?

다음 중 하나일 가능성이 높다:

  1. punkt 모델이 제대로 설치되지 않았거나 손상된 경우
  2. 사용자 환경 변수(nltk.data.path)나 경로 설정이 꼬인 경우
  3. rake_nltk 또는 nltk 내부에서 경로 처리 로직이 꼬인 경우
  4. 기존에 punkt 모델을 커스텀하거나, 관련 코드를 오버라이드한 적이 있는 경우

GPT가 이렇게 알려줬지만, 결론부터 말하자면 경로문제가 아니었다..
두 폴더는 다른 역할을 하고, punkt만으로 필요한 기능을 사용할 수 없으면 punkt_tab도 다운로드하여 사용하는 것이다.

profile
개발에 애정을 쏟는 연구자입니다

0개의 댓글