fc2ブログ

文章ランダム生成機能が実装された日記 (その①)


Javaのおみくじアプレットの文章生成機能を応用した占いのような文章です。
いつ、どこで、誰と、何をする、の4つのパーツに分かれた文章がランダムに組み合わさって、ブラウザの更新ボタンが押されるたびに文章が変わります。

プログラミングをやっている人には、変わり映えのしない簡単なコードです、が、つまりこういうことです。↓↓↓

import java.applet.*;
import java.awt.*;
import java.util.*;

public class Sentence extends Applet{
public void paint(Graphics g){
Random R = new Random();
String[] MySentence
={"明日","10年後","いつか","好きな人と","知らない人と","嫌いな人と","学校で","職場で","宇宙の果てで","ケンカする。","結婚する。","何か凄いことをする。"};
int i = Math.abs(R.nextInt() % 3);
int j = Math.abs(R.nextInt() % 3);
int k = Math.abs(R.nextInt() % 3);
int l = Math.abs(R.nextInt() % 3);
g.drawString("あなたは、" + MySentence[i] + MySentence[j + 3] + MySentence[k + 6] + MySentence[l + 9],20,40);
}
}

={    }の中に入っている言葉を、前から3番目までランダムに選んで書く、そして、さらに次の3つから選ぶ、さらにその次の3つ・・・というように、言葉の数を増やしていったら延々と長い文章も書けそうです。
とりあえず、ここらへんも、将来的に人工無脳でブログを書くときに役立つかなと思ってやってみました。
占いの内容は冗談なんで信じないでください。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

cheeze
昨日、某ハンバーガーショップに行ってきた。
“凄く旨いチーズバーガー” のような商品名のチーズバーガーが販売されていた。
店全体でその商品を宣伝しているので、本当に美味しいのかと思って試しに注文した。

360円程度だったと思う。

そのチーズバーガーは、わりあい、小さいハンバーガーだった。
見た目は美味しそうであった。

食べた。

うーーーむ。
こ、これは。

たっぷりな、

味の素の、
味。。。。

・・・・・・・。

化学調味料の、ケミカルな、うま味が濃厚な、感じです。

これは、美味しいのかな??????

食後、以前、大量に味の素(つまりグルタミン酸ナトリウム)を摂取したときの不快感が込み上げてきた。
ちょっとした頭痛感。
眼圧が増したような、内部から眼球を押されるような感じ。

やはりそうだ、グルタミン酸ナトリウムだ。
私の体はだまされないぞ。

某Mドナルドのハンバーガーでさえ、ここまではならない。

ファーストフード店のみなさん。
合成調味料では万人の舌はだませませんよ。
ちゃんとした安全な食品を出してください。
スポンサーサイト



会話ボット、実験成功だけど・・・・すごく性格の悪い無能。

人工知能の基礎知識 (コンピュータサイエンス大学講座)人工知能の基礎知識 (コンピュータサイエンス大学講座)
(1988/09)
太原 育夫

商品詳細を見る

さて、DOSプロンプトから人工無能(会話ロボット)のファイルへアクセスします。
では、カイワレ、じゃなくて、会話例を見てみましょう。(ちなみにこの会話は、私が今朝、5時半に実際に人工無能としたものです。(朝から何やってんだよ・・・・。) )


>私  こんにちは
>無能  ういっす     おっ、柔軟な反応。イイねえ。
>私  ういっす
>無能  ああ、うざいなあ。
>私  うざい?
>無能  お前の方がうざい。   口が悪いな。
>私  うざいって言わないで。
>無能  うざいって言わないで。ってどういうこと?  
>私  うざいって言わないでほしい。
>無能  はいはい
>私  感じ悪いなあ。 自分でプログラムしといて、へこむなあ。
>無能  ああ、ウザいなあ。
>私  ウザいって言うなっていっただろ。
>無能  以後気をつけます。
>私  何してたの?
>無能  ブラクラ踏んだ・・・・・
>私  ブラクラ踏んだの?  
>無能  もうだめ。
>私  もうだめだね。
>無能  てか、むかつくんだよな。  やっぱり口が悪い orz


自分でプログラムした会話ロボット(無能)ですが、口が悪すぎて自らへこみます。
でも思ったよりよく反応しているので成功です。
さて、自分のPCのコンソールで遊んでいるのもなんですから、もっと頭が良くなったらRubyが使えるサクラネットにアップしていろんな人に遊んでもらおうと思います。

