CLOVA Summary를 활용해 리뷰 요약 API 만들기
CLOVA Summary 서비스란?
CLOVA Summary는 NLP(Natural Language Processing, 자연어 처리) 기술과 그래프 기반 랭킹 알고리즘 기반으로 문서에서 중요한 문장을 가려내고, 이를 기준으로 요약 결과를 추출하는 서비스입니다.
리뷰 요약 서비스 만들기
1. 네이버 클라우드 플랫폼 ncloud.com 접속 후 로그인합니다.
NAVER CLOUD PLATFORM
cloud computing services for corporations, IaaS, PaaS, SaaS, with Global region and Security Technology Certification
www.ncloud.com
2. 우측 상단 콘솔 (Console) 접속 후 [ Product & Service > AI·NAVER API ] 순서로 이동합니다.
3. CLOVA Summary 서비스를 활성화합니다.
[ Application 등록 ] 버튼을 클릭하고 CLOVA Summary 서비스를 활성화 합니다.
Apllication 등록 관련 자세한 안내는 아래 공식 매뉴얼 페이지를 참조 바랍니다.
- 매뉴얼 링크 : https://guide.ncloud-docs.com/docs/naveropenapiv3-application
Application 사용 가이드
guide.ncloud-docs.com
4. 생성한 Summary 앱을 클릭하여 인증정보를 확인합니다.
Client ID (X-NCP-APIGW-API-KEY-ID) 와 Client Secret (X-NCP-APIGW-API-KEY) 정보를 메모장에 복사합니다.
5. 문서를 RESTful API로 전달하여 요약 결과를 리턴해주는 API를 사용합니다.
아래 코드는 제가 이용한 리뷰 요약 기능 API 코드입니다.
# 요약된 리뷰 가져오기.
class ReviewSummaryResource(Resource):
@jwt_required()
def get(self,hotelId):
try :
connection = get_connection()
query = '''SELECT content FROM reviews
where hotelId=%s;'''
record = (hotelId,)
## 중요!!!! select 문은
## 커서를 가져올 때 dictionary = True로 해준다
cursor = connection.cursor(dictionary=True)
cursor.execute(query,record)
resultList=cursor.fetchall()
contents = [r['content'] for r in resultList]
all_content = ' '.join(contents)
print(all_content)
cursor.close()
connection.close()
except Error as e :
print(e)
cursor.close()
connection.close()
return{"result":"fail","error":str(e)}, 500
# 문서 요약 API ( 리뷰 요약 )
headers = {
"X-NCP-APIGW-API-KEY-ID": Config.client_id,
"X-NCP-APIGW-API-KEY": Config.client_secret,
"Content-Type": "application/json"
}
language = "ko"
url= "https://naveropenapi.apigw.ntruss.com/text-summary/v1/summarize"
summaryData = {"document":{
"content":all_content},
"option":{
"language":language
}
}
print(json.dumps(summaryData, indent=4, sort_keys=True))
response = requests.post(url, data=json.dumps(summaryData), headers=headers)
# rescode = response.status_code
# print(response)
# print(rescode)
json_data = json.loads(response.text)
if 'summary' in json_data:
summary = json_data['summary']
print(summary)
else:
print("Failed to get summary data")
summary = "" # 초기화 코드 추가
return {"result" : 'success','summary':summary}, 200
앱에서 적용한 부분의 사진입니다. 특정 호텔에 대한 모든 리뷰를 가져와서 요약하는 기능입니다.