はじめに
ここでは,MIT App Inventorでのテキストのクラス分けを行います.GoogleのNatural Language APIを使用します.
アプリでテキストのクラス分けを行うことができれば,アプリの幅が格段と広がりそうですね!
テキストのクラス分けをNatural Language APIで行うが,MIT App Inventorから直接アクセスする方法が見つからなかったため,GoogleのCloud Runを経由してテキスト分類を行います.
aiaファイルのCloudRunURLはご自身のに書き換えて実行してください.
アプリの概要
アプリに文章を入力し,ボタンをクリックすると文章がCloud Run, Natural Language APIを使用して,文章のカテゴリがレスポンスします.このレスポンスをアプリのスクリーンに表示します.
Natural Language API
GoogleのNatural Language APIとは?
Natural Language API
GoogleのMLを使用して非構造化テキストから分析情報を引き出す。
Natural Language API
Natural Language API の高度な事前トレーニング済みモデルでは、デベロッパーがアプリケーションに自然言語理解(NLU)を簡単に適用し、感情分析、エンティティ分析、エンティティ感情分析、コンテンツ分類、構文解析などの機能を利用できるようになります。
Natural Language コンテンツの分類
Natural Language コンテンツの分類とは?
Method: documents.classifyText
Natural Language コンテンツの分類
コンテンツ分類は、ドキュメントを分析し、ドキュメント内で見つかったテキストに適用されるコンテンツ カテゴリのリストを返します。ドキュメント内のコンテンツを分類するには、classifyText メソッドを呼び出します。
Method: documents.classifyTextドキュメント
classifyTextはv2を使用します.
Cloud Run
GoogleのCloud Runとは?
Cloud Run
フルマネージドのプラットフォームでアプリやウェブサイトをすばやく構築
Designer画面
機能 | 内容 |
---|---|
TextBox1 | テキスト分類する文章を入力する箇所. |
send | ボタン,文章を入力したらクリックし,テキスト分類を行う. |
reset | ボタン,Label1とListView1のテキストをクリアする. |
Web1 | CloudRunにリクエストを送る. |
blocks画面
変数
・CloudRunURL
CloudRunへリクエストを送るURL.
・classList
レスポンスで帰ってきたカテゴリをリストに格納する.
ボタンクリック
・wheb send. Click
CloudRunへリクエストを送信する.
・when reset. Click
Label1とtextBox1,ListView1
をクリアする.
CloudRunからのレスポンス処理
コードの記述
Natural Language APIを使用できるようにし,Cloud Runにコードを記述します.
生成AIに書いてもらいました~~!AIってほんとに優秀ですね.
import json
from flask import Flask, request, jsonify
import functions_framework
from googleapiclient.discovery import build
from google.auth import default
app = Flask(__name__)
app.json.ensure_ascii = False
# Google Natural Language API クライアントを作成
nl_service = None
@app.route('/classify_text', methods=['GET', 'POST']) # GET と POST メソッドに対応
def classify_text():
"""文章のコンテンツを分類する"""
global nl_service
try:
# リクエストから文章を取得
if request.method == 'GET':
text = request.args.get('text')
elif request.method == 'POST':
text = request.get_json().get('text')
# 進捗状況を記録
progress = {"step": "文章取得"}
# Google Natural Language API クライアントを作成
if nl_service is None:
nl_service = get_nl_service()
progress["step"] = "APIクライアント作成"
# Google Natural Language API にリクエストを送信
response = classify_text_with_api(text, nl_service)
progress["step"] = "APIリクエスト送信"
# 結果をJSON形式で返す
return jsonify({'progress': progress, 'classification': response}), 200
except Exception as e:
return jsonify({"error": str(e)}), 500
@functions_framework.http
def main(request):
"""HTTPリクエストを処理する"""
with app.app_context():
return classify_text()
def get_nl_service():
"""Google Natural Language API のクライアントを作成する"""
credentials, project_id = default()
return build('language', 'v2', credentials=credentials)
def classify_text_with_api(text, nl_service):
"""Google Natural Language API を使用して、文章のコンテンツを分類する"""
request_body = {
"document": {
"type": "PLAIN_TEXT",
"content": text
}
}
response = nl_service.documents().classifyText(body=request_body).execute()
# Content Classification の結果を取得
classification = response.get("categories", [])
return classification
functions-framework==3.*
requests
google-api-python-client
google-auth-httplib2
CloudRunからURLを貼り付け
CloudRunのURLをコピーして,ブロック画面の変数CloudRunURLに貼り付けます.
終わりに
GoogleのNatural Language APIを使用することで簡単に長文をカテゴライズすることができた.
MIT App InventorでCloud Runを使用することでアプリ作成の幅が大きく広がります,GoogleにはたくさんのAPIが用意されておりこれらを使用することでいろいろなアプリを作成することができます.生成AIを頼ることでプログラミングがわからなくても,CloudRunを使用したアプリ作成を行うことができます.テキスト情報であればMIT App Inventorでブロックを作成するよりも,生成AIにプログラムを作成してもらい,CloudRunにアクセスす方がアプリ作成の効率が上がると思い始めました.