我有一个字符串,我想与一个字符串数组进行比较,并返回最匹配的数组元素。
我可以编写一个滑动相关器来计算每一步中匹配字符的数量并返回最大相关性。但是有更好的方法吗?
例如:
control_string = drv_probability_1_max
列表:
burst_period_min /最大
duty_cycle_min /最大
probablility_0_min /最大
probablility_1_min /最大
理想情况下,它返回“probablility_1_min / max”
答案 0 :(得分:5)
您可能正在寻找String::Similarity
模块。
答案 1 :(得分:4)
答案 2 :(得分:2)
看看Text::Levenshtein或List::Compare(String :: Approx是相同的方法,但更完整的包)
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...
直接阅读有关Levenshtein Distance或implement Perl算法的详情..