목차
오늘은 Azure를 이용해서 자연어처리를 한다.
<사전준비>
Microsoft Azure에서 cognitive, translator 리소스 추가하기
endpoint, API_key를 각각 받기
한글 문서, 영어 문서 text 문서로 준비하기
jupyter notebook 설치하기
<과정>
1. 리뷰 문서 보기
review1. txt
review2.txt
import os
# /data/reviews 폴더에 있는 리뷰들을 읽는다.
reviews_folder = os.path.join('data', 'text', 'reviews')
# ID(파일 이름)과 텍스트 (내용)속성들로 구성된 리뷰들의 컬렉션을 생성한다.
reviews = []
for file_name in os.listdir(reviews_folder):
review_text = open(os.path.join(reviews_folder, file_name), encoding="UTF-8").read()
review = {"id": file_name, "text": review_text}
reviews.append(review)
for review_num in range(len(reviews)):
# 리뷰 텍스트를 인쇄한다
print('{}\n{}\n'.format(reviews[review_num]['id'], reviews[review_num]['text']))
2. cognitive, Translator key, endpoint 입력하기
cog_key =
cog_endpoint =
key=
endpoint=
3. cognitive service에서 text analytics와 관련된 설치하기
! pip install azure-cognitiveservices-language-textanalytics
4. 언어 감지하기
import os
from azure.cognitiveservices.language.textanalytics import TextAnalyticsClient
from msrest.authentication import CognitiveServicesCredentials
# Text Analytics Cognitive 서비스 리소스를 위한 클라이언트 가져오기
text_analytics_client = TextAnalyticsClient(endpoint=cog_endpoint,
credentials=CognitiveServicesCredentials(cog_key))
# 앞에서 언급한 /data/reviews 폴더로부터 읽은 리뷰들을 분석한다
language_analysis = text_analytics_client.detect_language(documents=reviews)
# 각 리뷰에서 감지된 언어 세부 정보들을 프린트한다.
for review_num in range(len(reviews)):
# print the review id
print(reviews[review_num]['id'])
# 이 리뷰에 대한 언어 세부 정보를 가져온다.
lang = language_analysis.documents[review_num].detected_languages[0]
print(' - Language: {}\n - Code: {}\n - Score: {}\n'.format(lang.name, lang.iso6391_name, lang.score))
# 리뷰 컬렉션에 검지된 언어 코드를 추가한다(이렇게 함으로 더 많은 분석이 가능하다.
reviews[review_num]["language"] = lang.iso6391_name
5. 언어 번역하기 한국어->영어
# API를 이용해서 한국어를 영어로 번역해본다.
import requests, uuid, json
# location, also known as region.
# required if you're using a multi-service or regional (not global) resource. It can be found in the Azure portal on the Keys and Endpoint page.
location = 'Koreacentral'
path = '/translate'
constructed_url = endpoint + path
params = {
'api-version': '3.0',
'from': 'ko',
'to': 'en'
}
headers = {
'Ocp-Apim-Subscription-Key': key,
# location required if you're using a multi-service or regional (not global) resource.
'Ocp-Apim-Subscription-Region': location,
'Content-type': 'application/json',
'X-ClientTraceId': str(uuid.uuid4())
}
# You can pass more than one object in body.
body = [{
'text': reviews[0]['text']}]
request = requests.post(constructed_url, params=params, headers=headers, json=body)
response = request.json()
#json화 시켰지만.. 크게 의미는 없다
print(json.dumps(response, sort_keys=True, ensure_ascii=False, indent=4, separators=(',', ': ')))
print(response[0]['translations'][0]['text'])
# 위의 한국어 리뷰를 영어로 바꿔서, 모두 영어리뷰로만 이루어진 새로운 리뷰 리스트를 만든다.
all_en_review=[]
for review in reviews:
if review['language']=='ko':
body = [{'text': review['text']}]
request = requests.post(constructed_url, params=params, headers=headers, json=body)
response = request.json()
ko_review= response[0]['translations'][0]['text']
all_en_review.append(ko_review)
else:
all_en_review.append(review['text'])
print(all_en_review)
# 이번에는 감정분석을 하기 앞서, 원래 저장된 reviews 변수 안의 한국어 리뷰를 영어 리뷰로 교체한다.
for (i, review) in enumerate(reviews):
if review['language']=='ko':
body = [{'text': review['text']}]
request = requests.post(constructed_url, params=params, headers=headers, json=body)
response = request.json()
ko_review= response[0]['translations'][0]['text']
reviews[i]['text']= ko_review
reviews[i]['language']='en'
print(reviews)
6. 감정분석하기
sentiment_analysis= text_analytics_client.sentiment(documents=reviews)
for review_num in range(len(reviews)):
sentiment_score = sentiment_analysis.documents[review_num].score
print(sentiment_analysis.documents[review_num])
if sentiment_score <0.5:
sentiment='negative'
elif sentiment_score ==0.5:
sentiment='neutral'
else:
sentiment='negative'
print('{} : {} ({})'.format(reviews[review_num]['id'], sentiment, sentiment_score))
print()
결과값이 0.5라니..
부정적이지도 않고, 긍정적이지도 않다는 뜻인가보다..
그래서 neutral 중립이라는 문구를 추가해보았다.
7. 핵심 phrase 추출하기
# 이전 코드 셀에서 생성한 클라이언트와 리뷰들을 이용하여 핵심구를 추출한다
key_phrase_analysis = text_analytics_client.key_phrases(documents=reviews)
# 각 리뷰별로 핵심 구를 인쇄한다
for review_num in range(len(reviews)):
print(review_num)
# 리뷰 ID를 인쇄한다.
print(reviews[review_num]['id'])
# 이 리뷰에 있는 핵심 구를 가져온다.
print('\nKey Phrases:')
key_phrases = key_phrase_analysis.documents[review_num].key_phrases
# 각 핵심 구를 인쇄한다.
print(key_phrases)
for key_phrase in key_phrases:
print('\t', key_phrase)
print('\n')
8. 언어 감지하기
import os
from azure.cognitiveservices.language.textanalytics import TextAnalyticsClient
from msrest.authentication import CognitiveServicesCredentials
# Text Analytics Cognitive 서비스 리소스를 위한 클라이언트 가져오기
text_analytics_client = TextAnalyticsClient(endpoint=cog_endpoint,
credentials=CognitiveServicesCredentials(cog_key))
# 앞에서 언급한 /data/reviews 폴더로부터 읽은 리뷰들을 분석한다
language_analysis = text_analytics_client.detect_language(documents=reviews)
# 각 리뷰에서 감지된 언어 세부 정보들을 프린트한다.
for review_num in range(len(reviews)):
# print the review id
print(reviews[review_num]['id'])
# 이 리뷰에 대한 언어 세부 정보를 가져온다.
lang = language_analysis.documents[review_num].detected_languages[0]
print(' - Language: {}\n - Code: {}\n - Score: {}\n'.format(lang.name, lang.iso6391_name, lang.score))
# 리뷰 컬렉션에 검지된 언어 코드를 추가한다(이렇게 함으로 더 많은 분석이 가능하다.
reviews[review_num]["language"] = lang.iso6391_name
9. 엔티티 추출하기- 날짜와 위치만
# 이전 코드 셀에서 생성한 클라이언트와 리뷰들을 이용하여 정한 엔터티들을 가져온다
entity_analysis = text_analytics_client.entities(documents=reviews)
# 리뷰들에 대한 결과들을 프린트한다
for review_num in range(len(reviews)):
print(reviews[review_num]['id'])
# 이 리뷰에 포함되어 있는 엔터티들을 가져온다
entities = entity_analysis.documents[review_num].entities
for entity in entities:
# 장소 날짜와 엔터티들을 가져온다
if entity.type in ['DateTime','Location']:
link = '(' + entity.wikipedia_url + ')' if entity.wikipedia_id is not None else ''
print(' - {}: {} {}'.format(entity.type, entity.name, link))
'마이크로소프트 > Azure' 카테고리의 다른 글
[Azure] OCR API, READ API, 리소스 만들기, 리소스 삭제 (0) | 2023.06.15 |
---|---|
[azure] computer vision, custom vision (0) | 2023.06.15 |
[Azure] 군집 실습하기 - K-means clustering (0) | 2023.06.15 |
[Azure] 분류 실습하기- logistic regression (0) | 2023.06.15 |
[Azure] 분류 모델 평가지표 confusion metrics, Recall, sensitivity, Precision, TPR, FPR, Specificity, roc curve, F1 score (0) | 2023.06.15 |