๐Ÿ“šDEVOOK ๊ฐœ๋ฐœ์ผ์ง€ - ํ‚ค์›Œ๋“œ ์ถ”์ถœ ํ…Œ์ŠคํŠธ

Sewonยท2021๋…„ 11์›” 25์ผ
0

Project-DEVOOK

๋ชฉ๋ก ๋ณด๊ธฐ
1/1

โœ”๏ธํ•ด๋‹น ํ…Œ์ŠคํŠธ ๋ชฉํ‘œ

DEVOOK์˜ ๊ธฐ๋Šฅ ์ค‘ ์‚ฌ์šฉ์ž๊ฐ€ ์ €์žฅํ•œ ๋ธ”๋กœ๊ทธ ๊ธ€์˜ ์ฃผ์ œ์— ์ ํ•ฉํ•œ ํ‚ค์›Œ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ถ”์ถœํ•˜์—ฌ ๊ธ€์„ ๋ถ„๋ฅ˜ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค. ํ•ด๋‹น ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์œ„ํ•ด ๊ด€๋ จ ๊ธฐ์ˆ ์„ ์กฐ์‚ฌํ•˜๊ณ  ํ‚ค์›Œ๋“œ ์ถ”์ถœ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜์˜€๋‹ค.

โœ”๏ธ์ฑ„ํƒ ๊ธฐ์ˆ  ๋ฐ ์ด์œ 

์ฑ„ํƒ ๊ธฐ์ˆ 

Azure Cognitive Service for Language์—์„œ ํ•ต์‹ฌ ๊ตฌ ์ถ”์ถœ

์„ ํƒ ์ด์œ 

ํ•ด๋‹น ๊ธฐ์ˆ ์€ Azure Cognitive Service for Language์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ๋น„์ •ํ˜• ํ…์ŠคํŠธ๋ฅผ ํ‰๊ฐ€ํ•˜๊ณ  ๊ฐ ์ž…๋ ฅ ๋ฌธ์„œ์— ๋Œ€ํ•ด ํ…์ŠคํŠธ์˜ ํ•ต์‹ฌ ๊ตฌ ๋ฐ ์ฃผ์š” ์ง€์  ๋ชฉ๋ก์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
(Azure Cognitive Service for Language๋ž€ ํ…์ŠคํŠธ๋ฅผ ์ดํ•ดํ•˜๊ณ  ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•œ NLP(์ž์—ฐ์–ด ์ฒ˜๋ฆฌ) ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค์ž„)

#1 ์ง์ ‘ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์‹œ๊ฐ„์ด ๋œ ๋“ค๊ณ  ํšจ์œจ์ ์ž„
AI ๋ชจ๋ธ์„ ๊ฐœ๋ฐœํ•ด๋ณธ ๊ฒฝํ—˜์ด ์žˆ๋Š” ํŒ€์›์ด ์—†์—ˆ๊ณ , ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—์„œ๋Š” AI ๊ธฐ์ˆ ๋ณด๋‹ค ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ๊ฐœ๋ฐœ์— ๋” ์ดˆ์ ์„ ๋‘๊ธฐ ์œ„ํ•ด์„œ ๋ฏธ๋ฆฌ ๊ตฌํ˜„๋˜์–ด ์ถ”๊ฐ€ ์‚ฌ์šฉ์ž ์ง€์ • ์—†์ด ๊ทธ๋Œ€๋กœ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅํ•œ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค.

#2 ์š”๊ตฌ ๊ธฐ์ค€ ๋ชจ๋‘ ๋งŒ์กฑ
ํ‚ค์›Œ๋“œ ์ถ”์ถœ ์„œ๋น„์Šค ์ค‘ ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์‹œ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๊ฒƒ์„ ๊ณ ๋ฅด๊ธฐ ์œ„ํ•ด ๊ธฐ์ค€์„ ์„ธ์›Œ ์„ ํƒํ•˜์˜€๋‹ค.

