作者: 藤岡和夫
日時: 2007/10/21(22:00)
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