3266006 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

傀儡師の館.Python

傀儡師の館.Python

Python で人工無能




Python で人工無能

ながーい時間をかけて、ちょっとずつ Python で
人工無能を作るのにチャレンジしてみるのだのコーナー




詳細については、各日記を参照のこと。


Python のインストール
(2002-11-17)


1) ダウンロード

日本Pythonユーザ会(PyJUG)のPython 2.2.2 日本語環境用インストーラ(Win32)のページに行って、Python 2.2.2 日本語環境用インストーラ(Win32)をダウンロード(しばらくたったら古くなってしまうので、PyJUG で一応最新のものかどうか確かめてくらはい)。

2) インストール

保存した python222jp-20021016.exe をダブルクリックしてインストール。インストールは普通の Windows のプログラムと同じなので、どんどん「はい」と「次へ」をクリックしていけばインストールできる(なんていい加減なんだ)。


IDLE を起動する
(2002-11-18)


1) IDLE の起動

IDLE は Python のプログラミングを行うための統合環境で、[スタート]-[すべてのプログラム]-[Python for Win32 jp]-[IDLE (Python GUI)] を選択すると起動できる (デフォルトのインストールだと C:python22jpToolsidleidle.bat を直接実行してもよい。ちなみに、これは Windows XP なので、Windows 9x なら[すべてのプログラム]ではなくて、[プログラム]とかだったかな)。

2) print による文字列の表示

print "文字列" で、好みの文字を表示してみる。

Tk *Python Shell*_ ×
File Edit Debug Window Help
Python 2.2.2(SJIS enhanced) (#37, Oct 15 2002, 15:30:03) [MSC 32 bit (Intel)] on win32
Type "copyright", "credits" or "license" for more information.
IDLE 0.8 -- press F1 for help
>>> print "おしゃべりしましょう。"
おしゃべりしましょう。
>>>
 


3) IDLE の終了

IDLEを終了するには、[File]メニューの[Exit]を選択してもいいし、右上の×をクリックしてもいいし、[Alt]キー+[F4]キーでもいい。


鸚鵡返しの術
(2002-11-19)

1) IDLE で日本語はちょっと問題あるので対処する

Tk *Python Shell*_ ×
File Edit Debug Window Help

>>> import sys
>>> def raw_input(prompt=’’)
    sys.stdout.write(prompt)
    return sys.stdin.readline()[:-1]
 


2) プロンプトを作る


Tk *Python Shell*_ ×
File Edit Debug Window Help

>>> name = raw_input(’あなたの名前は? ’)
あなたの名前は? ぼく
>>> print name
ぼく
>>> prompt = name + ’ > ’
>>> print prompt
ぼく >

 



3) おまけ付き鸚鵡返し

Tk *Python Shell*_ ×
File Edit Debug Window Help


>>> while 1:
   answer=raw_input(prompt)
   if not answer:
     break
   print "nあなたはn「%s」と言いましたね。 n" % answer

ぼく > こんにちは

あなたは
「こんにちは」と言いましたね。

ぼく > はい

あなたは
「はい」と言いましたね。

ぼく > そうそう

あなたは
「そうそう」と言いましたね。
ぼく >

 


4) リターンで終了


おみくじを無能に組み込む
(2002-12-18)

Tk *Python Shell*_ ×
File Edit Debug Window Help


>>> while 1:
   answer=raw_input(prompt)
   if not answer:
     break
   print "nあなたはn「%s」と言いましたね。 n" % answer

ぼく > こんにちは

あなたは
「こんにちは」と言いましたね。

ぼく > ららら

あなたは
「ららら」と言いましたね。


ぼく > おみくじ
小吉です。

ぼく > おみくじ
大吉です。


ぼく > やった!

あなたは
「やった!」と言いましたね。

 



import sys
import whrandom


def raw_input(prompt=’’):
sys.stdout.write(prompt)
return sys.stdin.readline()[:-1]

omikuji=[’大吉’, ’中吉’,’小吉’,’凶’,’大凶’]

name = raw_input(’あなたの名前は? ’)
prompt = name + ’ > ’
while 1:
answer=raw_input(prompt)
if answer == unicode(’おみくじ’):
print whrandom.choice(omikuji) + ’です。n’
elif not answer:
break
else:
print "nあなたはn「%s」と言いましたね。 n" % answer