์ด๋ฆ„๋ถ„์„ ์–ธ์–ด ์ง€์›(ํ•œ๊ตญ์–ด, ์˜์–ด)ํ•œ๊ธ€ & ์˜์–ด 2๊ฐœ์˜ ์–ธ์–ด์— ๋Œ€ํ•œ ๋™์‹ ๋ถ„์„ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ํ˜ธ์ถœ ๊ตฌํ˜„ ๋ฐฉ์‹์ฝ”๋”ฉ ์–ธ์–ด ์ง€์›์žฅ์ ๊ฐ€๊ฒฉ
Azure ํ•ต์‹ฌ ๋ฌธ๊ตฌ ์ถ”์ถœ๋ชจ๋‘ ์ง€์›๊ฐ€๋Šฅ1) REST API ํ˜ธ์ถœ, 2) Azure ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ.NET, Python, Java, Node.js๊ณต์‹๋ฌธ์„œ๊ฐ€ ์ž˜ ๋‚˜์™€์žˆ์Œ, ์‚ฌ์šฉ์ด ํŽธ๋ฆฌํ•จ(REST API & ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชจ๋‘ ์ง€์›)Language Service pricing

โœ”๏ธํ…Œ์ŠคํŠธ ์ˆ˜ํ–‰ ๋‚ด์šฉ

์ฃผ์š” ๋‚ด์šฉ : ํฌ๋กค๋งํ•œ ๋ธ”๋กœ๊ทธ ๊ธ€์— ๋Œ€ํ•œ Azure ํ•ต์‹ฌ ๊ตฌ ์ถ”์ถœ ํ…Œ์ŠคํŠธ
ํ˜ธ์ถœ ๊ตฌํ˜„ ๋ฐฉ์‹ : Azure ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
๋Œ€์ƒ ๋ธ”๋กœ๊ทธ : tistory, velog, medium
ํ…Œ์ŠคํŠธ ์ˆ˜ํ–‰ ์กฐ๊ฑด : ์ „์ฒ˜๋ฆฌ X (์›๋ฌธ ํฌ๋กค๋ง๋งŒ ํ•ด์˜ด), Azure ํ•ต์‹ฌ ๊ตฌ ์ถ”์ถœ ๊ธฐ๋Šฅ ํ˜ธ์ถœ ์‹œ ์„ค์ •๋˜์–ด์žˆ๋Š” ๋ฌธ์ž ์ˆ˜ ์ œํ•œ(5120 text)์— ๋งž์ถฐ ํฌ๋กค๋งํ•œ ๋ฌธ์ž์—ด์„ ์ž˜๋ผ์„œ(Python ๋ฌธ์ž์—ด ์ธ๋ฑ์‹ฑ ์‚ฌ์šฉ) List์— ์ €์žฅํ•จ

Step1. Azure Cognitive Service for Language์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” Azure ์–ธ์–ด ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑ (API ์š”์ฒญ ์ธ์ฆ์— ์‚ฌ์šฉํ•˜๋Š” Key ๋ฐ ์—”๋“œํฌ์ธํŠธ URL ์ƒ์„ฑ)
์ฐธ๊ณ ) Azure ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน ๋งŒ๋“ค๊ธฐ, ๋ฆฌ์†Œ์Šค ๊ณต๊ธ‰์ž ๋“ฑ๋ก(subscription)

Step2. Python ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ ์ƒ์„ฑ ํ›„ ํ…Œ์ŠคํŠธ
1) ์š”์ฒญ์„ ์œ„ํ•œ ์ธ์ฆ ๋ฐ ํ•ต์‹ฌ ๊ตฌ ์ถ”์ถœ ๊ธฐ๋Šฅ ํ˜ธ์ถœ ์ฝ”๋“œ

# -*- coding: utf-8 -*-
import json
import os.path

# Azure ํ•ต์‹ฌ ๊ตฌ ์ถ”์ถœ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ 
from azure.ai.textanalytics                     import TextAnalyticsClient
from azure.core.credentials                     import AzureKeyCredential

from key_phrase_with_crawler.get_test_document  import get_test_document

# ใ„ฑ. ์š”์ฒญ ์ธ์ฆ์— ์‚ฌ์šฉ๋˜๋Š” Endpoint & ๋น„๋ฐ€ ํ‚ค 
endpoint    = "https://koreacentral.api.cognitive.microsoft.com/"
secret_file = os.path.join('.', 'secrets.json')
with open(secret_file) as f:
    secrets = json.loads(f.read())


