人工知能(2)

<program>

class Dictionary:

def __init__(self):
self.random=
rfile=open('dics/random.txt','r',encoding='Shift-JIS')
r_lines=rfile.readlines()
rfile.close()

self.random=
for line in r_lines:
str=line.rstrip("\n")

if(str!=""):
self.random.append(str)

pfile=open('dics/pattern.txt','r',encoding='Shift-JIS')
p_lines=pfile.readlines()
pfile.close()
self.new_lines=

for line in p_lines:
str=line.rstrip("\n")

if(str!=""):
self.new_lines.append(str)

self.pattern={}

for line in self.new_lines:
ptn,prs=line.split("\t")
self.pattern.setdefault("pattern",).append(ptn)
self.pattern.setdefault("phrases",[]).append(prs)

 

<result>

ValueError: not enough values to unpack (expected 2, got 1)

 

前回の人工知能の記事での疑問点は解消し、かなり頭の悪い人工知能とのチャットを完成させることが出来た。その人工知能に感情を盛り込む勉強をしているが、エラーが出てきてしまい、解決が難しい。恐らく、プログラムの中にreturnか何かが1つ足りないことが原因だと思う。

 

前回の投稿からかなり期間が空いたが、その中で一つ気づいたことが。プログラムの問題は期間を空けて取り組むと解決することが多いなと思った。

人工知能

import tkinter as tk
from ptna import *
"""グローバル変数の定義
"""
entry = None
response_area = None
lb = None
action = None
ptna=Ptna("ptna")
def putlog(str):
  """対話ログをリストボックスに追加する関数
  @str 入力文字列または応答メッセージ
  """
  lb.insert(tk.END, str)
def prompt():
  """ピティナのプロンプトを作る関数
  """
  p=ptna.name
  if(action.get())==0:
    p += ":" + ptna.responder.name
  return p + "> "
def talk():
    """対話を行う関数
    ・Ptnaクラスのdialogue()を実行して応答メッセージを取得
    ・入力文字列および応答メッセージをログに出力
    """
    value = entry.get()
    #入力エリアが未入力の場合
    if not value:
      response_area.configure(text="なに?")
    #入力されていたら対話オブジェクトを実行
    else:
      #入力文字列を引数にしてdialogue()の結果を取得
      response = ptna.dialogue(value)
      #応答メッセージを表示
      response_area.configure(text=response)
      #入力文字列引数にしてputlog()を呼ぶ
      potlog("> " + value)
      #応答メッセージを引数にしてputlog()を呼ぶ
      putlog(prompt() + response)
      #入力エリアをクリア
      entry.delete(0, tk.END)
#==============================================================================
# 画面を描写する関数
#==============================================================================
def run():
  #グローバル変数を利用するための記述
  global entry, response_area, lb, action
  #メインウィンドウを作成
  root = tk.Tk()
  #ウィンドウのサイズを設定
  root.geometry("880x560")
  #ウィンドウのタイトルを設定
  root.title("Intelligent Agent : ")
  #フォントの用意
  font = ("Helevetica", 14)
  font_log = ("Helevetica", 11)
  #メニューバーの作成
  menubar = tk.Menu(root)
  root.config(menu = menubar)
  #「ファイル」メニュー
  filemenu = tk.Menu(menubar)
  menubar.add_cascade(label = "ファイル", menu = filemenu)
  filemenu.add_command(label = "閉じる", command = root.destroy)
  #「オプション」メニュー
  action = tk.IntVar()
  optionmenu = tk.Menu(menubar)
  menubar.add_cascade(label = "オプション", menu = optionmenu)
  optionmenu.add_radiobutton(
    label = "Responderを表示",
    variable = action,
    value = 0
  )
  optionmenu.add_radiobutton(
    label = "Responderを表示しない",
    variable = action,
    value = 1
  )
  #キャンパスの作成
  canvas = tk.Canvas(
    root,
    width = 500,
    height = 300,
    relief = tk.RIDGE,
    bd = 2
  )
  canvas.place(x=370, y=0)
  img = tk.PhotoImage(file = "img1.gif")
  canvas.create_image(
    0,
    0,
    image = img,
    anchor = tk.NW
  )
  #応答エリアを作成
  response_area = tk.Label(
    root,
    width = 500,
    height = 10,
    bg = "yellow",
    font = font,
    relief = tk.RIDGE,
    bd = 2
  )
  response_area.place(x=370, y=305)
  #フレームの作成
  frame = tk.Frame(
    root,
    relief = tk.RIDGE,
    borderwidth = 4
  )
  #入力ボックスの作成
  entry = tk.Entry(
    frame,
    width = 70,
    font = font
  )
  entry.pack(side = tk.LEFT)
  entry.focus_set()
  #ボタンの作成
  button = tk.Button(
    frame,
    width = 15,
    text = "話す",
    command = talk
  )
  button.pack(side = tk.LEFT)
  frame.place(x=30, y=520)
  #リストボックスを作成
  lb = tk.Listbox(
    root,
    width = 42,
    height = 30,
    font = font_log
    )
  #縦のスクロールバーを作成
  sb1 = tk.Scrollbar(
    root,
    orient = tk.VERTICAL,
    command = lb.yview
  )
  #横のスクロールバーを作成
  sb2 = tk.Scrollbar(
    root,
    orient = tk.VERTICAL,
    command = lb.xview
  )
  #リストボックスとスクロールバーを連動させる
  lb.configure(yscrollcommand = sb1.set)
  lb.configure(xscrollcommand = sb2.set)
  #grid()でリストボックス、スクロールバーを画面上に配置
  lb.grid(row = 0, column = 0)
  sb1.grid(row = 0, column = 1, sticky = tk.NS)
  sb2.grid(row = 1, column = 0, sticky = tk.EW)
  #メインループ
  root.mainloop()