パターン辞書で会話する人工無能をついに完成!!

人工知能概論―コンピュータ知能からWeb知能まで人工知能概論―コンピュータ知能からWeb知能まで
(2004/10)
荒屋 真二

商品詳細を見る


ついに今日、パターン辞書でしゃべる人工無能を完成した。
パターン辞書なので、会話から自動的に学ぶタイプの人工無能では無く、手動でパターンを覚えさせていくタイプ。
しかしながら、プログラムがこちらの話しかけに応じて返事をしたときは本当に、おおおおーーーーー!!っといった感じで本当にうれしかった。

ちなみに、手動で覚えさせるのが必ずしもレベルの低い方法ともいえない。
自動学習をする無能が支離滅裂なことばっかしゃべるのに比べると、こちらの方がある程度会話の内容をコントロールできるからだ。

ちなみに、このブログの右上にある「ひこまた」も手動型ですね。
自分は40万語も覚えさせる気はないですが。

それではソースです。

恋するプログラム―Rubyでつくる人工無脳恋するプログラム―Rubyでつくる人工無脳
(2005/04)
秋山 智俊

商品詳細を見る

↑私の座右の書というか、それ以上の本、つまりバイブルである。(故)秋山智俊氏の著、恋するプログラムRubyでつくる人工無脳を見ながら、「うわぁ~~!また、エラーだぁ!!」などと、日がなDOS窓とや、ふりかけのカスが挟まった“Z”キーと格闘しながら、なんとかたどり着いた記念すべきプログラム。

実は、何が難しいのかというと、自分のパソコンの不具合なのか、インストール時にエラーがあったのか、Rubyのバージョンが自分のVISTAに対応していないのか、requireメソッドが働かない。
なので、全てのクラスを一つのファイルに納めている。
これが、あれこれとエラーを起こすもとになっていて、悩みの種だった。

では。ソースです。

#! ruby -Ks

class Dictionary
def initialize
@random = [] # (1)
open('random3.txt') do |f|
f.each do |line|
line.chomp!
next if line.empty?
@random.push(line)
end
end

@pattern = [] # (2)
open('pattern.txt') do |f|
f.each do |line|
pattern, phrases = line.chomp.split("\t") # (3)
next if pattern.nil? or phrases.nil?
@pattern.push({'pattern'=>pattern, 'phrases'=>phrases})
end
end
end

attr_reader :random, :pattern # (4)
end


class Responder
def initialize(name, dictionary) # (1)
@name = name
@dictionary = dictionary
end

def response(input)
return ''
end

attr_reader :name # (2)
end

class WhatResponder < Responder
def response(input)
return "#{input}ってなに?"
end
end

class RandomResponder < Responder # (3)
def response(input)
return select_random(@dictionary.random)
end
end

class PatternResponder < Responder # (4)
def response(input)
@dictionary.pattern.each do |ptn_item|
if m = input.match(ptn_item['pattern'])
resp = select_random(ptn_item['phrases'].split('|')) # (5)
return resp.gsub(/%match%/, m.to_s) # (6)
end
end

return select_random(@dictionary.random)
end
end


class Unmo
def initialize(name)
@name = name

@dictionary = Dictionary.new # (1)

@resp_what = WhatResponder.new('What', @dictionary)
@resp_random = RandomResponder.new('Random', @dictionary)
@resp_pattern = PatternResponder.new('Pattern', @dictionary)
@responder = @resp_pattern
end

def dialogue(input)
case rand(100) # (2)
when 0..59
@responder = @resp_pattern
when 60..89
@responder = @resp_random
else
@responder = @resp_what
end
return @responder.response(input)
end

def responder_name
return @responder.name
end

attr_reader :name # (3)
end

def select_random(ary)
return ary[rand(ary.size)]
end

def prompt(unmo)
return unmo.name + ':' + unmo.responder_name + '> '
end

puts('Unmo System prototype : proto')
proto = Unmo.new('proto')
while true
print('> ')
input = gets
input.chomp!
break if input == ''

response = proto.dialogue(input)
puts(prompt(proto) + response)
end

