IT

파이썬으로 감정분석하기(with Colab)

치타뱅뱅 2024. 3. 3. 19:53
728x90

pixabay 무료이미지

안녕하세요.

 

파이썬으로 감정분석을 해보았습니다.

기존에는 긍정, 부정적인 word를 일일히 0,1 index를 부여하면서 ML을 수행했습니다.

그런데 transformers라는 라이브러리를 이용하여 분석보고서를 모두 읽지 않고 감정을 알아낼 수 있습니다.

세계 경제전망에 대한 유명 보고서들을 모두 모아서 분석하면 신뢰도 높은 결과를 얻을 수 있을거 같습니다.

 

결론 : 보고서 전체를 읽지 않고 transformer 라이브러리를 이용하여 분석가능.

결과 : 약 74%의 확률로 부정적임을 알 수 있었습니다.

[{'label': 'NEGATIVE', 'score': 0.7457375526428223}]

 

cf) 카톡 대화내용을 내보내기하여 자기가 사용하는 단어가 긍정/부정인지를 통해 대화 습관을 개선하는데에도 도움이 될걸로 예상됩니다.

 

1. KDI 경제정보센터에서 2024 경제전망 보고서를 다운

 - 다운로드 링크 : https://eiec.kdi.re.kr/userdata/nara/202312/202312.pdf

2. 구글 드라이브에 위 파일 업로드

3. 구글 드라이브 마운트하기

(보안때문에 로컬PC에 있는걸 Colab으로는 session맺은 동안만 임시로 올릴 수 는 있으나 아래방법이 영구적으로 사용할 수 있습니다)

from google.colab import drive
drive.mount('/content/drive', force_remount=True)

 

4. Colab 실행하기

 - https://colab.research.google.com/drive

 

Google Colaboratory Notebook

Run, share, and edit Python notebooks

colab.research.google.com

 

5. 분석코드

from pdfminer.high_level import extract_text_to_fp
from pdfminer.layout import LAParams
from io import StringIO
import sys

# PDF 파일에서 특정 페이지의 텍스트 추출
def extract_text_from_pdf_pages(pdf_file_path, start_page, end_page):
    output_string = StringIO()
    with open(pdf_file_path, 'rb') as f_in:
        extract_text_to_fp(f_in, output_string, laparams=LAParams(), output_type='text', codec=None,pagenos=range(start_page-1, end_page))
        text = output_string.getvalue()
    return text

# 사전에 학습된 감성 분석 모델 로드
sentiment_pipeline = pipeline("sentiment-analysis")

# 주어진 텍스트에 대한 감성 분석 수행
def analyze_sentiment(text):
    try:
        result = sentiment_pipeline(text[:512])  # 첫 512글자에 대한 분석
        return result
    except Exception as e:
        print(f"감성 분석 중 오류 발생: {e}", file=sys.stderr)
        return None

# PDF 파일 경로 및 페이지 설정
pdf_file_path = '/content/drive/My Drive/2024경제예상.pdf'  # 업로드한 파일 이름으로 변경
start_page = 10  # 시작 페이지
end_page = start_page  # 여기서는 시작 페이지만 분석하도록 설정했습니다.

# 텍스트 추출 및 감성 분석
text = extract_text_from_pdf_pages(pdf_file_path, start_page, end_page)
if text:
    sentiment_result = analyze_sentiment(text)
    print(sentiment_result)