#==============================================================================
# プログラムの起点
#==============================================================================
if _name_ == "_main_":
  run()
 
- 実行結果 -
Traceback (most recent call last):
  File "ptnaForm.py", line 179, in <module>
    if _name_ == "_main_":
NameError: name '_name_' is not defined
 
写経を続けたものの '_name_' が定義されていないので、エラーで返って来ているのは理解できるが、問題はどのように定義したらいいのかという事。エラーの改善法を頑張って見つけたいと思います。

人工知能開発へ

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")
 def dialogue(self, input):
  """応答オブジェクトのresponse()を呼び出して
   応答文字列を取得する
   @param input ユーザーによって入力された文字列
   戻り値 応答文字列
  """
  return self.responder.response(input)
 def get_responder_name(self):
  """応答オブジェクトの名前を返す
  """
  return self.responder.name
 def get_name(self):
  """Ptnaオブジェクトの名前を返す
  """
  return self.name
class Responder:
 """応答クラス
 """
 def __init__(self, name):
  """Responderオブジェクトの名前をnameに格納
   @param name Responderオブジェクトの名前
  """
  self.name=name
 def response(self, input):
  """応答文字列を作って返す
   @param input 入力された文字列
  """
  return "{}ってなに?".format(input)
from ptna import *
#########################################################################################################################
#実行ブロック
#########################################################################################################################
def prompt(obj):
 """ピティナのプロンプトを作る関数
  戻り値 "Ptnaオブジェクト名:応答オブジェクト名 > "
 """
 return obj.get_name() + ":" + obj.get_responder_name() + "> "
print("Ptna System prototype : ptna") # プログラムの情報を表示
ptna = Ptna("ptna")
while True:
 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")
 def dialogue(self, input):
  """応答オブジェクトのresponse()を呼び出して
   応答文字列を取得する
   @param input ユーザーによって入力された文字列
   戻り値 応答文字列
  """
  return self.responder.response(input)
 def get_responder_name(self):
  """応答オブジェクトの名前を返す
  """
  return self.responder.name
 def get_name(self):
  """Ptnaオブジェクトの名前を返す
  """
  return self.name
 
<responder.py>
# coding: Shift-JIS
import random
class Responder:
 """ 応答クラスのスーパークラス
 """
 def __init__(self, name):
  """ Responderオブジェクトの名前をnameに格納
   @param name Responderオブジェクトの名前
  """
  self.name=name
 def response(self, input):
  """ オーバーライドを前提としてresponse()メソッド
   @param input 入力された文字列
   戻り値 空の文字列
  """
  return " "
 def get_name(self):
  """応答オブジェクトの名前を返す
  """
  return self.name
class RepeatResponder(Responder):
 """オウム返しのための行うサブクラス
 """
 def response(self, input):
  """ 応答文字列を作って返す
   @param input 入力された文字列
  """
  return "{}ってなに?".format(input)
class RandomResponder(Responder):
 """ ランダムな応答のための行うサブクラス
 """
 def __init__(self, name):
  """ Responderオブジェクトの名前を引数にして
   スーパークラスの__init__()を呼び出す
   ランダムに抽出するメッセージを格納したリストを作成
   @param name Responderオブジェクトの名前
  """
  super().__init__(name)
  self.responses=["いい天気だね","君はパーリーピーポー","10円拾った"]
 def response(self, input):
  """ 応答文字列を作って返す
   @param input 入力された文字列
   戻り値 リストからランダムに抽出した文字列
  """
  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円拾った
 >
バイバイ
 
なんか、これを続けていけば人工知能を開発出来るようになるんだと思って勉強しているので、ワクワクしてしょうがない。
 

ライフガード Becoming a lifesaver

東京へ引っ越し後の資金を調達するため。また、欲しかったモノを買うために、プールの監視員+トレーニングジムのトレーナーのアルバイトを始めた。


まだ、始めて3日目だけれど、プールの仕事は、ほぼほぼ覚えてしまってスムーズに仕事が出来るようになった。スタッフなので、トレーニングジムとプールがタダで使えるから、もう至れり尽くせり。


