#levenshtein #string #difference #edit-distance #display #show #text

bin+lib edits

此库使用Levenshtein距离显示两个字符串之间的差异

1个稳定版本

1.0.0 2022年10月26日

#22 in #edit-distance

Apache-2.0

35KB
808

Workflow Status

此库提供了显示两个字符串之间差异的函数。它使用Levenshtein距离来计算从一个字符串到另一个字符串所需的最低编辑操作数:插入、删除、替换。

有几个选项可用于自定义此处理

  • split_size 如果字符串包含任何新行,则将其拆分为行列表。然后,如果任何行太大,则根据split_size将其拆分为更小的部分进行比较。这是为了减少用于计算所有编辑成本的编辑矩阵的大小。默认值为200。

  • separators 用于突出显示差异的文本的开头和结尾部分(默认为括号)

  • shorten size 如果输入文本太大,则可以显示主要差异和一些上下文。如果字符串大于shorten_size(默认为20),则会在分隔符周围省略字符串。

  • shorten_text 在原始字符串中省略字符时使用的字符串(默认为"..."

  • display_edit_operations 一个函数,用于指定编辑操作(插入/删除/替换/保持)的表示方式

以下是一些示例

use edits::edits::*;

// "between the e and the n the letter i was added"
assert_eq!(show_distance("kitten", "kittein"), "kitte[+i]n");

// "at the end of the text 3 letters have been deleted"
assert_eq!(show_distance("kitten", "kit"), "kit[-t-e-n]");

// "between the t and the n 2 letters have been modified"
assert_eq!(show_distance("kitten", "kitsin"), "kit[~t/s~e/i]n");

// "between the t and the n 2 letters have been modified"
let my_split_size = SplitSize { split_size: 300 };
assert_eq!(show_distance_with(my_split_size, default_display_options(), "kitten", "kitsin"), "kit[~t/s~e/i]n");

输出也可以着色。例如:

在REPL中尝试

您可以在REPL中尝试此库

  • 克隆此存储库
  • 安装evcxr repl: cargo install evcxr_repl
  • 启动它
sh> evcxr
Welcome to evcxr. For help, type :help
>>
  • 将当前路径添加为依赖项并导入edits模块
>> :dep edits = { path = "." }
>> use edits::edits::*;
  • 使用show函数
>> println!("{}", show_distance_colored("abcd", "abcdefg"));
abcd[efg]

无运行时依赖