字符串包含的字符串相似性算法(而不是字符串相等性)

数据挖掘 文本挖掘
2022-03-11 05:17:03

我看到有很多字符串相似度算法来判断两个字符串是否相同。我有一个稍微不同的问题 - 我得到两个字符串“a”和“b”,我需要一个相似性算法来判断“b”是否包含“a”(“b”可能包含“a”和一些“错误”) . 我还没有找到任何算法来解决这个问题,我很高兴听到一些(如果它们存在的话)。

1个回答

我的第一个想法是很难正式定义这个概念:

“b”可能包含“a”和一些“错误”

  • 一方面,有一个想法a是 的子串b这个问题应该有一个布尔答案:要么包含它,要么不包含。
  • 另一方面,有近似匹配的想法:b应该包含一个c“足够相似”的子字符串a一般来说,两个字符串之间的相似性问题是用一个数值来回答的,通常是一个介于 0 和 1 之间的实数。

据我所知,解决这个问题的唯一方法是考虑a和之间的相似度得分有一个阈值c,其中c是 的任何子串b这样答案就变成了布尔值。

但是,通过将子字符串操作视为相似性计算的一部分,可能有一种解决方法。特别是Levenshtein 编辑距离可以解释字符的插入/删除,这就是子字符串对包含它的字符串的意义。

更有趣的是,可以为 Levenshtein 距离中的任何特定编辑操作分配不同的成本。因此,可能可以定义 Levenshtein 的变体,其中开头或结尾的插入成本为 0,从而使最终距离xbetweenab等价于 "b包含一个c具有距离的子字符串x反对a“。

我会尝试实现这一点的方式是:

  1. 计算正则编辑距离,保留用于计算的矩阵
  2. 从矩阵中,计算完成了多少次插入,但只在开始和结束时进行,然后从距离中减去该值。

请注意,我的想法可能存在缺陷,我没有尝试过:D