人工知能開発へ
Pythonを一通り勉強し終わったので、人工知能を開発するために、参考書の写経を始め、プロトタイプの作成を短時間で終わらせることが出来た。
<prototype.py>
# coding: Shift-JIS
class Ptna:
"""ピティナの本体のクラス
"""
"""
def __init__(self, name):
"""Ptnaオブジェクトの名前をnameに格納
Responderオブジェクトを生成してresponderに格納
@param name Ptnaオブジェクトの名前
"""
self.name=name
self.responder=Responder("What")
"""Ptnaオブジェクトの名前をnameに格納
Responderオブジェクトを生成してresponderに格納
@param name Ptnaオブジェクトの名前
"""
self.name=name
self.responder=Responder("What")
def dialogue(self, input):
"""応答オブジェクトのresponse()を呼び出して
応答文字列を取得する
"""応答オブジェクトのresponse()を呼び出して
応答文字列を取得する
@param input ユーザーによって入力された文字列
戻り値 応答文字列
"""
return self.responder.response(input)
戻り値 応答文字列
"""
return self.responder.response(input)
def get_responder_name(self):
"""応答オブジェクトの名前を返す
"""
return self.responder.name
"""応答オブジェクトの名前を返す
"""
return self.responder.name
def get_name(self):
"""Ptnaオブジェクトの名前を返す
"""
return self.name
"""Ptnaオブジェクトの名前を返す
"""
return self.name
class Responder:
"""応答クラス
"""
def __init__(self, name):
"""Responderオブジェクトの名前をnameに格納
"""応答クラス
"""
def __init__(self, name):
"""Responderオブジェクトの名前をnameに格納
@param name Responderオブジェクトの名前
"""
self.name=name
"""
self.name=name
def response(self, input):
"""応答文字列を作って返す
"""応答文字列を作って返す
@param input 入力された文字列
"""
return "{}ってなに?".format(input)
"""
return "{}ってなに?".format(input)
from ptna import *
#########################################################################################################################
#実行ブロック
#########################################################################################################################
#実行ブロック
#########################################################################################################################
def prompt(obj):
"""ピティナのプロンプトを作る関数
戻り値 "Ptnaオブジェクト名:応答オブジェクト名 > "
"""
return obj.get_name() + ":" + obj.get_responder_name() + "> "
"""ピティナのプロンプトを作る関数
戻り値 "Ptnaオブジェクト名:応答オブジェクト名 > "
"""
return obj.get_name() + ":" + obj.get_responder_name() + "> "
print("Ptna System prototype : ptna") # プログラムの情報を表示
ptna = Ptna("ptna")
ptna = Ptna("ptna")
while True:
inputs = input(" > ")
if not inputs:
print("バイバイ")
break
response = ptna.dialogue(inputs) # 応答文字列を取得
print(prompt(ptna), response) # プロンプトと応答文字列をつなげて表示
inputs = input(" > ")
if not inputs:
print("バイバイ")
break
response = ptna.dialogue(inputs) # 応答文字列を取得
print(prompt(ptna), response) # プロンプトと応答文字列をつなげて表示
<ptna.py>
# coding: Shift-JIS
from responder import *
class Ptna:
"""ピティナの本体のクラス
"""
"""
def __init__(self, name):
"""Ptnaオブジェクトの名前をnameに格納
Responderオブジェクトを生成してresponderに格納
@param name Ptnaオブジェクトの名前
"""
self.name=name
self.responder=RandomResponder("Random")
"""Ptnaオブジェクトの名前をnameに格納
Responderオブジェクトを生成してresponderに格納
@param name Ptnaオブジェクトの名前
"""
self.name=name
self.responder=RandomResponder("Random")
def dialogue(self, input):
"""応答オブジェクトのresponse()を呼び出して
応答文字列を取得する
"""応答オブジェクトのresponse()を呼び出して
応答文字列を取得する
@param input ユーザーによって入力された文字列
戻り値 応答文字列
"""
return self.responder.response(input)
戻り値 応答文字列
"""
return self.responder.response(input)
def get_responder_name(self):
"""応答オブジェクトの名前を返す
"""
return self.responder.name
"""応答オブジェクトの名前を返す
"""
return self.responder.name
def get_name(self):
"""Ptnaオブジェクトの名前を返す
"""
return self.name
"""Ptnaオブジェクトの名前を返す
"""
return self.name
<responder.py>
# coding: Shift-JIS
import random
@param name Responderオブジェクトの名前
"""
self.name=name
"""
self.name=name
def response(self, input):
""" オーバーライドを前提としてresponse()メソッド
""" オーバーライドを前提としてresponse()メソッド
@param input 入力された文字列
戻り値 空の文字列
"""
return " "
戻り値 空の文字列
"""
return " "
def get_name(self):
"""応答オブジェクトの名前を返す
"""
return self.name
"""応答オブジェクトの名前を返す
"""
return self.name
class RepeatResponder(Responder):
"""オウム返しのための行うサブクラス
"""
def response(self, input):
""" 応答文字列を作って返す
"""オウム返しのための行うサブクラス
"""
def response(self, input):
""" 応答文字列を作って返す
@param input 入力された文字列
"""
return "{}ってなに?".format(input)
"""
return "{}ってなに?".format(input)
class RandomResponder(Responder):
""" ランダムな応答のための行うサブクラス
"""
def __init__(self, name):
""" Responderオブジェクトの名前を引数にして
スーパークラスの__init__()を呼び出す
ランダムに抽出するメッセージを格納したリストを作成
""" ランダムな応答のための行うサブクラス
"""
def __init__(self, name):
""" Responderオブジェクトの名前を引数にして
スーパークラスの__init__()を呼び出す
ランダムに抽出するメッセージを格納したリストを作成
@param name Responderオブジェクトの名前
"""
super().__init__(name)
self.responses=["いい天気だね","君はパーリーピーポー","10円拾った"]
"""
super().__init__(name)
self.responses=["いい天気だね","君はパーリーピーポー","10円拾った"]
def response(self, input):
""" 応答文字列を作って返す
""" 応答文字列を作って返す
@param input 入力された文字列
戻り値 リストからランダムに抽出した文字列
"""
return (random.choice(self.responses))
戻り値 リストからランダムに抽出した文字列
"""
return (random.choice(self.responses))
この3つのファイルの絡みは、データベースの講義を受けたことがあり、かなり理解が出来ているため。難なく、理解は出来た。
問題は、個々のファイル内の記述である。これを理解するためには、このまま突き進み、一通り参考書を終えて、また戻ってこれば徐々に理解出来ると思う。なので、理解をしようとするのではなくとりあえず受け止めよう。
<実行結果>
Ptna System prototype : ptna
> こんにちは
ptna:Random> いい天気だね
> そうだね
ptna:Random> 君はパーリーピーポー
> まじで
ptna:Random> 10円拾った
> 良かったね
ptna:Random> いい天気だね
> 夜だよ
ptna:Random> いい天気だね
> そうだね
ptna:Random> 10円拾った
> 良かったね
ptna:Random> 10円拾った
>
バイバイ
> こんにちは
ptna:Random> いい天気だね
> そうだね
ptna:Random> 君はパーリーピーポー
> まじで
ptna:Random> 10円拾った
> 良かったね
ptna:Random> いい天気だね
> 夜だよ
ptna:Random> いい天気だね
> そうだね
ptna:Random> 10円拾った
> 良かったね
ptna:Random> 10円拾った
>
バイバイ
なんか、これを続けていけば人工知能を開発出来るようになるんだと思って勉強しているので、ワクワクしてしょうがない。