Better distance function
[text-levenshtein-edlib.git] / lib / Text / Levenshtein / Edlib.pm
index 9274517a6efbdc153c5102f8485c1285a3a33e96..6b38a6c742a892a3f21b7db106c6f38efe5befe8 100644 (file)
@@ -24,7 +24,7 @@ my @constants =
                EDLIB_TASK_PATH/;
 
 our %EXPORT_TAGS =
-  (all => [ @constants, qw/align distance/ ], constants => \@constants);
+  (all => [ @constants, qw/align distance to_cigar/ ], constants => \@constants);
 our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
 our @EXPORT = ( @{ $EXPORT_TAGS{'constants'} } );
 our $VERSION = '0.001';
@@ -67,8 +67,15 @@ sub align {
 }
 
 sub distance {
-       my ($q, $t, $k) = @_;
-       align($q, $t, $k)->{editDistance}
+       my ($q, $t, $k, $mode) = @_;
+       align($q, $t, $k, $mode, EDLIB_TASK_DISTANCE())->{editDistance}
+}
+
+sub to_cigar {
+       my ($align, $format) = @_;
+       $align = pack 'C*', @$align;
+       $format //= EDLIB_CIGAR_STANDARD();
+       edlibAlignmentToCigar($align, $format);
 }
 
 1;
@@ -95,7 +102,9 @@ Text::Levenshtein::Edlib - XS edit distance and optimal alignment path calculati
   say "Start locations are: @{$align->{startLocations}}";
   say "End locations are: @{$align->{endLocations}}";
   say "Alignment path is: @{$align->{alignment}}";
-
+  say "Alignment path (in CIGAR format): ", to_cigar $align->{alignment};
+  say "Alignment path (in extended CIGAR format): ",
+      to_cigar $align->{alignment}, EDLIB_CIGAR_EXTENDED;
 
 =head1 DESCRIPTION
 
@@ -111,7 +120,7 @@ This module has two functions:
 
 =over
 
-=item B<distance>(I<$query>, I<$target>, [I<$max_distance>])
+=item B<distance>(I<$query>, I<$target>, [I<$max_distance>, [I<$mode>]])
 
 This is the basic interface to the library. It is compatible with the
 function of the same name in L<Text::Levenshtein::XS>.
@@ -119,7 +128,8 @@ function of the same name in L<Text::Levenshtein::XS>.
 It returns the edit distance between the two given strings. If the
 third argument is specified, and the edit distance is greater than the
 value of the third argument, then the function finishes the
-computation early and returns undef.
+computation early and returns undef. See below for the meaning of the
+optional I<$mode> argument.
 
 =item B<align>(I<$query>, I<$target>, [I<$max_distance>, [I<$mode>, [I<$task>]]])
 
@@ -224,7 +234,7 @@ constant, C<align> and C<distance>.
 
 =head1 SEE ALSO
 
-L<https://github.com/Martinsos/edlib/>
+L<https://github.com/Martinsos/edlib/>, L<http://martinsosic.com/edlib/edlib_8h.html>
 
 =head1 AUTHOR
 
This page took 0.010989 seconds and 4 git commands to generate.