检查$barcode和两个字符串之间的距离,第一个字符串的前面有相同的12个字符,另一个字符串完全不同,但都给出了相同的距离?
#!/usr/bin/perl
use warnings;
use strict;
use Text::Fuzzy;
my $barcode = "TCCCTTGTCTCC";
foreach my $line1 (<DATA>) {
print "New string\n";
print "Barcode length:", length $barcode, "\nSequence length:",
length $line1, "\n";
my $tf = Text::Fuzzy->new($barcode);
my $ed = $tf->distance($line1);
print "Edit distance: ", $ed ,"\n\n";
}
__DATA__
TCCCTTGTCTCCCCTGATATCCTGTAAAATCCTTTTCTTCTGATGGGTGCCATTTGCCACTAGAGGAAGCTGAACAGACCTGACTACCTGGA
GACGAGACTGATCACCTGATATCCTGTAAAATCCTTTTCTTCTGATGGGTGCCATTTGCCACTAGAGGAAGCTGCAGACCTGACTACCTGGA输出:
New string
Barcode length:12
Sequence length:93
Edit distance: 81
New string
Barcode length:12
Sequence length:93
Edit distance: 81发布于 2016-05-27 10:51:05
这似乎是对的,因为子序列的所有字符都出现在较长的序列中,两者都具有相同的Levenshtein编辑距离。这是因为它所需要的只是将较长的序列转换为较短的序列的删除
示例:
artic => arc编辑距离2,即删除2 arche => arc将具有相同的编辑距离2,即删除2
发布于 2016-05-27 11:02:29
好的。在第一种情况下,$barcode中的所有字符都一起出现在行首,因此需要进行81 (93 - 12)次编辑才能将所有其他字符添加到行尾。
在第二种情况下,$barcode中的所有字符仍然按顺序出现,只是中间有一堆东西。因为他们这样做了,不需要删除或替换,距离仍然是81,字符只是添加在不同的地方。举例说明:
GACGAGACTGATCACCTGATATCCTGTAAAATCCTTTTCTTC ...
________T___C_CCT_______TGT______CT___C__C ...https://stackoverflow.com/questions/37473924
复制相似问题