maxfie1d のブログ

マイクロソフト系技術ネタを中心に書きます。

C# から LUIS を利用する

昨日の記事の続きです. 今回は,C#(プログラム)から LUIS にアクセスしてみたいと思います.

maxfie1d.hatenablog.com

下準備

  • LUIS で作成したアプリの「App ID」と「App Key」をメモする

これがちょっと分かりにくいです. まず,「PUBLISH」タブを開いて,赤枠で囲われたところに 「App ID」と「App Key」が含まれる URL があります.

f:id:maxfieldwalker:20180223221822p:plain

URL はだいたい以下のような構造になっていると思うので, 「App ID」と「App Key」の部分だけを抜き出してメモしておきます.

https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/<App ID>?subscription-key=<App Key>&verbose=true&timezoneOffset=0&q=」

  • LUIS アプリケーションを公開する

アプリケーションを公開することで,外部から LUIS にアクセスできるようになります. 「PUBLISH」タブを開いて,タイムゾーンを日本のものに設定して 「Publish to production slot」ボタンを押します.

f:id:maxfieldwalker:20180223224931p:plain

  • C# でコンソールアプリケーションを作成する.今回はプラットフォーム固有の機能にアクセスしないので .NET Core で OK です.また, NuGet で Microsoft.Cognitive.LUIS を入れておきます. www.nuget.org

C# から LUIS にアクセスしてみる

「2分30秒のタイマーを開始」という文字列を投げて, 「2分」や「30秒」といった Entity が取得できるか試してみます.

using Microsoft.Cognitive.LUIS;
using System;
using System.Threading.Tasks;

namespace ConsoleApp2
{
    class Program
    {
        static async Task Main(string[] args)
        {
            string appId = "<APP ID>";
            string appKey = "<APP KEY>";

            var client = new LuisClient(appId, appKey, verbose: true);

            var result = await client.Predict("2分30秒のタイマーを開始");
            if (result != null && result.Intents[0].Name == "SetTimer")
            {
                var entities = result.GetAllEntities();
                foreach (var entity in entities)
                {
                    Console.WriteLine($"Name: {entity.Name}, Value: {entity.Value}");
                }
            }
            else
            {
                Console.WriteLine("解析に失敗しました");
            }

            Console.ReadKey();
        }
    }
}

うまく取得できたようです.

f:id:maxfieldwalker:20180223225212p:plain