【Azure Cognitive Searchで始めるTwitter分析】Part1. 検索インデックスの作成

#構成
全部で3部構成にする予定です。

Part.1
検索インデックスの作成 （今回）

Port.2
[デモアプリの作成](https://qiita.com/omiyu/private/0605942b1cde1adb7481)（次回）

Port.3
[Power BI 1 レポートの作成](https://qiita.com/omiyu/private/e32b50ee2f5f944c0ded)（次々回）

# はじめに

News ZERO さんがTwitterで新型コロナ「陽性」の経験談を募集されており、使われたハッシュタグはトレンド入りしました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">【<a href="https://twitter.com/hashtag/%E6%84%9F%E6%9F%93%E3%81%97%E3%81%9F%E3%81%8B%E3%82%89%E4%BC%9D%E3%81%88%E3%81%9F%E3%81%84?src=hash&amp;ref_src=twsrc%5Etfw">#感染したから伝えたい</a> 経験談募集】<br>新型コロナ「陽性」を経験された方へ<br>・こんな経路で感染した<br>・若い世代でもこんな「<a href="https://twitter.com/hashtag/%E5%BE%8C%E9%81%BA%E7%97%87?src=hash&amp;ref_src=twsrc%5Etfw">#後遺症</a>」が<br><br>緊急事態宣言が出た今だからこそ<a href="https://twitter.com/hashtag/%E6%84%9F%E6%9F%93%E3%81%97%E3%81%9F%E3%81%8B%E3%82%89%E4%BC%9D%E3%81%88%E3%81%9F%E3%81%84?src=hash&amp;ref_src=twsrc%5Etfw">#感染したから伝えたい</a>　で投稿を<br><br>感染を広げないため<br>大切な人を守るため<br>みなさんの体験談<a href="https://twitter.com/hashtag/newszero?src=hash&amp;ref_src=twsrc%5Etfw">#newszero</a> で紹介させてください <a href="https://t.co/bfl6nOdQzR">pic.twitter.com/bfl6nOdQzR</a></p>&mdash; news zero (@ntvnewszero) <a href="https://twitter.com/ntvnewszero/status/1348651555872940032?ref_src=twsrc%5Etfw">January 11, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

そこで今回は、「#感染したから伝えたい」を含むツイートを約500件取得し、Azure Cognitive Search で人物・感情・キーフレーズなどを抽出 → デモアプリを作成→Power BI テンプレートでワードクラウドの表示をさせてみました。

↓ こんな感じのワードクラウドが簡単に得られます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/8048072a-a022-cd18-940d-9705c34b7ab2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/2ea2e255-9538-8113-479a-f14706de048c.png)



## Azure Cognitive Search とは
Azure Cognitive Search (旧称 Azure Search)は、Web、モバイル、エンタープライズの各アプリケーション内のプライベートな異種コンテンツに対する豊富な検索機能を提供する、クラウド検索サービスです。
公式ドキュメント：https://docs.microsoft.com/ja-jp/azure/search/search-what-is-azure-search

今回はテキストデータのみ使いますが、Cognitive Searchでは画像、映像、音声などの非構造化データも検索可能です。
また、Cognitive ServicesやPower BIとの連携も容易です。


# 手順

ざっくりと以下の5つの手順でやっていきます。

1. Twitter API を使用してデータを用意する
2. BLOB ストレージにツイートデータアップロード
3. Cognitive Search で検索インデックスの作成
4. デモアプリの作成（[Part2. デモアプリの作成](https://qiita.com/omiyu/private/0605942b1cde1adb7481) で説明します。）
5. Power BI テンプレートでワードクラウド表示（[Part3. Power BI レポートの作成](https://qiita.com/omiyu/private/e32b50ee2f5f944c0ded) で説明します。）

## 1. Twitter API を使用してデータを用意する

### 1-1. Twitter APIの利用申請→APIトークン取得

[Developerサイト](https://developer.twitter.com/en/portal/projects-and-apps)にて英語で申請→うまくいけば１日で使えるようになります。
申請内容が不十分だと、メールが来て改めてAPIの使用用途を聞かれます。

APIの申請方法、APIキーの取得方法については、以下リンクが参考になるかと思います。

参考リンク：https://www.itti.jp/web-direction/how-to-apply-for-twitter-api/

### 1-2. Pythonで 「#感染したから伝えたい」 を含むツイートを収集

以下の記事を参考にし、1月13日～1月21日までの 「#感染したから伝えたい」 のハッシュタグを含むツイートを約500件集め、CSVファイルに出力しました。

参考リンク：https://qiita.com/nomotom/items/de1bc00ef350edc21624

## 2. BLOB ストレージにCSVファイルをアップロード

[Azure Blob Storage](https://portal.azure.com/#blade/HubsExtension/BrowseResource/resourceType/Microsoft.Storage%2FStorageAccounts)でストレージアカウントを作成→コンテナー作成→CSVファイルのアップロードをします。

まずストレージアカウントを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/4613992c-48ae-8ed2-abe0-d0008dccb341.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/ef403bb6-e973-e54b-1625-9fbb8afe589b.png)


次にコンテナーを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/716a518a-e79f-3184-1ff9-05b51f68f22c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/2e122eba-ab98-548b-bd15-4d174c41927e.png)


最後に先程用意したCSVファイルをコンテナーにアップロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/dce775b6-0610-5604-8bcb-092319a4af27.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/7ceda6e0-78a0-231e-133e-8f767a76654c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/3d67fd73-42de-7b78-1b35-42716cea74d7.png)

これでデータの準備ができました。


## 3. Cognitive Search で検索インデックスの作成

### 3-1. Cognitive Search リソースの作成

Azure Portalにログインし、[Search Service](https://portal.azure.com/#blade/HubsExtension/BrowseResource/resourceType/Microsoft.Search%2FsearchServices)を開きます。
「Search サービスの作成」をクリックします。
![スクリーンショット 2021-01-26 14.45.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/2dd38e9b-2e06-8fcc-a73a-74f578236840.png)

サブスクリプション～価格レベルまでを設定し、「確認および作成」でリソースを作成します。

価格レベルについての詳細：https://azure.microsoft.com/ja-jp/pricing/details/search/

これらを設定後、「確認および作成」で作成。
![スクリーンショット 2021-01-26 14.46.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/fbda8cef-dd85-f107-f83e-064f1bd6d4e1.png)

### 3-2. インデックス作成

作成したリソースに移動し、「データのインポート」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/35a4b370-17ca-e456-f0b5-39e3a1e56649.png)


#### 3-2-1. データに接続

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/5d307c3b-f705-fd1a-7585-5dca798c0b8d.png)

データソース：Azure BLOBストレージ
データソース名：任意
抽出されるデータ：コンテンツとメタデータ
解析モード：区切りテキスト
　最初の行にヘッダーが含まれています：チェックを入れます。
　区切り記号文字：,
接続文字列：「既存の接続を選択します」をクリック→データをアップロードしたコンテナーを選択します。

「次：コグニティブスキルを追加します」で次に進みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/4d721329-73d4-3ea0-54b7-ce78689bc705.png)




