Как я могу узнать, равны ли две строки в основном (в perl)? - PullRequest
4 голосов
/ 25 сентября 2010

У меня есть строка, которую я хочу сравнить с массивом строк, и вернуть элемент массива, который наиболее точно соответствует.

Я могу написать скользящий коррелятор, который подсчитывает количество совпадающих символов на каждом шаге и возвращает максимальную корреляцию. Но есть ли лучший способ?

Например:
control_string = drv_probability_1_max

Список:
burst_period_min / макс
duty_cycle_min / макс
probablility_0_min / макс
probablility_1_min / макс

Где в идеале возвращается «probablility_1_min / max»

Ответы [ 3 ]

5 голосов
/ 25 сентября 2010

Возможно, вы ищете модуль String::Similarity.

4 голосов
/ 25 сентября 2010

использование String::Approx;

2 голосов
/ 25 сентября 2010

Взгляните на Текст :: Левенштейн или Список :: Сравнить (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...

Подробнее о Расстояние Левенштейна или реализация алгоритма Perl напрямую ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...