[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 メーリングリストの案内