如何在Perl中判断两个字符串是否大致相等?

4
我有一个字符串,我想将其与一个字符串数组进行比较,并返回最接近的数组元素。
我可以编写一个滑动相关器来计算每个步骤中匹配字符的数量,并返回最大相关性。但是是否有更好的方法?
例如:
控制字符串 = drv_probability_1_max
列表:
burst_period_min/max
duty_cycle_min/max
probablility_0_min/max
probablility_1_min/max
理想情况下,它会返回“probablility_1_min/max”。

1
Knuth没有把他的一本书的几章节都献给了这个问题吗? - Ether
我不知道...我没有读过Knuth的任何书。 - SDGator
3个回答

5

4

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算法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接