メニュー

実用的なチャットボットを作ってみよう~割り勘ボット:チャットボットの基礎知識5

チャットボットの基礎知識

更新日:2020年1月24日(初回投稿)
著者:ひぐぺん工房 松浦 健一郎、司 ゆき

前回は、あいさつチャットボットの作成を通じて、チャットボットのプログラムが行う具体的な処理について説明しました。今回はより実用的な、割り勘チャットボットを作ります。前回と同様に、プログラミング言語のPython(パイソン)を使って、LINE(ライン)用プログラムの開発について解説します。

今すぐ、技術資料をダウンロードする!(ログイン)

1. 割り勘チャットボットの仕組み

今回作成するのは、図1のように、例えば「23000円を5人で」のように問いかけると、「23000円を5人で割り勘すると4600円です。」のように答えてくれる、割り勘チャットボットです。宴会の会計や、共同で物を購入するときなどに役立ちます。計算機のアプリを使っても割り勘はできますが、チャットアプリをいつも使っているならば、アプリを切り替えずに割り勘が可能です。計算した結果がログに残るのもよい点です。

図1:割り勘チャットボット

図1:割り勘チャットボット

ユーザーから割り勘チャットボットへの問いかけは、「23000円を5人で」のように言う場合もあれば、「6人で39000円」のように言う場合もあります。あるいは「7200円を4人で割り勘したい」のように言うかもしれません。このようにさまざまな言い方がありますが、どの場合にも「○○円」という金額のパターンと、「△△人」という人数のパターンが含まれています。これらのパターンに注目して、ユーザーの発言から金額と人数を抽出すれば、割り勘の計算ができます。テキストから特定のパターンを検索するには、正規表現(せいきひょうげん)という機能を使うのが便利です。正規表現はさまざまなプログラミング言語で利用できます。

例えば「○○円」というパターンは、「1桁以上の数字」の後に「円」が続くパターンです。これを正規表現では「[0-9]+円」または「\d+円」のように表します。「[0-9]」は0から9までの数字を示し、「[0-9]+」は0から9までの数字が1桁以上続くことを示します。また「\d」は「[0-9]」を簡潔に書くための記法です。「\」の部分には、環境によって\(円記号)を使う場合と、\(バックスラッシュ)を使う場合があります。同様に「△△人」というパターンは、「[0-9]+人」または「\d+人」のように表すことができます。今回のプログラム例では、簡潔な「\d+円」や「\d+人」という記法を使うことにします。

さらに、「(\d+)円」や「(\d+)人」のような正規表現を使うと、括弧で囲んだ「(\d+)」という数値の部分だけを取り出して利用することができます。つまり、「○○円」や「△△人」というパターンを見つけた上で、「○○」や「△△」という金額や人数の数値を取り出すことが可能です。これで割り勘の計算に必要な値がそろいます。

2. 割り勘チャットボットのプログラム

プログラムの全体は次のようになります。

________________________________________
#!/usr/local/bin/python
import codecs
import json
import os
import re
import sys
import requests

# 入力の文字エンコーディングを指定
sys.stdin = codecs.getreader(‘utf-8’)(sys.stdin.detach())

# JSONデータを取得
input = json.load(sys.stdin)

# アクセストークン
token = ‘…’

# 全てのイベントを処理
for event in input[‘events’]:

# ユーザの発言を取得
query = event[‘message’][‘text’]

# 金額と人数を取得
price = re.search(r'(\d+)円’, query)
people = re.search(r'(\d+)人’, query) or re.search(r'(\d+)名’, query)

# 金額または人数が未指定のとき
if not price or not people:
reply = ‘金額と人数を指定してください。’

# 割り勘を計算
else:
price = int(price.group(1))
people = int(people.group(1))
reply = ‘{}円を{}人で割り勘すると{}円です。’
.format(price, people, price//people)

# 応答を送信
requests.post(
‘https://api.line.me/v2/bot/message/reply’,
headers={
‘Content-Type’: ‘application/json’,
‘Authorization’: ‘Bearer ‘+token
},
data=json.dumps({
‘replyToken’: event[‘replyToken’],
‘messages’: [{
‘type’: ‘text’,
‘text’: reply
}]
})
)
________________________________________

プログラムの主要な処理を解説していきます。

図2は、価格と人数を取り出す処理です。最初にユーザーによる発言のテキストを取得し、変数queryに格納します。次に正規表現を使って、価格と人数のパターンを発言が含んでいるか調べます。結果は変数priceおよびpeopleに格納します。「re.search」の「re」はregular expression(正規表現)の略で、Pythonにおける正規表現の機能です。search(サーチ)は、reが提供する機能の一つで、テキストから指定したパターンを検索します。

図2:価格と人数を検索する処理

図2:価格と人数を検索する処理

続きは、保管用PDFに掲載中。ぜひ、下記よりダウンロードして、ご覧ください。

3. より幅広い言い方に対応するには

保管用PDFに掲載中。ぜひ、下記よりダウンロードして、ご覧ください。

4. 誤った応答を防止するには

保管用PDFに掲載中。ぜひ、下記よりダウンロードして、ご覧ください。

  • セミナー2月
  • カタログバナー
  • 販促_無料出展

ピックアップ記事

tags

  • 特集バナー0217_01
  • 特集バナー0217_02
  • 特集バナー0217_03
  • 特集バナー0217_04
  • 特集バナー0217_05
  • 特集バナー0210_01
  • 特集バナー0210_02
  • 特集バナー0210_03
  • 特集バナー0210_04
  • 基礎知識一覧