Come faccio a sapere se due stringhe sono per lo più uguali (in Perl)?
-
05-10-2019 - |
Domanda
Ho una stringa che voglio confrontare con un array di stringhe, e restituire l'elemento dell'array che più si avvicina.
posso scrivere un correlatore scorrevole che conta il numero di caratteri corrispondenti ad ogni passo e ritorna la correlazione max. Ma c'è un modo migliore?
Ad esempio:
control_string = drv_probability_1_max
Lista:
burst_period_min /
max
duty_cycle_min /
max
probablility_0_min /
max
probablility_1_min / max
Dove idealmente ritorna "probablility_1_min / max"
Soluzione
Altri suggerimenti
Si potrebbe essere alla ricerca di String::Similarity
modulo.
Date un'occhiata al Text :: Levenshtein o Lista :: Confronta (String :: circa lo stesso metodo, ma un pacchetto più completo)
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";
Output:
Levenshtein distances: 16 16 10 9
"probablility_1_min/max" seems the closest...
Per saperne di più Levenshtein Distanza o implementare un algoritmo di Perl direttamente ..