#### 3-2-2. スキルの追加

３つの項目「Cognitive Servicesをアタッチする」、「エンリッチメントの追加」、「ナレッジストアへのエンリッチメントの保存」を設定していきます。
それぞれクリックで設定項目が開かれます。

![スクリーンショット 2021-01-27 11.52.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/d3572118-e9e9-27c2-c5d0-16a269dddb36.png)

##### 「Cognitive Servicesをアタッチする」

「無料」を選択すると、スキル適用できるドキュメント数が20個に限定されます。
![スクリーンショット 2021-01-27 11.52.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/36ce4e33-1fd5-b2bb-b481-3fa968a7a43b.png)

※Cognitive Servicesリソースを新規で作成する場合
価格レベルはS0を使うことができます。
![スクリーンショット 2021-01-27 11.37.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/d8107360-eb7c-b0b5-0520-cb9d12a31b7b.png)
![スクリーンショット 2021-01-27 11.37.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/ceb0557a-64f1-abfe-f5ec-313d4c069b70.png)
数秒待ちます。
![スクリーンショット 2021-01-27 11.37.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/b1e74f5d-dc3f-98bd-17ab-e468940ec4f1.png)


##### 「エンリッチメントの追加」

スキルセット名：任意
ソースデータフィールド：text（感情分析などのスキルを適応させる列を指定します。今回はツイート本文の列である"text"を指定しています。）
エンリッチメントの粒度レベル：ページ（5000文字チャンク）

必要なスキルにチェックを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/29cf2bc6-2977-d66f-07b4-aad39167bd8a.png)



##### 「ナレッジストアへのエンリッチメントの保存」を開きます。

これを設定することにより Power BI との連携が可能になります。
ストレージアカウント接続文字列：「規定の接続を選択します」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/87bb3946-2edd-5da1-26a4-5e616e9382c8.png)

