带移位块的字符串的最佳相似性度量

时间:2019-09-15 06:42:29

标签: c# algorithm diff string-comparison

我正在比较字符串以计算它们之间的相似性。最初,我选择了“ Levenshtein距离”算法,但现在发现,这并不是我拥有的那种输入的最佳算法。我的输入字符串可以进行 block-move 操作,这导致非常相似的字符串之间的Levenshtein距离很大。这是两个具有较大编辑距离但本质上相似的字符串的示例:

  

第一版

     

Q:选择您喜欢的品种:

     
      
  1. 德国谢泼德
  2.   
  3. 梦想
  4.   
  5. 可乐
  6.   
  7. Rottweiler
  8.   
  9. 大丹狗
  10.   
     

第二版

     问:您最喜欢以下哪个品种:

     
      
  1. 可乐
  2.   
  3. 梦想
  4.   
  5. 德国谢泼德
  6.   
  7. 大丹狗
  8.   
  9. Rottweiler
  10.   

然后我检查了GIT使用的diff实用程序,该IIRC使用Myers算法,但是GIT也遇到无法检测到块移位并将其视为两个删除和插入操作的问题。

对于具有定性但可能具有较大编辑距离的字符串,我还有哪些其他算法可以使我得到较小的距离?如果可以使用C#,VB.NET,C ++或Java实现,甚至可以移植它,那就更好了。

注意:定性并不意味着任何类型的智能内容分析。仍然是客观的,但应仅将块移动视为一次操作,而不是N次操作,其中N是块中的数字字符。

0 个答案:

没有答案