Perl/名詞句AのB抽出方法
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[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;
}
終了行:
[[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;
}
ページ名: