2016-05-27 10 views
3

$barcodeと2つの文字列の間の距離を確認すると、最初の文字列は前と同じ12文字ですが、別の文字列は完全に異なっていますが、どちらも同じ距離ですか?perl:Text ::同じ編集距離を与えるファジー、異なる文字列?

#!/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 

答えて

2

サブシーケンスのすべての文字が長い配列中に存在する権利ので、両方が同じレーベンシュタイン編集距離を持つことになりそうです。それが必要となるすべては

例より短い配列に長く変換するために削除されるので、これはそうである:

artic => arc編集距離2、すなわち、欠失2 arche => arcは同じ編集距離2すなわち、欠失2

+0

このような場合にも、置き換えにも違いはありますか? – SSh

+1

私は[最長共通部分文字列](http://search.cpan.org/~dyacob/String-LCSS-0.12/lib/String/LCSS.pm)あなたが探しているものだと思います – keety

2
を持っているでしょう

確かに。最初のケースでは、$barcodeのすべての文字が行の先頭に一緒に表示されるため、最後に他の文字をすべて追加するには81(93-12)の編集が必要です。第2のケースで

$barcode内のすべての文字は、まだちょうど間における原料の束を、順番に、表示されます。彼らはそうするので、削除や置換は必要なく、距離はまだ81ですが、文字はちょうど別の場所に追加されます。説明する:

GACGAGACTGATCACCTGATATCCTGTAAAATCCTTTTCTTC ... 
________T___C_CCT_______TGT______CT___C__C ... 
関連する問題