4

文字列の配列と比較したい文字列があり、最も一致する配列要素を返します。

各ステップで一致する文字の数をカウントし、最大相関を返すスライディング相関器を作成できます。しかし、より良い方法はありますか?

例:
control_string = drv_probability_1_max

リスト:
burst_period_min/max
デューティ_サイクル_min/max
確率_0_min/max
確率_1_min/max

理想的には「probability_1_min/max」を返す場所

4

3 に答える 3

5

String::Similarityモジュールを探しているかもしれません。

于 2010-09-24T22:11:09.210 に答える
4

使用しString::Approxます。

于 2010-09-24T22:10:57.153 に答える
2

Text::LevenshteinまたはList::Compareを見てください(String :: Explicitは同じメソッドですが、より完全なパッケージです)

use strict; use warnings;

use Text::Levenshtein qw(distance);

my $ctl = "drv_probability_1_max";

my @list=qw|
burst_period_min/max
duty_cycle_min/max
probablility_0_min/max
probablility_1_min/max
|;

my @dist=distance($ctl,@list);

print "Levenshtein distances: @dist\n";

my $idmin=0;
$dist[$idmin] < $dist[$_] or $idmin = $_ for 1..$#dist;

print "\"$list[$idmin]\" seems the closest...\n\n\n";

出力:

Levenshtein distances: 16 16 10 9
"probablility_1_min/max" seems the closest...

レーベンシュタイン距離の詳細を読むか、Perlアルゴリズムを直接実装してください。

于 2010-09-25T17:28:35.743 に答える