[[Perl]] ***2010年03月15日暫定版 [#i0d8dea5] 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; }