ナレッジストア用のコンテナーを選択します。
コンテナーを用意していない場合は、「+コンテナー」を押して作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/367eb9d1-b52e-ea57-ab80-cd12cff06117.png)


設定ができたら「次：対象インデックスをカスタマイズします」で次に進みます。


#### 3-2-3. インデックスをカスタマイズ

インデックス名：任意
キー：AzureSearch_DocumentKey

> フィールドには、データ型と属性があります。 上部に並んだチェック ボックスは、フィールドがどのように使用されるかを制御する "インデックスの属性" です。

引用元：https://docs.microsoft.com/ja-jp/azure/search/search-get-started-portal

取得可能：検索結果で取得したい項目かどうか
フィルター可能、ソート可能、ファセット可能：フィルタリング、並べ替え、ファセットのナビゲーション構造にフィールドを使用するかどうか
検索可能：フルテキスト検索の対象かどうか

アナライザー：

デモアプリのサイドバーに表示させたい項目には、「フィルター可能」「ファセット可能」いずれもチェックを入れます。

「」で次に進みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/08d118a0-1eb4-b765-83cc-cb8f983634bb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/ed49ad40-ada3-70f5-ee7e-f3445a477da9.png)




#### 3-2-4. インデクサーの作成

インデクサー名：任意
スケジュール：一度

これらを設定し、「送信」でインデクサーが実行されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/6779388c-b6f3-af2a-16c6-011f3a263396.png)


### 3-3. 言語設定
このままだと言語設定が英語のままスキルが実行されてしまうため、一旦実行中のインデクサーを止め、言語を設定してからインデクサーを再度実行する必要があります。

「インデクサー」を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/05c6e422-2f58-007b-ba49-6e05f1a2b21a.png)


インデクサーをリセットします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/62b1613f-e000-cd7a-52c1-49e587e39b57.png)


「スキルセット」を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/8b8a924e-8181-02fe-6e21-6ee4d78f56a4.png)


言語を英語→日本語に変更します。
"@odata.type": "#Microsoft.Skills.Text.SplitSkill"　以外の　defaultLanguageを、enからjaに書き替え、「保存」で変更を保存できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/365bf2f2-278f-5536-ee77-e1188e6fb98d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/4c1e7413-e17d-8eea-54b5-4a45f6102d20.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/78d916e6-24c2-67c9-bc60-ffd0f0f19aff.png)


再度「インデクサー」を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/ae0003f7-1650-2258-c002-a1b7727973f1.png)


インデクサーを再度実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/a6aa3db8-1ff1-7045-92ff-d9b2a72b8b05.png)

インデックスが作られました。
512個のツイートで1分少し要しました。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/6e046f3f-2de7-ec89-b09d-34572aa86bd2.png)


### 3-4. 検索エクスプローラーでクエリを実行

インデックスを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/5fe9511e-24b3-03b1-d863-b40c9809bdbb.png)

「検索」をクリックすると、下に検索結果の一覧が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/38a9db0e-9d21-dcd7-3dee-21fcfd84c504.png)

次は簡単な検索クエリを書いて結果をみてみます。
`$search=コロナ&$select=created_at,text,sentiment,keyphrases,locations,people`
これで”コロナ”を含むツイートを検索し、日時・本文・感情・キーフレーズ・場所・人物　の項目のみ結果に表示させることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/cb67e31a-4f11-0a6c-98ff-68a742a7fa0b.png)

クエリパラメーターの詳細については、以下公式ドキュメントにてご確認いただけます。
https://docs.microsoft.com/ja-jp/azure/search/search-explorer
https://docs.microsoft.com/ja-jp/azure/search/search-query-overview

# おわりに
本記事では、データの準備～検索インデックスの作成 までの手順をまとめました。
次回、[Part2. デモアプリの作成]() で検索アプリを作成し、
[Part3. Power BI レポートの作成]() で最初に示したワードクラウドなどを表示させていきます。
簡単なステップで試せるものですので、ぜひご覧ください。

次回：[Part2. デモアプリの作成](https://qiita.com/omiyu/private/0605942b1cde1adb7481)

# 参考リンク
https://docs.microsoft.com/ja-jp/azure/search/search-create-service-portal
https://docs.microsoft.com/ja-jp/azure/search/search-get-started-portal
https://docs.microsoft.com/ja-jp/azure/search/cognitive-search-quickstart-blob
https://docs.microsoft.com/ja-jp/azure/search/knowledge-store-create-portal
https://docs.microsoft.com/ja-jp/azure/search/search-explorer