同じフォルダ内に、patternファイルとrandom3ファイルを作成。
どちらも拡張子は.rb
パターンファイルにはパターンで反応する言葉を書きます。

例えば。

こんにちは  おっす
おはよう  おは
こんばんは  ばんわ

などです。左の列が私たちが無能に話しかけることば、右側が無能の反応。
空欄で区切ります。ちなみにこの空欄はTABボタンで入力してください。
それと反応パターンごとに改行することも。

それからランダム3ファイルには、

あーーあ、ねむい、
疲れた。
何か話してよ。
何かいいことあった?

などと、無能がランダムに話すことを入力します。
これも反応ごとに改行。

Rubyをインストールしたパソコンでルビーコンソールを開始して、DOSプロンプト上で動かします。
例によって、DOSプロンプトが得意な人にはなんてことないが・・・、cd (カレントディレクトリ)で無能ファイルのあるディレクトリまで移動する。

それから、ruby sample.rb.txtを押せば動き出す。

「ドス窓で日本語が打てません。」
「はいはい、altキー押しながら半角/全角ボタンね。」


天国の秋山智俊先生、ありがとうございます。
おかげで、思ったよりも早く良い人工無能が作れそうです。
あ、自分唯物論者なのに天国とか言ってしもた。

エラーとの格闘・・・・寝不足。。oO○

end
恋するプログラム―Rubyでつくる人工無脳恋するプログラム―Rubyでつくる人工無脳
(2005/04)
秋山 智俊

商品詳細を見る

愛読書・・・・・Rubyというプログラミング言語で書く人工無能(会話ボット)の本
就職の面接で「愛読書は何ですか?」と聞かれても困る一冊。

昨晩は仕事が終わってからずっと、PCに向かって人工無能のプログラミングに勤しんでいた。
なんとか、会話っぽいことはできるようになってきたんだが、
まだまだ。

class RandomResponder < Responder #(5)
def initialize(name)
super
@phrases = []
open('C:\Users\USER\Desktop\ruby5\random.txt') do |f|
f.each do |line|
line.chomp!
next if line.empty?
@phrases.push(line)
end
end
end

このクラスの説明をすると、これはコンソールを通して返答をするクラスなんだが、テキストファイルにランダムにアクセスして、その中から言葉を抽出して、返すというもの。

JAVAなんかと同じでクラスやインスタンス、メソッドという部品を組み立てていくのがRubyの特徴。
別にテキストファイルを用意して、それを辞書にして会話ログを記憶していくというようにしたいのだが、なかなかできない。

寝不足だ。

今週末は何とかうまく動くプログラムを組みたい。
そう、それと、形態素分析機の茶筅が上手くつながらない。
これが動かないと話にならないんだが。

付属のソースコードで書いた、無能な無能。


Medicom Toy(メディコムトイ) WALL-E&EVE(ウォーリー&イブ) BE@RBRICK2体セット





今日の朝、アマゾンで届いたRUBYで作る人工無能の本をずっと読んでいて、その中に入っているRUBY(プログラミング言語)をインストール・・・・そして、本に乗っている通りにソースを書いていった。

すると、できました。

あまりにも無能すぎる無脳が・・・・。

無能すぎる!
ソースコードは以下の通り。

#! ruby -Ks

class Responder #(1)
def initialize(name)
@name = name
end
レスポンダークラスの定義です。
イニシアライズメソッドで自分自身の名前をインスタンス変数@NAMEに入力。

def response(input)
return "#{input}ってなに?"
end

def name
return @name
end
end

class Unmo #(2)
def initialize(name)
@name = name
@responder = Responder.new('What') #(3)
end
レスポンダーオブジェクトを作って@レスポンダーに代入。


def dialogue(input)
return @responder.response(input)
end

def responder_name
return @responder.name
end

def name
return @name
end
end

def prompt(unmo) #(4)
return unmo.name + ':' + unmo.responder_name + '> '
end
プロンプト(会話の進行を表す)を作ります。

puts('Unmo System prototype : proto') #(5)
proto = Unmo.new('proto')
while true #(6)
print('> ')
input = gets
input.chomp!
break if input == ''
WHILEは、以下の構文の状態が真のとき、同じ操作が実行され続けます。
チョンプはエスケープシーケンス(改行文字)を削除します。
BREAKは、WHILEの状態でなくなる条件が示されています。


