CGI study


既存のCGIスクリプトをベースに考えてみる。
     

What's NEW!

11/10/2018: "BLUE" ver. 6.2.0 up。「意識の積み木の部屋」。
8/25/2011: "ORANGE" ver. 5.1.4 up。
2/3/2008: 「5. 簡易文節分析しよう」up。




1. 設定しよう!

freewebのcgi用ディレクトリ"cgi-bin"を新規作成し、サンプルスクリプトをFTPした。同時に呼び出し用htmlファイルも"cgi-bin"にFTPした。(これで本当に良かったのかはっきりしていないが、動作chk OKだったのでとりあえず良しとする!?)今回FTPソフトを初めて使用するが、WS_FTP95 LEが英語版だったので少々心もとない。パーミッション設定などが複雑になったら混乱するかも。(freeweb推奨ソフト!?の方が使い勝手が良いかも。)CGIちょー入門にはファイルはフォルダごとFTPできるとあったが、一つ一つやった方がうまく行くようだ。パーミッション設定はFTPソフトで行った。(7/9/00)


2. 既存スクリプトを応用しよう!

現在のAI-COMシステム:
"BLUE" ver. 6.1.0 「意識の積み木の部屋」
"ORANGE" ver. 5.1.4

改行コードについては、異論もあるようだが取りあえず以下の様にした。
$message =~ s/\r\n\n//g;
$message =~ s/\r\n//g;
$message =~ s/\n//g;
$message =~ s/\r//g;
(「とほほのWWW入門」中に近い例文があり参考にした。)(5/5/2004)

UNIX改行コードのせい(?)で混乱。".data"のファイルの行末の文字列を検索時に読み込むと、目に見えない改行コードが付加されているため、「(1)別の".data"ファイルに書き込むと改行されてしまう。(2)検索した文字列をさらに検索に使用しようとすると、ヒット数"0"となってしまう。」などの問題が発生した。とりあえず行末にダミーの文字列を追加することで対処。(8/27/00)

サンプルデータベーススクリプト: "SimpleDB"実行完了。ただし、POST methodが動作せず、GET methodに修正。(7/20/00)


3. 文字コードをEUCに統一しよう!

htmlで文字コードを指定していなかったことが文字化けの原因のよう。

・print "Content-type: text/html; charset=euc-jp\n\n";
をそれぞれhtmlとCGIに追記した。(「とほほのWWW入門」を参照した。)(1/5/2004)

S-JISコードでは文字化けから解放されないため、全部の文字コードをEUCに変更した。基本的には転送時に文字コードを変換する設定にし、全ファイルを再FTPした。また、CGIファイルはjcode.plを使用し、入力部分を文字列毎にEUCに変換した。

require 'jcode.pl';
&jcode'convert(*$A_1, 'euc');
&jcode'convert(*$A_2, 'euc');
...など。

infoseekではjcode.plを各自でFTPする必要は無いということで、上記でOKだった。今回FTPにFFFTPを使用した。日本語を扱うなら日本語対応のソフトがやっぱり一番。(4/23/2002)


4. 順番にならびかえてみよう!

sortには、Schwartzian Transform を使用した。

あらかじめ"temp2"ファイルを用意し以下の内容を書き込んでおく。
A 10 い
A 2 あ
C 7 お
B 2 い
C _ え

# スクリプト例
$candidate = "temp2";
open (IN,"$candidate") || die "Read Error\n";
@candidate = <IN>;
close (IN);
@sortd = map {$_->[0]}
sort {$a->[2] <=> $b->[2]}
map {[$_, split / /]} @candidate;

print XXX "@sorted\n";
で以下の様に改行された状態で出力される(XXX: ファイルハンドラ)。
C _ え
A 2 あ
B 2 い
C 7 お
A 10 い

「_」は数値より小さいと判断された。
配列要素の区切りが/ /でもちゃんとsortした。(5/2/2003)


5. 簡易文節分析しよう!