シングルクォートやダブルクォートは半角にすること。



ロボット的鸚鵡返しの術
(2003-01-06)


Tk *Python Shell*_ ×
File Edit Debug Window Help


あなたの名前は? 傀儡師

傀儡師 > 今日は寂しいよ。

「キョー ワ サビシイ ヨ 。」 なんて、間抜け だね。

傀儡師 > 今日は元気だよ。

「キョー ワ ゲンキ ダ ヨ 。」 なんて、幸せ だね。

傀儡師 > 今日は笑える。
「キョー ワ ワラエル 。」 なんて、純粋 だね。


 
#!/usr/bin/env python 
 
import sys
import whrandom
from popen2 import popen2

def raw_input(prompt=’’): 
  """プロンプトを表示して、入力を得て、末尾の1文字(改行)を削除して返す。 
     @prompt 入力を促すためのプロンプト文字列 
  """ 
  sys.stdout.write(prompt) 
  return sys.stdin.readline()[:-1] 
def keitaiso_kaiseki(s): 
  """MeCab で形態素解析した結果を返す。 
     解析結果は、形態素ごとにディクショナリ形式で格納したリスト。 
     @s 解析する文字列 
  """ 


  fi, fo = popen2(’"c:¥¥program files¥¥mecab¥¥bin¥¥mecab"’) 
  fo.write(s) 
  fo.close() 
  klist = fi.read() 
  fi.close() 
  sentence = [] 
  for gyou in klist.split(’¥n’): 
    keitaiso = gyou.split(’¥t’) 
    dic = {} 
    if len(keitaiso) == 2: 
      dic[’表層形’]= keitaiso[0] 
      n = keitaiso[1].split(’,’)  
      dic[’品詞’]=n[0] 
      dic[’品詞細分類1’]=n[1] 
      dic[’品詞細分類2’]=n[2] 
      dic[’品詞細分類3’]=n[3] 
      dic[’活用形’]=n[4] 
      dic[’活用型’]=n[5] 
      dic[’原形’]=n[6] 
      dic[’読み’]=n[7] 
      dic[’発音’]=n[8] 
      sentence.append(dic) 
  return sentence 
 
def get_hatsuon(klist): 
  """形態素解析結果から「発音」を取得し文字列として返す。 
   
      getHatsuon を klist の各要素に適用し、 
      「発音」を取得して、1つの文字列に結合して返す。 
      @klist 形態素解析結果リスト 
  """ 
  # 各形態素の情報から「発音」を取り出してリストにする 
  hatsuon_list = map(getHatsuon, klist) 
   
  # 発音リストの要素をスペースを間にいれてつなげる 
  return " ".join(hatsuon_list) 
 
def getHatsuon(kinfo): 
  """形態素解析情報から「発音」を取り出して返す。 
 
     @kinfo 形態素解析の結果 
  """ 
  return kinfo[’発音’] 
 
def get_random_answer(rlist): 
  "リストの中からランダムに一つ選択して返す。" 
  return whrandom.choice(rlist)  
 
# メインのプログラムとして読み込まれたときには以下を実行 
if __name__ == ’__main__’: 
  # ランダム回答用のリスト 
  # この中から、ランダムに後で人工無能が選択して答える。 
  # おみくじと同じ。
 
  random_list =[’平和’, ’幸せ’, ’平凡’, ’悲壮’, ’不幸’, ’純粋’, ’間抜け’] 
 
  # 名前を入力させてプロンプトにする。 
  name = raw_input(’あなたの名前は? ’) 
  prompt = name + ’ > ’ 
  
 
  # 繰り返しに入る 
  while 1: 
    answer=raw_input(prompt) 
    # リターンだけなら終了 
    if not answer: 
      break 
    else: 
      # 入力を形態素解析する 
      klist = keitaiso_kaiseki(answer) 
      # ロボット返答用の発音を取得する 
      robot_answer = get_hatsuon(klist) 
      # おみくじ的返答をランダムに発生させる。 
      random_anser = get_random_answer(random_list) 
      print "¥n「%s」 なんて、%s だね。¥n" % (robot_answer, random_anser) 
  # 終わりだよん 
  print "バイバイ" 




© Rakuten Group, Inc.