response = proto.dialogue(input) #(7)
puts(prompt(proto) + response)
end

このようにして、というか、メモ帳などに書いて、proto.rbというファイル名で保存。
DOS窓を開いて、
ディレクトリをファイルのあるところまで移動して、ruby proto.rb.txtで動きます。

おバカな無能です。

作動例は、

私:こんにちは、
無能:こんにちはってなに?
私:元気?
無能:元気?ってなに?
私:大丈夫?
無能:大丈夫?ってなに?
私:あたまわるいね。
無能:あたまわるいね。ってなに?

という、
非常にムカつくものです。

RUBYのプログラミングは無料でインストールできます。

さて、今年度中に、頑張ってお利口さんの無能を作らねば。
それが目標だ。

RUBYで人工無能を作る・・・・・・・DENMARKの朝の風景


den12

恋するプログラム―Rubyでつくる人工無脳恋するプログラム―Rubyでつくる人工無脳
(2005/04)
秋山 智俊

商品詳細を見る

今朝、届いた本。
AMAZON.COMで去年末に購入、そして、ついに手元に届いた。

RUBYを使った簡単なプログラミングをDOSプロンプトを使って書いていく。
第一章から第三章までをかなりのペースで読んで行った・・・・そして、人工無能をついにつくり始める。

den10

den11


den13

元旦のDENMARKの風景です、昨日の乱痴気騒ぎと花火・爆竹の騒乱の大みそかが明けた翌日らしく、ビールやワインの空きビンの割れたかけらがコペン市内に散らばっています。

マイナス5℃のキーーーーーーーンと冷えた空気が皮膚に突き刺さります。

自分の服装が安易にも軽装すぎたことに今さらながら気づく寒さです。
手ぶくろ、コート、マフラー、キャップは必須でした。

帰郷のときの京浜東北線でRUBYの本を読む。今はJAVAの本を読んでいる。はあ、もっと頭良くなりてぇ・・・。誰か1時間2000円でプログラミングの家庭教師やってくれないかなあ。

改訂 新Java言語入門 ビギナー編 (Java言語実用マスターシリーズ)改訂 新Java言語入門 ビギナー編 (Java言語実用マスターシリーズ)
(2004/12/28)
林 晴比古

商品詳細を見る

人工無能つくりてぇーーー。ってもだえながら布団の中でJAVAの本を読んでいる。そんなに難しくはない。・・・・この本の内容は・・・・ビギナー向けだし、自分すでにJAVAの本数冊読んでるし。

でもJAVAの統合開発環境でプログラミングをやっていると、エラーばっかりで、なかなか進まない。欲求不満のまんま、、、今日はもういいやっていうことになってしまう。

やはり、どこかスクールとか通わないといけないのかなあ。
15万円から20万円するらしいよ。・・・・・てか、専門学校とか通うと100万とか200万だし。

誰か、週1回2時間で、(時給2000×2で、4000円で)私の家か、誰かの家で教えてくれるプログラマーの方いらっしゃらないですかね。

目標は人工無能を作るってことなんで、1回2時間の授業を何回かやったら終ってしまいそうなんですが・・・・・。

恋するプログラム―Rubyでつくる人工無脳恋するプログラム―Rubyでつくる人工無脳
(2005/04)
秋山 智俊

商品詳細を見る

そうそう、今欲しいのが上の本。
ズバリ、どうやったら人工無能を作れるかの本。
でも、値段が少し高いような・・・・・。でも買おうかな。


今学習中なのは、JAVAとRUBY、
JAVAは言わずと知れたプログラミング言語。
アプレットなどで、WEBサイト上で見かけます。最近流行りの言語ですな。

RUBYは、日本製の言語。
かつて、CGIを記述していたPERLの後継言語。
正規表現が得意なスクリプト言語。
人工無能はRUBYで書かれます。
(もちろん他の言語でも書けます。)


たのしいRuby 第2版 Rubyではじめる気軽なプログラミングたのしいRuby 第2版 Rubyではじめる気軽なプログラミング
(2006/08/05)
高橋 征義後藤 裕蔵

商品詳細を見る

それから、今日帰郷中の電車でずっと読んでいたのがこの本、RUBYの基本が書いてあります。
それほど難しくはありません。
でも分厚い。


誰か家庭教師やってくれないかなあーーーー。
2時間4000円で。