# Authenticate the client using your key and endpoint
def authenticate_client():
    ta_credential           = AzureKeyCredential(secrets["azure_secret_key"])
    text_analytics_client   = TextAnalyticsClient(
        endpoint    = endpoint,
        credential  = ta_credential)
    return text_analytics_client


client = authenticate_client()


# Test key phrase extraction with crawler
def key_phrase_extraction_example(client):
    try:
        documents   = get_test_document()
        response    = client.extract_key_phrases(documents=documents, language="ko") # ใ„ด. ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ ๋น„์ •ํ˜• ์›์‹œ ํ…์ŠคํŠธ ์ „๋‹ฌ
        print(response)

    except Exception as err:
        print("Encountered exception. {}".format(err))


key_phrase_extraction_example(client)

ใ„ฑ. ์š”์ฒญ ์ธ์ฆ์— ์‚ฌ์šฉ๋˜๋Š” Endpoint & ๋น„๋ฐ€ ํ‚ค
๋ฐœ๊ธ‰๋ฐ›์€ ๋น„๋ฐ€ ํ‚ค๋Š” ๋…ธ์ถœ๋˜๋ฉด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— secrets.json ํŒŒ์ผ์— ๋”ฐ๋กœ ์ €์žฅํ•ด๋‘๊ณ  ํ•ด๋‹น ํŒŒ์ผ์„ ํ†ตํ•ด ๋น„๋ฐ€ ํ‚ค ์ ‘๊ทผํ•˜๋„๋ก ์„ค์ •ํ•จ
ใ„ด. ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ ๋น„์ •ํ˜• ์›์‹œ ํ…์ŠคํŠธ ์ „๋‹ฌ
TextAnalyticsClient ํด๋ž˜์Šค์— ์ •์˜๋˜์–ด ์žˆ๋Š” extract_key_phrase()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ•ต์‹ฌ ๊ตฌ ์ถ”์ถœ ์ˆ˜ํ–‰ํ•จ. ์ด๋•Œ ์ธ์ž๋กœ ๋น„์ •ํ˜• ์›์‹œ ํ…์ŠคํŠธ ์ „๋‹ฌํ•จ

2) ํฌ๋กค๋งํ•œ ๋ฐ์ดํ„ฐ ์ž˜๋ผ์„œ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•˜๋Š” ์ฝ”๋“œ

from key_phrase_with_crawler.lambda_function_for_test import lambda_handler


def get_test_document():
    content = lambda_handler(
        {
            "url": "https://medium.com/musinsa-tech/mab-211d14d2090b"
        },
        None,
    )

    # ๊ธฐ๋Šฅ : ํฌ๋กค๋งํ•œ ๋ฐ์ดํ„ฐ(๋ฌธ์ž์—ด)๋ฅผ 5120 ๋งŒํผ์”ฉ ์ž˜๋ผ์„œ list์— ์ €์žฅํ•˜๊ธฐ
    test_document = []
    for i in range(0, len(content), 5120):
        if len(content) - 1 - i < 5119:
            test_document.append(content[i:])
        else:
            test_document.append(content[i:i + 5119])

    return test_document

โ†’ ํฌ๋กค๋งํ•œ ๋ฐ์ดํ„ฐ(๋ฌธ์ž์—ด)๊ฐ€ Azure ํ•ต์‹ฌ ๊ตฌ ์ถ”์ถœ ์„œ๋น„์Šค ๋ฐ์ดํ„ฐ ํ—ˆ์šฉ ํ•œ๋„๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ํ…์ŠคํŠธ๋ฅผ ์ œํ•œ๋œ ํฌ๊ธฐ์ธ 5120์ž ์”ฉ ์ž˜๋ผ์„œ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•˜์˜€์Œ

์ฐธ๊ณ )

# azure.ai.textanalytics.TextAnalyticsClient ํด๋ž˜์Šค์— ์ •์˜๋˜์–ด ์žˆ๋Š” extract_key_phrases()์˜ ์ฝ”๋“œ ์ค‘ ์ผ๋ถ€

@distributed_trace
    def extract_key_phrases(  # type: ignore
        self,
        documents,  # type: Union[List[str], List[TextDocumentInput], List[Dict[str, str]]]
        **kwargs  # type: Any
    ):

