Amazon Comprehend 감성분석을 활용한 이메일 알림 배치처리 방법

3분 분량
콘텐츠 수준: 고급
0

해당 기사에서는 S3에 저장되어 있는 제품 리뷰 csv를 Amazon Comprehend 를 이용하여 감성분석을 진행한뒤 EventBridge로 배치 처리하여 사용자에게 이메일로 감성분석 결과를 안내해주는 솔루션을 제공합니다.

사용사례

고객을 상대로 하는 기업의 경우 제품의 리뷰를 확인하고 제품의 리뷰를 모니터링 할 필요가 있습니다. 하지만 기업의 많은 제품을 직접 일일히 모니터링하는것은 쉽지 않습니다. 해당 사례 에서는 S3에 제품의 리뷰가 담긴 CSV 파일을 이용하여 제품을 고객들이 긍정적으로 파악하는지 또는 부정적으로 생각하는지 등에 대한 정보를 감정분석의 결과를 이메일로 받을수있는 서비스를 제공합니다.

전제조건

  • S3 버킷이 필요합니다.
  • SES 자격증명이된 송수신자가 필요합니다. [1]
  • 아래의 정책을 Lambda에서 사용할 IAM 역할에 추가합니다.

(AmazonS3ReadOnlyAccess, AmazonSESFullAccess, CloudWatchFullAccess,ComprehendFullAccess)

1단게: S3에 사용자 리뷰가 담긴 CSV 파일 업로드

  • 아래의 형태의 예시 파일을 CSV 파일로 저장합니다.
    productreview
    Product1이 제품 사지 마세요
    Product1제품이 매우 좋습니다
    Product1제품 사는데 돈이 아깝네요
    Product1제품 그저 그러네요
    Product1제품을 다시 사용하고 싶습니다
  • 저장한 CSV 파일을 S3 버킷에 업로드 합니다.

Enter image description here

2단계 : Lambda 함수 생성

  • Lambda [함수], [함수 생성]을 누른뒤에 함수이름에 Comprehand_Lambda를 입력합니다.
  • AWS Lambda 함수의 런타임을 최신버전(Python3.11)으로 설정해주세요.
  • [기본 실행 역할 변경], [기존 역할 사용]을 클릭하여 만들어둔 Lambda 권한을 사용합니다.
  • 이후 기본적인 설정이 완료되었다면 [함수 생성]을 클릭하여 Lambda 함수를 생성합니다.

Enter image description here

3단계 : Lambda 함수 레이어 설정

  • 해당 기사에서는 pandas 라이브러리를 사용하기에 레이어를 추가합니다.
  • 만들어둔 함수를 클릭한뒤 [코드], 하단의 계층에서 [Add a layer]를 클릭합니다.
  • Pandas 라이브러리를 불러올 ARN을 지정합니다. [2]
  • 지정후에는 아래와 같이 Lambda 레이어가 추가된것을 확인할 수 있습니다.

Enter image description here

4단계 : Lambda 트리거 추가

  • 생성한 Lambda 함수에서 [트리거 추가] 버튼을 클릭합니다.
  • [트리거 구성],[EventBridge (CloudWatch Events)]를 클릭한뒤 Create a new rule을 누릅니다.
  • Rule name에는 Cron Rule을 입력하고 반복하기를 원하는 날에 Cron 표현식을 넣습니다.
    • 해당 기사 에서는 매일 오전 12시에 작동하는 트리거로 설정하였습니다.

Enter image description here

5단계: Lambda 함수의 코드 수정

  • 생성한 Lambda 함수를 클릭후 [코드]를 클릭하여 코드 편집창을 열어줍니다.
  • 코드를 아래와 같이 수정한후에 저장한뒤 [Deploy]를 눌러서 배포합니다.
import json
import boto3
import pandas as pd


comprehend_client = boto3.client('comprehend')
s3_client = boto3.client('s3')
ses_client = boto3.client('ses')


def lambda_handler(event, context):
    bucket_name='<CSV 가 저장된 버킷>'
    response=s3_client.list_objects(Bucket=bucket_name)

    file_lst=[]
    for obj in response.get('Contents',[]):
        if "csv" in obj['Key']:
            file_lst.append(obj['Key'])

    positive,negative,neutral=0,0,0
    total=0

    for file in file_lst:
        response = s3_client.get_object(Bucket=bucket_name, Key=file)

        df = pd.read_csv(response['Body'])
        review_lst=df['review']
        total+=len(review_lst)
        for review in review_lst:
            response = comprehend_client.detect_sentiment(Text=review, LanguageCode='ko')
            if response['Sentiment']=="POSITIVE":
                positive+=1
            if response['Sentiment']=="NEGATIVE":
                negative+=1
            if response['Sentiment']=="NEUTRAL":
                neutral+=1
    destination={'ToAddresses': ['<수신자 이메일>']}
    message={
            'Body': {
                'Text': {
                    'Charset': 'UTF-8',
                    'Data': '리뷰 분석 결과를 안내해드립니다. \n  #################  \n 긍정 리뷰 수 :{}개 \n 부정 리뷰 수 : {}개 \n 중립적인 리뷰는 총 {}개 로 확인됩니다.'.format(positive,negative,neutral)
                }
            },
            'Subject': {
                'Charset': 'UTF-8',
                'Data': '리뷰의 감성분석 결과를 안내해드립니다.',
                },
    }

    source="<발신자 이메일>"
    response = ses_client.send_email(Destination=destination,Message=message,Source=source)
    

매일 오후 12시가 되면 리뷰의 감성 분석 결과를 이메일로 확인하실 수 있습니다. 아래는 위의 예시를 통해 받은 내용입니다.

Enter image description here

참고

[1] Amazon SES에서 자격 증명 생성 및 확인: 이메일 주소 자격 증명 생성

https://docs.aws.amazon.com/ko_kr/ses/latest/dg/creating-identities.html#verify-email-addresses-procedure

[2] AWS Lambda Managed Layers

https://aws-sdk-pandas.readthedocs.io/en/stable/layers.html

[3] 농심 켈로그의 Amazon Comprehend 감성분석을 활용한 SNS 대시보드 및 알림 구축 사례

https://aws.amazon.com/ko/blogs/tech/nongshim-dashboard-notification-using-comprehend-sentiment-analysis/

댓글 없음