On Sun, 21 Oct 2007 11:44:45 +0900
藤岡和夫 <kazuf@...> wrote:
> Stirng:Approxのドキュメントによると近似度の測定の原理は次のようなもの
> ですね。
詳細のアルゴリズムについては、文献もあるので正確にはそちらを参照したほ
うがよいでしょうね。同梱のREADME.apseに文献名等が出ています。
ついでに、Regexp::Assembleモジュールを紹介しておきましょう。検索したい
類似のパターンの組合せが爆発しなければ^^;)、次のようにして、一つのパター
ンにまとめてパターンマッチを試みることができます。
-----^ rautf8.pl
use encoding 'utf8';
use Regexp::Assemble;
my $ra = Regexp::Assemble->new;
$ra->add( '\w{2}カチ王子' );
$ra->add( '\wン\wチ王子' );
$ra->add( '\wンカ\w王子' );
$ra->add( 'ハ\w{2}チ王子' );
$ra->add( 'ハ\wカ\w王子' );
$ra->add( 'ハン\w{2}王子' );
my $pattern = $ra->re;
print $pattern,"\n";
while(<>){
chomp;
$line++;
if(/$pattern/o){
print $line,": ", $_,"\n";
}
}
-----$
次のような結果になります。
[c:\sites\tsnetwork]
perl rautf8_2.pl agreptest.txt
(?-xism:(?:ハ(?:\w{2}チ|ン\w{2}|\wカ\w)|\wン(?:\wチ|カ\w)|\w{2}カチ)王子)
21: # usage: gawk -f agrep.awk 2 ハンカチ王子 agrep.txt
41: ハニカミ王子
42: ハゲカケ王子
43: ハナカミ王子
45: ハイカイ王子
46: ハダカノ王子
47: ハルカゼ王子
48: トンカツ王子
藤岡 和夫
kazuf@...
日曜プログラマのひとりごと http://homepage1.nifty.com/kazuf/renewal.html