• 締切済み

解析機能について

おはようございます.毎回お世話になっております. IDを紛失してしまい,前回まででご回答いただいたのにも関わらず,返信できず申し訳ありませんでした; 今回は前回までの質問と結果を踏まえ,質問させていただきます. 私は現在ホームページの解析機能をいじっています. 解析機能のベースとなっているのは下記で配布されているものです. URL記載失礼します. http://www7a.biglobe.ne.jp/~wwwwww/analyzer/ 私の追加として,検索ワード解析機能(word,word2の部分)に新たにword3を設けて,word2までで分割された各単語を集計し表示させようと思っております. 現在検索ワードの表示はできているのですが,変数がマッチしていないためか,うまく集計してくれません. 以下に追加部分のコードを記載します. elsif($FORM{'mode'} eq "word3") { push my @search_words, $word; my %word_of = map {$_ => 0} @search_words ; foreach my $search_key ( keys %word_of ) { foreach my $words ( keys %word_of ) { $word_of{$search_key}++ if $words =~ /\Q$search_key\E/; } } foreach ( sort ( keys %word_of ) ){ print = qq[<table width="600"><td width="400">[$_ ]</td><td width="50"> $word_of{$_} 件</td><td with ="150"><img src="bar.gif" width=$word_of{$_} height=10></td></table>\n]; } } 初歩的なところで間違っている可能性もあるかもしれませんが,おわかりになりましたら,ご助力ください. 不明な点などございましたら随時お答え致します. よろしくお願いします.

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

う~ん,「単語の格納形式がど~のこ~の」となると, 実際にどうなっているのかを吐かせた方がいいと思いますね. それも, (形からおそらく CGI かなんかでしょうから) 別途「それ用」のログファイルを作ってそっちに出力させる. で, 例えば open LOG, '>>', '/some/path/to/log.txt'; print LOG join(', ', map{ qq("$_") } @search_words), "\n"; close LOG; my %word_of = map {$_ => 0} @search_words ; のように出力させて, その結果をみる.

meltykiss
質問者

補足

回答ありがとうございます.ならびに,返信が遅れてすみません; 表示形式の問題かもしれませんが,出力された内容をtxtに張り付けしてみると,既存の機能で集められた語群は, あい -------------------------- あいう -------------------------- のように,仕切りとなるハイフンと改行が見られました. これが適切に処理されない原因でしょうか.

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

とりあえず手元ではこんなプログラムで (それなりに) 期待されるはずの結果が出ていると思いますが.... @search_words = qw(foo bar foobaz barfoo baz); my %word_of = map {$_ => 0} @search_words; for my $search_key (keys %word_of) { for my $words (keys %word_of) { $word_of{$search_key}++ if $words =~ /\Q$search_key\E/; } } for (sort keys %word_of) { print qq($_ => $word_of{$_}\n); } 「検索ワード」のなかに空白が入っているとかいうことはないですよね?

meltykiss
質問者

お礼

お礼から失礼します. いただいたコードを動かしてみました. 私も実行済みなのですが,自分でハッシュ(または配列)を与えたときには正常に動くコードなのですが,配布されている解析機能のコードに入れると正常に動作しなくなってしまいます. プログラム自体は合ってるとすると,単語の格納形式が違うからなのでしょうか?

meltykiss
質問者

補足

回答ありがとうございます! いただいたコードを動作させてみたいと思います. >「検索ワード」のなかに空白が入っているとかいうことはないですよね? 空白とは「Perl 入門」のような単語のことですか? それならば入っていますが,今追加しようとしているコード単体では空白が含まれている単語がハッシュに入っていても処理してくれました.

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「うまく集計してくれない」とは, 具体的にはどのように「うまく集計してくれない」のですか?

meltykiss
質問者

補足

回答ありがとうございます. 1,検索ワードの数が全て1件になってしまう. 2,同一の単語が複数回表示されてしまう. の2点です. 2は,同一の単語が$word内にあるのならば,集計されて表示されるのは1つのみ,1は単語の数により値が変動するのがそれぞれ求める動作です.

関連するQ&A