โ†’ ์š”์ฒญ ์‹œ ์ธ์ž๋กœ ์ „๋‹ฌํ•  ๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ๋Š” List[str], List[TextDocumentInput], List[Dict[str, str]] ์ด 3๊ฐ€์ง€ ์ค‘ ์„ ํƒ ๊ฐ€๋Šฅํ•จ

Step3. ํ…Œ์ŠคํŠธ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ ํ™•์ธ

# ex) Medium ๋ธ”๋กœ๊ทธ ๊ธ€์— ๋Œ€ํ•œ ํ•ต์‹ฌ ๊ตฌ ์ถ”์ถœ ๊ฒฐ๊ณผ 

{
  'id': '0', 
  'key_phrases': ['Thompson Sampling ์•Œ๊ณ ๋ฆฌ์ฆ˜Thompson Sampling', 'Upper Confidence Bound', 'MUSINSA techFollow', 'Event Bus', 'BetaDistribution betaDistribution', 'new BetaDistribution', 'BigDecimal bd', 'new BigDecimal', 'return bd', 'Armed Bandit', 'double impression', 'double number', 'Apache Kafka', 'Apache Druid', 'Druid ์„œ๋ฒ„๋Š”', 'MAB ์•Œ๊ณ ๋ฆฌ์ฆ˜', 'ug', '์‹ค์‹œ๊ฐ„ MAB ์ •๋ ฌ ์‹œ์Šคํ…œ ๊ตฌ์ถ•', 'CTR', 'Multi', 'fresh', 'MAB๋ž€ ์นด์ง€๋…ธ', 'Exploration', 'Exploitation', 'Greedy ์•Œ๊ณ ๋ฆฌ์ฆ˜ฮต', 'UDB', 'Elasticsearch', 'Lucene', 'Master', 'Data', 'Query', 'Cluster', 'Segment', 'SQL', 'Rollup', 'day', 'hour', 'thompsonSampling', 'click', 'Round', 'sample', 'FAULT', 'CALE', 'LIMIT', 'public', 'HALF', 'Value', 'score', 'brand', 'wvproject', 'impCnt', 'kCnt', 'travel', 'vans', 'newbalance', 'fit', 'mindbridge', 'Redis', '์„œ๋น„์Šค API', 'MAB ์ •๋ ฌ ๋ฐ์ดํ„ฐ', '๋ฌด์‹ ์‚ฌ ์ „์‹œ๊ฐœ๋ฐœํŒ€', '์ด๋ฒคํŠธ ๋ฒ„์Šค', 'ํ™์Šนํ‘œ', '๋ฌด์‹ ์‚ฌ๋Š”', '์ฝ˜ํ…์ธ  ๊ธฐ๋ฐ˜', '์ปค๋ฎค๋‹ˆํ‹ฐ', '์Šคํ† ์–ด', '๊ณ ๊ฐ', '๋‹ค์–‘ํ•œ ์ •๋ณด', '์‹ค์‹œ๊ฐ„ ์ด๋ฒคํŠธ', '๋ฐฐ๋„ˆ', '๊ฒ€์ƒ‰', 'ํƒœ๊ทธ', '์ƒํ’ˆ', '์•„์ด๋ดํ‹ฐํ‹ฐ', '๋ธŒ๋žœ๋“œ', 'ํŽ˜์ด์ง€', '์ •๋ณด๊ฐ€', '๋ฌธ์ œ๋Š”', '์–‘ ๋Œ€๋น„', '์›น', '์•ฑ', '๊ณต๊ฐ„', '์ƒํ™ฉ์—์„œ', '๊ฒฐ๊ณผ', '๋ฐฉ์‹', '์ด๋ฒˆ', '๊ธ€', '๋ฌด์‹ ์‚ฌ๊ฐ€', '๋ฌธ์ œ ๊ฐœ์„  ๋ฐฉํ–ฅ', '๋• ๊ด€๋ฆฌ', 'ํšจ์œจ์„ฑ', '์ˆ˜๋™ ๊ด€๋ฆฌ', '๋…ธ์ถœ ์ˆœ์„œ', 'ํ•˜์œ„', '์ƒ์œ„', '๋ฌธ์ œ์ ', 'ํšŸ์ˆ˜', 'ํด๋ฆญ', 'ํ™•๋ฅ ', '๋ฏธ', '๋†’', '์‹ค์‹œ๊ฐ„์œผ๋กœ', '์‚ฌ์šฉ์ž', 'ํŠธ๋ Œ๋“œ', '์„ฑ๋ณ„', '์—ฐ๋ น', '๋ถ„๋ฅ˜', '์žฅ์ ', '์ž๋™ํ™”', '๊ธฐ์ค€', '๊ด€์‹ฌ', 'ํŠน์ •', '์ฐฉ', '์œ„ ๋ชฉํ‘œ๋กœ', '๊ด€๋ฆฌ์ž', '์—๋„ˆ์ง€', '์†Œ๋ชจ', '์ฒ˜์Œ', '๋ณ€ํ™”๊ฐ€', 'ํŒ๋งค์ˆœ ํ†ต๊ณ„', '์ˆœ์„œ ์ •๋ ฌ', 'ํ• ์ธ ์ด๋ฒคํŠธ์—', '๋ฆฌํ”„๋ ˆ์‰ฌ', '๊ตฌ์ฒด์ ์ธ ์ ์šฉ ๋ฐฉ๋ฒ•', '๊ฐœ๋…', '๋ ˆ๋ฒ„', '์Šฌ๋กฏ๋จธ์‹ ', '์Šน๋ฅ ', '์ˆ˜์ต', 'ํƒ์ƒ‰', '์ˆ˜ํ™•', '๊ณผ์ •', '๋น„์šฉ', '์ตœ๋Œ€ํ•œ', '์ ์ ˆํ•œ', '์กฐํ™”', 'ํ•˜๋‚˜๋งŒ', 'ํ•„์š”', '์ข…๋ฅ˜๊ฐ€', '์žฅ๋‹จ์ ', 'ฮต ๋น„์œจ', '๋ณด์ƒ', '์„ ํƒ', '์„ฑ๊ณผ', '๊ณณ์—', '๋Œ€์ƒ', '๊ธฐํšŒ', '๋ฆฌ์†Œ์Šค๊ฐ€', '์‹ ๋ขฐ๋„', 'ํŠœ๋‹ ๋ฒ„์ „ ์•Œ๊ณ ๋ฆฌ์ฆ˜', '์‹œ๋„', '์—ฐ์‚ฐ', '์กฐ๊ฑด์—์„œ', 'ํ™˜๊ฒฝ', '์š”์ธ', '์ข‹', '์„ฑ๋Šฅ', 'ํ”ผ๋“œ๋ฐฑ', '์„ฑ๊ณต', '์‹คํŒจ', '๋ถ„๋ฐฐ', '๋กœ๊ทธ ๋ฐ์ดํ„ฐ', '์ปดํ“จํŒ… ๋ถ€ํ•˜', '์ž‘์—…์—', '๋ฐ์ดํ„ฐ ์ˆ˜์ง‘', '๊ธฐ๋ณธ ์ •๋ณด', 'ํ–‰๋™', '๋ฐ์ดํ„ฐ๋Š”', '๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ ํ”Œ๋žซํผ์—', '์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ', '์—ญํ• ', '์‹œ์ค‘์—', '๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค', 'ํ…์ŠคํŠธ', '์ˆซ์ž', '์œ„์น˜ ๊ธฐ๋ฐ˜ ์ •๋ณด', '์ •ํ˜•', '์œ ํ˜•', '๋ฃจ์”ฌ', '๋ถ„์„ ์—”์ง„', '๋Œ€์‹œ๋ณด๋“œ', '์˜คํ”ˆ์†Œ์Šค', '์ŠคํŠธ๋ฆผ ํ”„๋กœ์„ธ์„œ', '๋ฐ์ดํ„ฐ์—', '๋กค์—…', '์Šคํ† ๋ฆฌ์ง€', '์งˆ์˜์—', '๋น ๋ฅธ ์†๋„', '๊ธฐ์กด', '๊ฒฝํ—˜', '๋‹ค๋ฃจ๋Š”', '์„œ๋ฒ„ ๊ตฌ์„ฑ', 'ํด๋Ÿฌ์Šคํ„ฐ', 'ํ˜•ํƒœ๋กœ', '๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ', '์ŠคํŠธ๋ฆผ ๋ฐ์ดํ„ฐ', '์„ธ๊ทธ๋จผํŠธ', '๋ฐ์ดํ„ฐ ์งˆ', '์‘๋‹ต', '๋‹น์‹œ ์ตœ์‹  ๋ฒ„์ „', '์ตœ๊ทผ', '๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ', '๊ธฐ๋Šฅ', '์‹œ๊ฐ„ ๋‹จ์œ„', 'ํ•„๋“œ ๋‹จ์œ„๋กœ', '์ƒ˜ํ”Œ๋ง ๊ฐ’', '๋ฉ”๋ชจ๋ฆฌ ์บ์‹ฑ', '๋‹จ๊ณ„', '์ฝ˜ํ…์ธ ์—', '๋‚ฎ'], 
  'warnings': [], 
  'statistics': None, 
  'is_error': False
}
{
  'id': '1', 
  'key_phrases': ['MAB ์ •๋ ฌ ์‹œ์Šคํ…œ', 'MAB ์•Œ๊ณ ๋ฆฌ์ฆ˜', 'MAB ์ •๋ ฌ ์ˆœ์„œ ๋ณ€๊ฒฝ', 'MAB์ •๋ ฌ', 'Druid', 'Discount', 'Thompson', 'ling', 'https', 'medium', 'com', 'data', 'reply', 'it', 'tech', 'apache', 'ad', 'bb', 'cd', 'f', 'wonyong', 'jang', 'gi', 'ub', 'io', 'Big', 'html', 'ichi', 'pro', 'ko', 'hyeondae', 'bunseog', 'pilsu', 'yoso', 'en', 'wikipedia', 'org', 'armed', 'sanghy', 'ukch', 'seing', 'tistory', '์ง€๊ธˆ', '๋ฆฐ', '์ „์ฒด์ ์ธ ์•„ํ‚คํ…์ฒ˜', '์•„๋ž˜ ๊ทธ๋ฆผ', '์ ์ธ๊ธฐ ๋ธŒ๋žœ๋“œ ๋ฆฌ์ŠคํŠธ', '์ขŒ', '์šฐ', '๊ธฐ์กด', '๊ณ ์ •๋œ', '์ˆœ์„œ๋กœ', '์œ ์ž…', '์ƒ์œ„', '์‹ค์‹œ๊ฐ„ ์„ฑ๊ณผ', '์‚ฌ์šฉ์ž ๊ด€์‹ฌ๋„', 'ํ๋ฆ„', '์ˆœ์œ„๊ฐ€', '๊ธฐํšŒ', 'ํšจ๊ณผ', 'ํด๋ฆญ์œจ', '์ผ์ • ์ˆ˜์ค€', '๋…ธ์ถœ', 'ํƒ์ƒ‰', '์‹ ์‚ฌ๋Š”', '๋กœ๊ทธ', '๋ฐ์ดํ„ฐ', '๊ธฐ๊ฐ„', '๋ฌด์‹ ์‚ฌ ์Šคํ† ์–ด', 'ํ•ด๋‹น', '์˜์—ญ', 'ํด๋ฆญ๋ฅ ', '๊ฒฐ๊ณผ', '๋งˆ์น˜', '์œ„์—์„œ', '์บ ํŽ˜์ธ', '๊ธฐํš์ „', '๋‹ค์–‘ํ•œ', 'ํŽ˜์ด์ง€', '์ƒํ’ˆ', '์•„๊ฐ€', '์ž‘์—…', '์„ฑ๋ณ„', '๊ตฌ์„ฑ', '๊ณผ๊ฑฐ', '๊ฐ€์ค‘์น˜', '๋ณ‘ํ–‰', '์‚ฐ์ ', '๊ธฐ๋Šฅ', '๊ตฌ๋งค', '์žฅ๋ฐ”๊ตฌ๋‹ˆ', 'ํ–ฅํ›„', '์—ฐ๋ น', '๊ฐ์‚ฌ'], 
  'warnings': [], 
  'statistics': None, 
  'is_error': False
}
profile
for develop โ˜๏ธ

0๊ฐœ์˜ ๋Œ“๊ธ€