KAIHATSUGIKEN GROUP

PERL PROGRAMMING LANGUAGE



************************************************************************************
25 例題
**************
単語の出現頻度

単語の出現頻度を調べてみましょう。
単語は単純に/w+ と言うパターンにします。

while(<>)で各行ごとにループして、その中で各単語ごとにループします。
全体は・・・

use English;
while(<>){
	while(/\w+/g){
		$word=$match;
		各単語の処理
		}
}

各単語の処理ですが、%Count と言う連想配列に出現回数を入れることにします。
単語がキーで値が回数です。

if(exists($Count{$word})){
	$Count{$word}++;
	}else{
	$Count{$word}=1;
	}

と言う感じになります。
すでに出現していたら一回増やして初めてだったら1にするというわけです。

ところで存在しないキーで読み出すと、undef(未定義)と言う値が帰ってきます。
undefは数としては0として扱われます。

と言うことは$Count{$word}++;でちゃんと1になるはずです。
結局if 文は無くても大丈夫と言うことになります。

プリント文を書き加えると

use English;
while(<>){
	while(/\w+/g){			
		$word=$match;
		$Count{$word}++;
	}
}
foreach $key(sort(keys(%Count))){
	print"$key\t$Count{$key}\n"
}


そして ソートします。

use English;
while(<>){
	while(/\w+/g){			
		$word=$match;
		$Count{$word}++;
	}
}
foreach $key(sort{$Count{$b}<=>$Count{$a}}keys(%Count)){
	print"$key\t$Count{$key}/n"
}

これで 出現頻度の高い順番にソートされます。

***********************************************
集合として
*********
連想配列はキーの集合として考えると良いです。

"a","b","c" と言う要素があります。

その連想配列は
%Set=("a"=>1,"b"=>1"c"=>1);

となります。

この集合に要素 "d"を追加するには
$Set{"d"}=1; を書き加えるだけで良いです。

要素"a"を削除するのは
delete($Set{"a"});
です。

ある要素 $x がその集合に含まれるかどうか調べるのは existsです。

if(exists($Set{$x})){
}


全ての要素の値を足すときは

%Set1=("a"=>1,"b"=>1,"c"=>1);
%Set2=("b"=>1,"c"=>1,"d"=>1);
%Union=(%Set1,%Set2);

これで それぞれの 値はUnionに代入されて和集合が出来ます。

積集合の法は片方の集合の要素(キー)に関してループを回してその要素がもう一方の集合にも
含まれていたら積集合に追加していきます。

%Intersection=();
foreach $key(keys(%Set1)){
	if(exists($Set2{$key})){
	$Intersection{$key}=1;
	}
}

*************************************************