У меня есть последовательность ДНК, например, ATCGATCG. У меня также есть база данных ДНК-последовательности, отформатированных следующим образом:Perl: Return Самый высокий процент для строк
>Name of sequence1
SEQUENCEONEEXAMPLEGATCGATC
>Name of sequence2
SEQUENCETWOEXAMPLEGATCGATC
(Таким образом, нечетные строки содержат имя и четные строки содержат последовательность) В настоящее время я ищу для идеальных матчей между моей последовательностью и последовательности в базе данных следующим образом (предполагается, что все переменные объявлены):
my $name;
my $seq;
my $returnval = "The sequence does not match any in database";
open (my $database, "<", $db1) or die "Can't find db1";
until (eof $database){
chomp ($name = <$database>);
chomp ($seq = <$database>);
if (
index($seq, $entry) != -1
|| index($entry, $seq) != -1
) {
$returnval = "The sequence matches: ". $name;
last;
}
}
close $database;
есть ли способ для меня, чтобы вернуть имя самой высокой процентной согласованной последовательности, а также процентное совпадение существует между ввозом и последовательность в базе данных?
В каком объеме находится база данных? – Zaid
Не уверен, что ['String :: Approx'] (https://metacpan.org/pod/String::Approx) поможет вам здесь. – Zaid
Вы можете разбить свою строку и повести char на char, даже если она придирчива. Например, что-то вроде этого было сделано в ['this post'] (http://stackoverflow.com/questions/9106978/perl-partial-match). Лучше найти модуль - например, ['Text :: Fuzzy'] (http://search.cpan.org/~bkb/Text-Fuzzy-0.24/lib/Text/Fuzzy.pod). – zdim