我看到有很多字符串相似度算法来判断两个字符串是否相同。我有一个稍微不同的问题 - 我得到两个字符串“a”和“b”,我需要一个相似性算法来判断“b”是否包含“a”(“b”可能包含“a”和一些“错误”) . 我还没有找到任何算法来解决这个问题,我很高兴听到一些(如果它们存在的话)。
字符串包含的字符串相似性算法(而不是字符串相等性)
数据挖掘
文本挖掘
2022-03-11 05:17:03
1个回答
我的第一个想法是很难正式定义这个概念:
“b”可能包含“a”和一些“错误”
- 一方面,有一个想法
a
是 的子串b
。这个问题应该有一个布尔答案:要么包含它,要么不包含。 - 另一方面,有近似匹配的想法:
b
应该包含一个c
“足够相似”的子字符串a
。一般来说,两个字符串之间的相似性问题是用一个数值来回答的,通常是一个介于 0 和 1 之间的实数。
据我所知,解决这个问题的唯一方法是考虑a
和之间的相似度得分有一个阈值c
,其中c
是 的任何子串b
。这样答案就变成了布尔值。
但是,通过将子字符串操作视为相似性计算的一部分,可能有一种解决方法。特别是Levenshtein 编辑距离可以解释字符的插入/删除,这就是子字符串对包含它的字符串的意义。
更有趣的是,可以为 Levenshtein 距离中的任何特定编辑操作分配不同的成本。因此,可能可以定义 Levenshtein 的变体,其中开头或结尾的插入成本为 0,从而使最终距离betweena
和b
等价于 "b
包含一个c
具有距离的子字符串反对a
“。
我会尝试实现这一点的方式是:
- 计算正则编辑距离,保留用于计算的矩阵
- 从矩阵中,计算完成了多少次插入,但只在开始和结束时进行,然后从距离中减去该值。
请注意,我的想法可能存在缺陷,我没有尝试过:D