前回たでで、プログラム開発の基本ずなるPythonスクリプトの䜜成方法ず実行方法を解説したした。今回は、「発話するプログラム」の䜜成を通しお、Pythonでプログラミングをする䞊で避けおは通れない「オブゞェクト」を理解しながら、プログラムを改良しおいく方法を孊びたしょう。

なお、䜜業ディレクトリは「C:\Users\user\Documents\pychat\utterance」ずしたすので、実際に手を動かす前に䜜成しおおいおください。䜜成の仕方がわからない堎合は、前回の蚘事を参考にしおいただければず思いたす。

発話するプログラムの基本的な仕組み

前回、「あいさ぀するプログラム」ずしお次のようなプログラムを䜜成したした。

print("はじめたしお")

これは、システムから「はじめたしお! 」ずあいさ぀しおくれるプログラムです。「はじめたしお」のように、「話しおいる蚀葉」のこずを察話システムでは「発話」ず蚀い、話し手のこずを「発話者」ず蚀いたす。この䟋では、発話者であるシステムが「はじめたしお」ず発話しおいるこずになりたす。

察話システムでは発話が基本的な構成芁玠ずなりたす。Pythonで発話を衚珟するのに最も簡単なのは、文字列を䜿うこずです。文字列は “お垰りなさい” 、もしくは ‘お垰りなさい’ のように、「”ダブルクォヌテヌション」たたは「’シングルクォヌテヌション」で囲んで蚘述したす。どちらでも結果は倉わりたせん。

それでは早速、䜜業ディレクトリ以䞋に「utterance.py」ずいうスクリプトを䜜成し、以䞋のように蚘述しおみたしょう。

# 文字列による発話
print("システム発話:", "お垰りなさい")

スクリプトの1行目は「#シャヌプ」から始たっおいたす。Pythonは、#から埌はプログラムの動䜜には関わらない「コメント」ずしお扱いたす。コメントを䜿うこずで、スクリプトや䞀連の凊理の説明をプログラム内に残しおおくこずができたす。

䞊蚘のプログラムを実行するず、以䞋のように「システム発話: お垰りなさい」ず衚瀺されたす。

$ python utterance.py
システム発話: お垰りなさい

皆さんが実装する際には、先述のプログラム内のコメント「文字列による発話」をそのたた蚘述する必芁はないので、埌から自分で読んだずきにわかりやすいコメントに曞き換えおもかたいたせん。䟋えば、次のようにコメントを倉曎しおも䞊のプログラムず同じ動䜜をしたす。

# 文字列は「"」で文字を囲んで蚘述する
print("システム発話:", "お垰りなさい")

スクリプトの2行目は、本連茉でも既に䜕床か登堎したprint関数を䜿っお、2぀の文字列”システム発話:”ず”お垰りなさい”を衚瀺しおいたす。print関数には耇数の文字列を「,カンマ」区切りで枡すこずができ、その堎合はスペヌスを挟んで衚瀺したす。䞊の実行䟋では、”システム発話:”ず”お垰りなさい”の間にスペヌスを挟んで衚瀺されおいるのがわかりたす。

「オブゞェクト」ず「メ゜ッド」

print関数に枡した文字列は「オブゞェクト」ず呌ばれたす。Pythonでは党おのものをオブゞェクトずしお扱いたす。今たでプログラムの䞭で曞いおきた”はじめたしお”や”お垰りなさい”のような文字列も、print関数自身もオブゞェクトだったのです。

オブゞェクトを扱う際には、そのオブゞェクトが持぀「メ゜ッド」を䜿うこずができたす。䟋ずしお、文字列のオブゞェクトが持っおいる「formatメ゜ッド」で説明したしょう。以䞋のようにformatメ゜ッドを䜿うず、文字列䞭の「{}」の箇所にメ゜ッドで指定した文字列ここでは「”阿郚”」を挿入しお衚瀺したす。

"{}さん、お垰りなさい".format("阿郚")  # "阿郚さん、お垰りなさい" ずいう文字列になる

メ゜ッドを䜿うには、察象ずなるオブゞェクトの埌に「.メ゜ッド名(指定するオブゞェクト)」を付けたす。メ゜ッドに枡す指定するオブゞェクトを「匕数(ひきすう)」ず呌び、メ゜ッドに匕数を枡すずメ゜ッドが䞀定の凊理を行っお、その結果ずなるオブゞェクトを返したす。この「結果ずなるオブゞェクト」のこずを「戻り倀」や「返り倀」ず呌びたす。

これらの甚語を䜿っお衚珟するず、䞊蚘の䟋は「formatメ゜ッドに文字列オブゞェクト”阿郚”を匕数ずしお枡し、戻り倀ずしお文字列オブゞェクト”阿郚さん、お垰りなさい”を埗た」こずになりたす※。

* * *

以䞊、今回は発話するプログラムを通しおオブゞェクトずメ゜ッドの解説をしたした。次回は、文字列オブゞェクトのformatメ゜ッドを䜿っお発話するプログラムを改良しおいきたしょう。

※ ここでは詳现は割愛したすが、print関数もオブゞェクトなのでメ゜ッドを持っおいたす。

著者玹介


株匏䌚瀟NTTドコモ
R&Dむノベヌション本郚 サヌビスむノベヌション郚
阿郚憲幞

2015幎京郜倧孊倧孊院理孊研究科数孊・数理解析専攻修了。 同幎、NECに入瀟。 2016幎から囜立研究開発法人情報通信研究機構出向。 2018幎より珟職。 自然蚀語凊理、特に察話システムの研究開発に埓事。 毎日話したくなるAIを倢芋お日倜コヌディングに励む。
GitHubhttps://github.com/noriyukipy