
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폴더 경로를 찾고 있는데, 이 부분이 잘못된 것 같다.
import nltk 를 한 후, nltk.download('punkt') 를 하라고 하였다.⇒ 해결 X 여전히 같은 문제 발생함
C:\Users\SSAFY\AppData\Roaming\nltk_data\tokenizers 해당 경로에 punkt_tab이 있는지 확인하라고 하였다. 그런데 punkt밖에 없는 상황이었다.import nltk 를 한 후, nltk.download('punkt_tab') 를 해보면 어떨까? 결과는, 다운로드가 잘 됐다.punkt_tab 경로가 꼬인 문제도 아니었고, 찾을 수 없는 경로를 하나하나 수동으로 만드는 것도 해결방법이라 볼 수 없었다.
내 감대로 해보니 바로 해결이 되었다.
GPT는 간단 노가다를 시킬 때만 좋다는 것을 알면서도, 이 문제에 대해 구글링해도 나오는 명확한 해결법이 없어서 많이 헤맸다….. 결국 GPT의 도움을 받은 결과는 시간낭비한 것으로 이어진 듯 하지만,
“GPT에 의존하지 말고 에러메세지 그대로 읽고 해결하면 된다”는 메세지를 기록하는 것으로 도움이 되면 좋겠다.
RAKE는 Rapid Automatic Keyword Extraction의 약자.
텍스트에서 핵심 키워드나 구절을 뽑아내는 알고리즘.
지도학습도 아니고 복잡한 모델도 아니고, 그냥 규칙 기반.
작동 방식은 이렇다.
별다른 전처리 없이도 쓸 수 있고, 빠르고 직관적이라 자주 쓰인다.
단점은 문맥을 고려하지 못한다는 점. 의미 파악까진 못함.
rake_nltk는 위 RAKE 알고리즘을 Python으로 구현한 라이브러리.
핵심은 NLTK 기반이라는 것.
불용어 처리, 토크나이징 등을 NLTK에 의존한다.
즉, rake_nltk만 설치한다고 해서 바로 돌아가지 않는다.
nltk도 같이 있어야 함.
그리고 nltk.download()로 필요한 리소스도 직접 내려받아야 한다.
예: stopwords. 다운로드 반드시 할 것.
Natural Language Toolkit.
파이썬에서 자연어 처리를 할 수 있게 도와주는 라이브러리.
오래됐고, 꽤 방대한 기능을 제공한다.
할 수 있는 일은 많다.
rake_nltk는 이 중 불용어랑 토크나이저만 빌려 쓰는 거고,
그 외에도 NLP 전반에 사용할 수 있는 도구 모음.
rake는 개념. 알고리즘 자체.
rake_nltk는 그걸 파이썬에서 쓸 수 있게 만든 라이브러리.
nltk는 자연어 처리 기능 제공하는 기반 라이브러리.
rake_nltk는 nltk에 의존하고 있기 때문에 둘 다 설치해야 제대로 돌아감.
nltk 리소스도 반드시 다운로드할 것.
| 항목 | 설명 |
|---|---|
punkt | nltk 공식 문장 분리 모델. english.pickle 같은 파일이 이 경로에 저장된다. |
punkt_tab | 존재하지 않는 잘못된 경로. punkt 경로를 잘못 해석하거나 참조해서 생긴 것으로 보인다. |
다음 중 하나일 가능성이 높다:
punkt 모델이 제대로 설치되지 않았거나 손상된 경우nltk.data.path)나 경로 설정이 꼬인 경우rake_nltk 또는 nltk 내부에서 경로 처리 로직이 꼬인 경우GPT가 이렇게 알려줬지만, 결론부터 말하자면 경로문제가 아니었다..
두 폴더는 다른 역할을 하고, punkt만으로 필요한 기능을 사용할 수 없으면 punkt_tab도 다운로드하여 사용하는 것이다.