package sspi; #----------------------------- # 人工無脳『精霊石』試作I型 sspi-0.13 # #--------------------------- ユーザ定義 ----------------------------- $Name = 'muno'; # 人工無脳の名前 $UName = "anonym"; # 現在の話し相手 $DictFile = "mint.dic"; # 質問生成用辞書 #-------------------------------------------------------------------- my %Dict=(); my $strict_euc_char= '^(?:[\x00-\x7F]|[\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE][\xA1-\xFE])'; #-------------------------------------------------------------------- sub _load_element() { return if $Element; my (@list,$key,$cr,$tag); while(){ chomp; next if /^\#/; next if /^$/; ($key,$cr,$tag)=split /[, ]+/; push @list,$key; $Elem_cr{$key} =$cr; $Elem_tag{$key}=$tag; } #長い順にソート @Element = sort {length($b)-length($a);} @list; } sub _load_dic() { #return if(%Dict); open(DICT,$DictFile) or die ("$DictFile not found"); while() { /^([^ ]+) ([^\n]+)/ && do{ $Dict{($1)}=($2); }; } close DICT; } sub _parse($) { my $input=shift; my $cr=1; my @tag=(); my ($t,$val,$imp_flag); _load_element(); foreach $pattern (@Element) { if($input =~ s/$pattern/ /){ $cr *= $Elem_cr{$pattern}; $t = $Elem_tag{$pattern}; if($t eq "imp_deny") { $imp_flag++;} elsif(length($t)>0) { push (@tag,$t);} } } $cr *=-1 if($cr>0 && $imp_flag!=0); return $cr unless wantarray; my @residue=sort {length($b)-length($a);} split(/ /,$input); return ($cr,$residue[0],join(",",@tag)); } sub _expand($) { my $key=shift; my @value=split(/,/, $Dict{$key}); my $str=$value[rand(@value)]; $str =~ s/\%uname\%/$UName/g; $str =~ s/\%name\%/$Name/g; $str =~ s/(\$[^ \$]+\$)/ &_expand($1) /ge; return $str; } sub reply($) { $input=shift; my $query=""; #時々質問する if(rand(1)<0.6) { _load_dic; $query= "◆". _expand '$QUERY$'; } my $retval=join(",",_parse($input)); return "$retval $query"; } 1; #-------------------------------------- # エレメント定義 # syntax: # 文字列,cr,tag # または # tag,文字列,文字列,,,,,, # # 文字列は会話分の一部,crは確信度修飾子で,tagには文字列が人工無脳にとって # 何を意味するかを示すタグが格納される。 # IMP_DENIAL 暗黙の否定 # T_MUNO 人工無脳自身。ユーザから見れば二人称 # T_USER ユーザ自身。ユーザから見れば一人称 # T_AGE 年齢 # T_NICK ニックネーム # T_GENDER 性別 # T_GENDER_MALE 男 # T_GENDER_FEMALE 女 # T_BIRTHDAY 誕生日 # T_JOB 職業 # T_FAVORITE 好きなもの # T_SOUL soul # T_PARTY 擬人 # T_ISSUE イシュー # T_WEBPAGE ページ # T_FOOD 食べ物 # T_HOBBY 趣味 # T_GAME ゲーム __DATA__ # 肯定語と無意味な言葉(crに影響を与えないので除去) そう ,1 そうです ,1 はい ,1 ええと ,1 うん ,1 うーん ,1 えーっと ,1 それは ,1 だよね ,1 です ,1 ですよ ,1 。 ,1 # 明示的な否定語 じゃない? ,-1 ない ,-1 ではない ,-1 わけない ,-1.5 わけあるか ,-1.5 ない ,-1 そうでもない ,-0.8 そんなことない ,-0.9 ちがう ,-1 違う ,-1 ちがいます ,-1 違います ,-1 いいえ ,-1 そうかな ,-0.6 だめ ,-1 ダメ ,-1 駄目 ,-1 # 暗示的な否定語 あんまり ,-0.5 ,imp_deny それほど ,-0.5 ,imp_deny そんなに ,-0.5 ,imp_deny あまり ,-0.5 ,imp_deny ぜんぜん ,-1 ,imp_deny 全然 ,-1 ,imp_deny 全く ,-1 ,imp_deny まったく ,-1 ,imp_deny ほとんど ,-0.8 ,imp_deny # 確度修飾 絶対 ,2 ぜったい ,2 必ず ,2 かならず ,2 大 ,2 気味 ,0.6 ないことない ,0.5 きっと ,0.5 少し ,0.7 すこし ,0.7 かなり ,0.8 たぶん ,0.4 多分 ,0.4 おそらく ,0.5 もしかして ,0.2 だろう ,0.6 だと思う ,0.6 だとおもう ,0.6 思う ,0.6 おもう ,0.6 思いま ,0.6 おもいま ,0.6 おそらく ,0.7 ちょっと ,0.3 そこそこ ,0.5 みたい ,0.6 かなり ,0.5 きっと ,0.3 かもね ,0.5 かもしれない ,0.5 かも ,0.5 かな ,0.8 大抵 ,0.7 たいてい ,0.7 大体 ,0.8 だいたい ,0.8 はずだ ,0.6 はずよ ,0.6 はず ,0.6 やや ,0.4 みたい ,0.9 かな ,0.8 らしい ,0.4 #確度を与えない しらない ,0,SI_DONT_KNOW 知らない ,0,SI_DONT_KNOW わからない ,0,SI_DONT_KNOW 分からない ,0,SI_DONT_KNOW 分らない ,0,SI_DONT_KNOW わからん ,0,SI_DONT_KNOW 分からん ,0,SI_DONT_KNOW 分らん ,0,SI_DONT_KNOW 知るか ,0,SI_DONT_KNOW しるか ,0,SI_DONT_KNOW しらん ,0,SI_DONT_KNOW 知らん ,0,SI_DONT_KNOW わからん ,0,SI_DONT_KNOW 分らん ,0,SI_DONT_KNOW 分からん ,0,SI_DONT_KNOW # T_MUNO 人工無脳自身。ユーザから見れば二人称 ミント ,1,T_MUNO みんと ,1,T_MUNO おまえ ,1,T_MUNO あなた ,1,T_MUNO 君 ,1,T_MUNO あんた ,1,T_MUNO きみ ,1,T_MUNO ミントちゃん ,1,T_MUNO ミントさん ,1,T_MUNO みんとちゃん ,1,T_MUNO みんとさん ,1,T_MUNO 人工無脳 ,0.2,T_MUNO # T_USER ユーザ自身。ユーザから見れば一人称 ぼく ,1,T_USER 僕 ,1,T_USER わたし ,1,T_USER 私 ,1,T_USER あたし ,1,T_USER 俺 ,1,T_USER おれ ,1,T_USER おいら ,1,T_USER わし ,1,T_USER ワシ ,0.8,T_USER # T_AGE 年齢 歳 ,1,T_AGE 年齢 ,1,T_AGE 年 ,0.4,T_AGE # T_NICK ニックネーム あだな ,1,T_NICK ニックネーム ,1,T_NICK ニック ,1,T_NICK あだ名 ,1,T_NICK # T_GENDER 性別 性別 ,1,T_GENDER # T_GENDER_MALE 男 おとこ ,1,T_GENDER_MALE 男 ,0.2,T_GENDER_MALE 男性 ,1,T_GENDER_MALE おかま ,-0.4,T_GENDER_MALE ホモ ,-0.3,T_GENDER_MALE オス ,1,T_GENDER_MALE # T_GENDER_FEMALE 女 おんな ,1,T_GENDER_FEMALE 女 ,0.2,T_GENDER_FEMALE 女性 ,1,T_GENDER_FEMALE レズ ,-0.4,T_GENDER_FEMALE メス ,1,T_GENDER_FEMALE # T_BIRTHDAY 誕生日 誕生日 ,1,T_BIRTHDAY たんじょうび ,1,T_BIRTHDAY # T_JOB 職業 職業 ,1,T_JOB しごと ,0.6,T_JOB お仕事 ,1,T_JOB # T_FAVORITE 好きなもの 好き ,1,T_FAVORITE すき ,1,T_FAVORITE 嫌い ,-1,T_FAVORITE きらい ,-1,T_FAVORITE 気にい ,1,T_FAVORITE 気に入らん ,-1,T_FAVORITE 気にいらん ,-1,T_FAVORITE # T_SOUL soul # T_PARTY 擬人 # T_ISSUE イシュー こと ,1,T_ISSUE 事 ,1,T_ISSUE 物 ,1,T_ISSUE もの ,1,T_ISSUE # T_WEBPAGE ページ ホームページ ,1,T_WEBPAGE ページ ,1,T_WEBPAGE サイト ,1,T_WEBPAGE # T_FOOD 食べ物 食べ物 ,1,T_FOOD 好物 ,1,T_FOOD 食い物 ,1,T_FOOD たべもの ,1,T_FOOD くいもの ,1,T_FOOD こうぶつ ,1,T_FOOD 料理 ,1,T_FOOD 菓子 ,1,T_FOOD 果物 ,1,T_FOOD # T_HOBBY 趣味 趣味 ,1,T_HOBBY ホビー ,1,T_HOBBY # T_GAME ゲーム ゲーム ,1,T_GAME