본문 바로가기
C#

[C#] - Microsoft Text Analytics API

by CHML 2016. 10. 9.
1. API 소개

마이크로소프트의 Cognitive Services에는 Emotion API 이외에도 Text Analytics API를 제공한다. Text Analytics API의 주요 기능으로는 아래와 같은 두 가지가 있다.


  • 감성 분석 (sentiment analysis): 문장이 긍정 또는 부정을 나타내는지 판별하는 기능
  • 중요 문구 추출 (key phrase extraction): 문장의 주제가 되는 문구들을 추출하는 기능

Text Analytics API에서는 이외에도 문장 작성에 이용된 언어 판별, 주제 추출 기능을 제공한다. 이 글에서는 Text Analytics API를 이용하여 감성 분석과 중요 문구 추출 기능을 이용하는 방법에 대해 설명한다.


2. API 키 발급

Text Analytics API를 이용하기 위해서는 https://www.microsoft.com/cognitive-services에 접속하여 API 키를 발급받아야 한다. 링크를 통해 접속하면 [그림 1]과 같은 페이지가 나타나며, 마이크로소프트 계정으로 로그인을 한 뒤에 해당 페이지에서 "Get started for free" 버튼을 클릭한다.


[그림 1] Cognitive Services의 메인 페이지


그 다음 페이지에서 "Text Analytics - Preview" 항목을 선택한 뒤에 API 키를 발급받으면 된다. API 키를 발급 받는 자세한 방법은 이 글의 두 번째 항목인 [2. API 키 발급]에 자세히 설명되어 있다.


3. C#에서 Text Analytics API 이용하기

아래의 [코드 1]은 문장에서 중요 문구들을 추출하기 위해 Text Analytics API에 요청을 보내는 MakeRequest() 함수로써, Cognitive Services에서 제공하는 Text Analytics API의 샘플 코드를 변형한 것이다. 감성 분석을 이용하기 위해서는 5번째 줄에서 설정된 주소의 마지막에 위치한 "keyPhrases"를 "sentiment"로 변경하면 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private async void MakeRequest()
{
    var client = new HttpClient();
    var queryString = HttpUtility.ParseQueryString(string.Empty);
    var uri = "https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/keyPhrases?" + queryString;
    byte[] byteData = Encoding.UTF8.GetBytes("{'documents': [{ 'id': 'inputText', 'text': '" + textBoxInput.Text + "'}]}");
    var content = new ByteArrayContent(byteData);
    HttpResponseMessage response = null;
 
    client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key""API key");
    queryString["numberOfLanguagesToDetect"= "1";
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    response = await client.PostAsync(uri, content);
    
    content.Dispose();
 
    MessageBox.Show(response.Content.ReadAsStringAsync().Result);
}
cs

[코드 1] Text Analytics API 요청 함수


[코드 1]의 10번째 줄에 있는 "API key"를 자신이 발급 받은 API 키로 변경해주기만 하면 된다. 16번째 줄은 요청 결과를 MessageBox를 통해 출력하도록 하는 코드이다. Text Analytics API를 이용하기 위한 단순한 프로그램은 아래의 [그림 2]와 같다.


[그림 2] 구현된 프로그램


프로그램은 하나의 TextBox와 Button으로 구성되어 있다. TextBox에 문장을 입력한 뒤에 Analyze 버튼을 클릭하면 Text Analytics API를 호출하여 MessageBox를 통해 문장의 중요 문구들을 출력한다. 아래의 [그림 3]은 구현된 프로그램에 문장을 입력한 것이다.


[그림 3] 문장 입력


위의 [그림 3]과 같이 문장을 입력한 뒤에 Analyze 버튼을 클릭하면, 아래의 [그림 4]와 같이 JSON의 형태로 입력된 문장의 중요 문구들을 출력한다.


[그림 4] 입력된 문장에 대한 Text Analytics API의 중요 문구 추출 결과


위의 [그림 4]와 같이 입력된 문장에 대해 Text Analytics API는 "artificial neural network", "convolutional neural network", "animal visual cortex" 등의 문구를 추출하였다. 마지막으로, 프로그램을 구현하기 위한 전체 소스 코드는 아래의 [코드 2]와 같다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
using System.Text;
using System.Windows.Forms;
using System.Net.Http.Headers;
using System.Net.Http;
using System.Web;
 
namespace TextAnalyticsAPI
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }
 
        private async void MakeRequest()
        {
            var client = new HttpClient();
            var queryString = HttpUtility.ParseQueryString(string.Empty);
            var uri = "https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/keyPhrases?" + queryString;
            byte[] byteData = Encoding.UTF8.GetBytes("{'documents': [{ 'id': 'inputText', 'text': '" + textBoxInput.Text + "'}]}");
            var content = new ByteArrayContent(byteData);
            HttpResponseMessage response = null;
 
            client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key""API key");
            queryString["numberOfLanguagesToDetect"= "1";
            content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            response = await client.PostAsync(uri, content);
 
            content.Dispose();
 
            MessageBox.Show(response.Content.ReadAsStringAsync().Result);
        }
 
        private void buttonAnalysis_Click(object sender, System.EventArgs e)
        {
            MakeRequest();
        }
 
        private void MainForm_Load(object sender, System.EventArgs e)
        {
            textBoxInput.Multiline = true;
            textBoxInput.Height = 200;
            textBoxInput.AcceptsReturn = true;
            textBoxInput.AcceptsTab = true;
            textBoxInput.WordWrap = true;
        }
    }
}
cs

[코드 2] 프로그램의 전체 소스 코드


Text Analytics API에 대한 API 문서와 레퍼런스는 아래의 링크에서 볼 수 있다.

- Text Analytics API의 API 문서

- Text Analytics API의 API 레퍼런스




'C#' 카테고리의 다른 글

[C#] - Microsoft Emotion API  (4) 2016.10.05
[C#] - Visual Studio에서 Metro UI Framework 추가하기  (4) 2016.10.03
[C#] - 클래스 정의와 상속  (0) 2016.09.15
[C#] - 메소드 (Method)  (0) 2016.09.15