본문 바로가기
python

논문에 자주 등장하는 단어들로 단어장 만들기 (1) - python

by gosin 2024. 12. 28.

논문을 읽으면서 내 영어 실력이 매우 부족하다는 것을 깨달았다.

그래서 영어 공부가 필요한데, 우선 기본적으로 논문에 나오는 단어들은 알고있어야하지 않나.

논문에 자주 등장하는 단어들로 엮어놓은 단어장 없을까? 하며 찾아봤지만 역시 볼 만한 건 없었다.

그래서, 좀 짜치겠지만 파이썬으로 만들어본다.

1. 내가 관심있는 분야의 논문 pdf 여러 개를 하나의 폴더 내에 저장
2. python의 pdfplumber 라이브러리를 사용해 pdf의 text 부분 추출
3. 텍스트 전처리 
     - 소문자 변환, 구두점 제거
     - 토큰화
     - 불용어 제거 및 알파벳 필터링
4. 단어 빈도 계산, 단어 추출, word list 생성
5. Googletrans 라이브러리를 이용해 뜻을 한국어로 번역

 

1. 논문 저장하기

일단, 관심 있는 분야의 논문 여러 개를 하나의 폴더에 저장하자
나는 주로 컴퓨터 비전 분야에 관심이 있어서 주로 Object Detection 쪽 논문을 많이 다운 받았다. 
총 30개 정도 다운받았네요.

 

2. PDF의 Text 부분 추출

pdfplumber 라이브러리를 사용하면 pdf의 text 부분을 쉽게 추출할 수 있다.

import os
import pdfplumber

def extract_text(folder_path):
    pdf_files = [os.path.join(folder_path, file) for file in os.listdir(folder_path) if file.endswith('.pdf')]
    all_text = ""
    
    for pdf_file in pdf_files:
        with pdfplumber.open(pdf_file) as pdf:
            for page in pdf.pages:
                all_text += page.extract_text()  # 텍스트 추가
                
    return all_text

folder_path = r"PDF 저장해놓은 폴더 경로"
text = extract_text(folder_path)

print(text[:500])  # 결과 확인

 

3. 텍스트 전처리

import nltk
from nltk.corpus import stopwords
import string

# NLTK 불용어 다운로드
nltk.download()

nltk.data.path = [r"C:\Users\User\AppData\Roaming\nltk_data"]
def preprocess_text(text):
    # 소문자 변환, 구두점 제거
    text = text.lower().translate(str.maketrans("", "", string.punctuation))
    
    # 토큰화
    words = nltk.word_tokenize(text)
    
    # 불용어 제거, 알파벳 필터링
    stop_words = set(stopwords.words('english'))
    words = [word for word in words if word.isalpha() and word not in stop_words]
    
    return words

processed_words = preprocess_text(text)
print(processed_words[:30]) # 출력

nltk의 punkt와 stopwords를 다운로드 해야하는데
다운로드는 잘됐는데 인식을 못해서 lookuperror가 떠서
nltk.data.path로 경로를 직접 추가했더니 해결됐다.

아 그리고 나서 출력된 단어들 확인해보니까 1~2글자 쓸 데 없는 단어들이 많아서,

processed_words = [word for word in processed_words if len(word) > 3]

이렇게 4글자 이상인 단어들로만 구성되게 했다.

 

4. 단어 빈도 계산, 단어 추출, word list 생성

# 단어 빈도 계산
word_freq = Counter(processed_words)

word_list = word_freq.most_common(50)
print(word_list)

자 이제 Counter 라이브러리를 import 해주고 빈도 계산해주면 거의 끝이다.
word_freq = most_common(50) 여기서 50 부분에 자주 등장하는 단어 상위 몇개 넣을 건지 숫자 입력하면 된다.

 

import pandas as pd

def save_wordlist(word_list, output_file):
    df = pd.DataFrame(word_list, columns=["Word", "Frequency"])
    df.to_excel(output_file, index=False, engine='openpyxl')

save_wordlist(word_list, "ai_wordlist.xlsx")

그러고 엑셀로 저장해주면 일단 단어 리스트 생성은 끝이다.

음.. 만들어놓고보니 쓸모 있으려나 모르겠다..

그 다음엔 Googletrans를 사용해서 단어 번역하면 끝이다. 이건 다음 포스팅에서 ..