本題は、ここでは無くて、プールの監視員として働いている以上、事故を目撃する可能性がある。その為、溺者の救助、傷病者への手当て、心肺蘇生や人工呼吸、AEDなど。普通に生活していたら、経験出来ずに、身につくこともない。


しかし、僕はアルバイトと言う形ではあるが、人命救助の指導を受けている。

本当にここで仕事を始めてよかったと思う。何か起きた時に傍観者でいる自分は想像出来ないし、何か起きた時には即座に行動に移せる男になりたい。


ここまで自分は、色々な人に支えられて生きてきた。確かに、酷い事をしている人もいる。人を傷つける人もいる。

自分は、空が飛べるようなヒーローにはなれないけれども、ヒーローと呼ばれたい訳でもないけれども、ただ人を救える立場でありたい。ただそれだけ。人を傷つける事しか出来ない人間たちには出来ない、人を救うと言う事。これは、自分の使命だと肝に命じて。今ここに五体満足で生きていられる事に感謝をして、これからも全力で人命救助の指導を受けて行きます。


そして、どんな形であろうと、人を救える人を増やしていきたいです。しっかり覚えて、家族、大切な人たちをしっかり護れるように。体づくりも!

さて、プログラミング勉強しますか!!!


人は感謝を忘れてしまった途端、人ではなくなる。

健康な肉体には健康な精神が宿る

健康な肉体には健康な精神が宿る。

という言葉がすごく好きで、勉強や遊びも大切だけれども、トレーニングを取り入れる事でもっと高みを目指していけると考えています。
トレーニングというモノは中途半端だと結果が出ないので、理想にも近づくことが出来ない。理想を追い求め辛くても諦めてしまいそうな自分に鞭を打つ事を教えてくれるモノだと思っています。

なので、トレーニングをこれからも欠かす事なく、健康な肉体と健康な精神で勉強に励んで行こうと思います。

Being physicalcy and mentally healthy makes you feel more powerful.

I love this phrase so much.It's natural that everyone needs to study and play,but I think that work out is more important because work out is a good way to aim higher.

You can't improve your body and also mental without an effort.If you are half-baked,workout let you see neither results nor your ideal.It teaches you how important it is to be patient.

So,I'm going to continue to study with physicalcy and mentally health. 

PS: 橋本さん、いつもいい刺激と影響をありがとうございます。

自分の理想に一歩でも近づくために

https://acthouse.net/

ここのサイトに書いてある記事について。


IT × 英語 × ビジネス → 最強 だと思っています。間違いありません。


この記事に書かれている人のように自由に働けるようなスキルを身につけるためにはどうしたらいいのか。IT × 海外留学 しないといけないのか?を自分の経験から分析したところ。


自分の場合、英語の習得に関して言えば、まだ完璧ではないですが、国内でも留学をしなくとも、海外の人達となんの抵抗もなく英語でのコミュニケーションが取れるまでに成長出来ました。


個人的には、留学は手段であって、絶対的に必要な条件ではないと思っています。確かに、留学にはメリットがあります。例えば、文化に触れられる、友人が増える、語学学習に浸かる事が出来る。もちろん、デメリットは金銭面。金銭面さえ克服してしまえば、すごく魅力的です。

ですが、その留学での語学学習でも熱量の違いで習得に差が出てしまうのも事実。のほほんと学んでいきたい人は、短期間集中型ではなく、長期で留学をした方がいい人だと思います。


努力すれば、国内でも英語圏出身の人達と友達になる事が出来ます。英語が学べます。


なので、今回も記事の人の様なスキルを身につける事も国内でも可能だと感じました。金銭面で迷っている暇があれば、遠くても自己投資に熱量を。

迷っているその時間を勉強に当てていこう、自己投資していこう。そのような IT × 英語 in Japan コミュニティー探しに時間をかけていこうと思います。無ければ、作ればいい。


とりあえず、東京なら何でも出来る気がします。

Something wrong with my tablet.

f:id:crown_666:20170605134911j:plain

予期していなかった再起動または、予期していなかったエラーの発生。Windowsインストールが進まない。Windowsインストールのために”OK”を押して、インストールを再度開始させてください。”OK”を押しても同じ画面が…。PCにも繋がらないから、壊れたのか?


My tablet says that ”The computer restarted unexpectedly or encountered an unexpectedly error.Windows installation cannot proceed.To install windows,click ”OK” to restart the computer,and then restart the installation.” over and over again even though I tried to do that thousand times... Huh? I got stucked into it completely!



def restart_com(self):

 print(”The computer restarted unexpectedly or encountered an unexpectedly error.Windows installation cannot proceed.To install windows,click ”OK” to restart the computer,and then restart the installation.)


if(OK==True):

 return self

else:

 return self

という感じですかね。昨日に引き続き謎が増えました。プログラムでギャグが言えたら面白そう、プログラミングもっと勉強しないと!