Perl

2010年03月15日暫定版

	sub AnoB()
	{
		my $Hline=$_[0];
		$MecabMaxLength=1000;
		#文を短くする.
		@lines = split(/。|、|\n/, $Hline);
		foreach $line (@lines){
			#文字数制限
			if(length $line > $MecabMaxLength){
				print "文字数の警告 Skip $line\n";
				next;
			}
			#会議録の内容
			open(OUT,">tmp.dat");
			print OUT "$line\n";	
			close(OUT);
			#mecab
			$mecab = `mecab --node-format="%m:%H\t" tmp.dat`;
			@mecabs= split(/\t/,$mecab);
			undef $AB;	
			undef $previous_word;
			undef $previous_pos;
			for($i=0;$i<@mecabs;$i++){
				#初期化
				undef $word;
				undef $pos;
				#単語、品詞 抽出
				if($mecabs[$i] =~/^(.*?):(.*?),/){
					$word = $1;
					$pos  = $2;
				}
				#AのB を抽出
				#1.名詞の場合 
				#2.「の」の場合
				#3.それ以外
				if($pos =~ /名詞/){
					$AB .= $word;
					$B  .= $word;
					if($previous_word eq "の"){$ABcount++;}
				}
				elsif($word eq "の" && $AB){# $ABは「の」から始まるのを防ぐ
					$A = $AB;
					$AB .= $word;
					undef $B;
					if($previous_pos =~ /名詞/){$ABcount++;}
				}
				else{
					if($ABcount == 2){
							$A =~ s/\(/(/g;
							$A =~ s/\)/)/g;
							$B =~ s/\(/(/g;
							$B =~ s/\(/(/g;
							$AB =~ s/\)/)/g;
							$AB =~ s/\)/)/g;
							$AnoB{"$AB"}="$A:$B";
							$AnoB_Pattern{"$AB"}++;
					}
					undef $AB;
					$ABcount=0;
				}
				$previous_word = $word;
				$previous_pos = $pos;
			}
		}
		#AのBリスト
		@AnoB_Pattern = sort{$AnoB_Pattern{$b} <=> $AnoB_Pattern{$a}} keys %AnoB_Pattern;
	}