傀儡師の館.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.
X
Mobilize your Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: