4

我有一个字符串,我想与一个字符串数组进行比较,并返回最匹配的数组元素。

我可以编写一个滑动相关器,计算每一步匹配字符的数量并返回最大相关性。但是有更好的方法吗?

例如:
control_string = drv_probability_1_max

列表:
burst_period_min/max
duty_cycle_min/max probablility_0_min/
max probblility_1_min/
max

理想情况下它返回“probblility_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::LevenshteinList::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 距离的更多信息或直接实现Perl 算法。

于 2010-09-25T17:28:35.743 回答