半角英数、漢字、カタカナを抽出(大崎 博基氏の「Perlメモ」を参照した。)
# 全角カタカナ(拡張) [ァ-ヶ・ーヽヾ]
$ZkatakanaExt = '(?:\xA5[\xA1-\xF6]|\xA1[\xA6\xBC\xB3\xB4])'; # EUC-JP
# 漢字←漢字については文字コード表などを参考に以下とした。
$kanji = '(?:[\xB0-\xF4][\x00-\xFF])'; # EUC-JP

$ascii = '[\x00-\x7F]';
$twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]';
$threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]';
while ($A_1 =~ /\G(?:$ascii|$twoBytes|$threeBytes)*?([A-Za-z0-9_]+|(?:[\xB0-\xF4][\x00-\xFF])+|(?:\xA5[\xA1-\xF6]|\xA1[\xA6\xBC\xB3\xB4])+)/g){
push(@word, $1);
}
$word1 = $word[0];
$word2 = $word[1];

(2/3/2008)


6. Perl開発環境(工事中)

+1 Windows環境
ActivePerl + httpd
(人工無能は考えるの【雑談2】に紹介あり。)
(これは「CGIちょー入門」にも一部説明あり。)
(解説http://cocohome.hp.infoseek.co.jp/cocohome/index.html)
+2 擬似unix環境(Cygwin)




update:
12/29/2018: "BLUE" ver. 6.2.0 up。Yahooジオシティーズのサービス終了に伴い、サーバーをXREAに引っ越し。
3/24/2015: "BLUE" ver. 6.1.1 up。Yahooのperlプログラム更新(perl 5.18.2)対応して復活。
3/16/2013: "BLUE" ver. 6.1.0 up。APIをYahoo係り受け解析→Yahoo形態素解析に変更。
2/17/2013: "BLUE" ver. 6.0.1 up。一部入力に対する応答を修正。
2/10/2013: "BLUE" ver. 6.0.1 「意識の積み木の部屋」リリース。
8/25/2011: AI-COM "ORANGE" ver. 5.1.4 up。キャラクタ"ORANGE"の表情表現できるようにして復活。
2/13/2011: AI-COM "BLUE" ver. 5.1.3 up。Yahooジオシティーズにサーバーを変更し復活。
8/12/2010: AI-COM "BLUE" ver. 5.1.2 up。自由入力の案内を「何か話しかけてみましょう」に変更。
7/4/2010: AI-COM "BLUE" ver. 5.1.1 up。新旧データベース混在のバグを修正。
6/13/2010: AI-COM "BLUE" ver. 5.1.0 up。リスナ/トーカ(対話をリードする聞き手/話し手)の関係を考慮してみた。
4/3/2010: AI-COM "BLUE" ver. 5.0.2 up。入力内容によりif処理追加。
3/7/2009: AI-COM "ORANGE" ver. 5.0.1 up。意味理解導入の展開。内容のカウンティング方法修正。
2/28/2009: AI-COM "ORANGE" ver. 4.4.5 up。画像データの一部更新。
1/16/2009: AI-COM "BLUE" ver. 5.0.0 up。意味理解導入の初期仕様。
1/1/2009: AI-COM "BLUE" ver. 4.4.4 up。内容のカウンティング方法修正。
9/14/2008: AI-COM "BLUE" ver. 4.4.3 up。入力内容によりif処理追加。
3/9/2008: AI-COM "ORANGE" ver. 4.4.2 up。「あいさつしてみる」にメイン・データベースからの検索追加。漢字区切りなどを利用した簡易文節分析導入。プチ「リスナ」的感覚を追加。
3/1/2008: AI-COM "BLUE" ver. 4.4.1 up。「あいさつしてみる」の応答にプチ「リスナ」的感覚を追加?!
2/3/2008: AI-COM "BLUE" ver. 4.4.0 up。「あいさつしてみる」にメイン・データベースからの検索追加。漢字区切りなどを利用した簡易文節分析導入。
10/14/2007: AI-COM "ORANGE" ver. 4.3.1 up。(キャラクタの表情イラストによる)プチ感情表現追加(挨拶のみ)。
6/4/2006: AI-COM "BLUE" ver. 4.3.0 up。プチ感情表現追加(挨拶のみ)。
2/12/2006: AI-COM "ORANGE" ver. 4.2.3 up。改行処理再修正。あいさつoutput一部修正。
5/5/2004: AI-COM "BLUE" ver. 4.2.3 up。(文字コードを指定。+改行処理再修正。)
1/5/2004: AI-COM "ORANGE" ver. 4.2.2 up。(文字コードを指定。+改行処理修正。)
1/2/2004: AI-COM "BLUE" ver. 4.2.1 up。(「挨拶」で語彙を少し増やす。+改行処理修正。)
12/7/2003: AI-COM "ORANGE" ver. 4.2.0 up。(「挨拶」で語彙を少し増やす。)
8/14/2003: AI-COM "ORANGE" ver. 4.1.0 release。(新キャラクタ。イラスト表示追加。)
5/5/2003: AI-COM "BLUE" ver. 4.0.1 up。(新規データ追記ができない不具合を修正。表示色変更。)
5/2/2003: AI-COM "BLUE" ver. 4.0.0 up。(数値の大きいものを選定する処理を追加。)
8/15/2002: AI-COM "BLUE" ver. 3.5.2 up。(「 〜 のことをどう思うか?」と聞いた際の回答を変更(検索結果1件時)。)
8/5/2002: AI-COM "BLUE" ver. 3.5.1 up。(訪問者の考えに対する考え(agree/not agree)を問う設問での回答(述部にヒットした場合)を変更。検索結果が1件時の回答も変更。)
7/25/2002: AI-COM "BLUE" ver. 3.5.0 up。(「 〜 のことをどう思うか?」と聞いた際の回答(述部にヒットした場合)を変更。)
6/22/2002: AI-COM "BLUE" ver. 3.4.1 up。( 「挨拶」でランダム変数の設定ミスを修正。)
4/23/2002: AI-COM "BLUE" ver. 3.4.0 up。( 文字コードをEUCに統一。"prototype"記載を削除。)
12/22/2001: prototype ver. 3.3.0 up。( 「挨拶」で特定の入力への応答追加。)
12/11/2001: prototype ver. 3.2.0 up。( freeweb→infoseek対応。)
7/29/2001: prototype ver. 3.1.1 up。( 「挨拶」でランダム変数を統一。)
7/8/2001: prototype ver. 3.1.0 up。( 「挨拶」で特定の入力への応答追加。)
3/10/2001: prototype ver. 3.0.1 up。( 「挨拶」表現変更。)
3/3/2001: prototype ver. 3.0.0 up。( 「挨拶」設問追加。)
2/25/2001: prototype ver. 2.3.3 up。( 設問数を3→2(+1)に変更。)
2/24/2001: prototype ver. 2.3.2 up。(「 〜 のことをどう思うか?」と聞いた際の回答(該当するものが無い場合)を変更。)
2/3/2001: prototype ver. 2.3.1 up。(ページを少し見やすく。)
1/23/2001: prototype ver. 2.3.0 up。(設問実行後の全ページに過去ログを追加。)
1/7/2001: prototype ver. 2.2.0 up。(一部記号のパターンリプレース・スクリプトを追加。)
9/6/00: prototype ver. 2.1.1 up。(設問選択ページにリンクを設定。)
9/5/00: prototype ver. 2.1.0 up。(訪問者の考えに対するAI-COMの考え(agree/not agree)を問う設問で「他に意見がある場合」の回答を変更。)
8/27/00: prototype ver. 2.0.0 up。(設問選択ページに過去ログを追加。)
8/17/00: prototype ver. 1.3.1 up。(AI-COMへの質問への回答を最新の物一つのみに変更。)
8/6/00: prototype ver. 1.3.0 up。(訪問者の考えに対するAI-COMの考え(agree/not agree)を問う設問を追加。)
7/29/00: prototype ver. 1.2.0 up。(配列の設定変更。)
7/21/00: prototype ver. 1.1.0 up。(カラー、言葉を少しそれらしく。)
7/20/00: prototype ver. 1.00 up。
7/9/00: geocitiesからfreewebへリンク。
7/7/00: freewebへ登録完了。
6/15/00: CGI study start



Home:
Total program index

メール