[Tokyo.pm] Re: 単語を含む文字列の出現回数

shin honda dev @ license.to
2002年 11月 19日 (火) 03:53:31 CST


まことです。
仕事しながら書いてたので嘘がありましたので修正です^^;
テストしてないので、動かなかったりまちがってたらすみませんm(__)m
#所でなんでtokyo.pmなのでしょう?perlやcgiのMLのほうが...

> プログラムの意味が、私には良く理解できません。
> 出来れば、少し説明して欲しいです。
ついでなのでコメントをいれておきました。

#!/usr/bin/perl
use strict;
#######################################
# 定数定義
my $N             = 5;
my $outFileURI    = 'URI3WORD.uri';
my $outFileWORD   = 'URI3WORD.wod';
my $outFileWORDRE = 'URI3WORD.wre';
#######################################
# カウント処理
while (<>) {
  chomp;
  my $uri	= $_;
  ##### URIをカウント
  $URI{$uri}++;
  ##### 単語を取得
  my $word  = parse_word($uri);
  ##### 単語数をカウント
  $WORD{$_}+= $word->{$_}  for(keys %{$word});
  ##### 単語を含むURIをカウント
  $WORDRE{$_}++ for(keys %{$word});
}
#######################################
# ファイル出力
open(OUT, ">$outFileURI");
print OUT $_, "\t", $URI{$_}, "\n"	for(sort keys %URI);
close(OUT);
open(OUT, ">$outFileWORD");
print OUT $_, "\t", $WORD{$_}, "\n"	for(sort keys %WORD);
close(OUT);
open(OUT, ">$outFileWORDRE");
print OUT $_, "\t", $WORDRE{$_}, "\n"	for(sort keys %WORDRE);
close(OUT);
exit;
#######################################
# URIを渡すと$N文字以上の単語=>単語数のハッシュリファレンスを返す関数
my %cache;
sub parse_word {
  my $str  = shift;
  #既に処理した事のある文字列ならキャッシュを返す
  return $cache{$str} if($cache{$str});
  # 単語を探してカウントする
  my %word;
  while ($str =~ m|\b(\w{$N,})\b|g) { $word{$1}++ }
  # キャッシュにいれる
  $cache{$str} = \%word;
  #単語がキーで単語数が値のハッシュリファレンスをかえす。
  return $cache{$str};
}
1;

---------+---------+---------+---------+---------+---------+
SHIN HONDA            <makoto @ cpan.jp> "http://www.cpan.jp/"
          <makoto @ fes-total.com> "http://www.fes-total.com/"
FES Co., Ltd.        Tel:+81-46-278-1153 Fax:+81-46-275-0966




Tokyo-pm メーリングリストの案内