我想使用字符串相似性函数来查找数据库中的损坏数据。
我遇到了其中几个:
我想知道它们之间的区别以及它们最适合的情况是什么?
答案 0 :(得分:38)
在勘误表和noting some of the ground-floor literature on the comparability of algorithms that apply to similar problem spaces,中扩展我的wiki-walk评论让我们在确定它们在数值上是否具有可比性之前,先探讨这些算法的适用性。
来自维基百科,Jaro-Winkler:
在计算机科学和统计学中,Jaro-Winkler距离 (Winkler,1990)衡量两个字符串之间的相似性。它是 Jaro距离度量的变体(Jaro,1989,1995)和 主要[引证需要]用于记录联系领域(重复 检测)。两个琴弦的Jaro-Winkler距离越高, 字符串越相似。 Jaro-Winkler距离度量标准是 设计并最适合短字符串,如人名。该 将得分归一化,使得0等于没有相似性,1等于 完全匹配。
在信息理论和计算机科学中,Levenshtein距离 是一个字符串指标,用于衡量两者之间的差异量 序列。术语编辑距离通常用于具体指代 到Levenshtein距离。
两个弦之间的Levenshtein距离定义为最小值 将一个字符串转换为另一个字符串所需的编辑次数 允许的编辑操作是插入,删除或 替换单个字符。它以弗拉基米尔命名 Levenshtein,他在1965年考虑了这个距离。
在数学中,欧氏距离或欧几里德度量是 人们用a测量的两点之间的“普通”距离 统治者,由毕达哥拉斯公式给出。通过使用这个公式 随着距离,欧几里德空间(甚至任何内部产品空间)变为 度量空间。相关的规范称为欧几里德范数。 较早的文献将指标称为毕达哥拉斯指标。
在计算语言学和概率领域,n-gram 是来自给定文本序列的n个项目的连续序列 言语。有问题的项目可以是音素,音节,字母, 根据应用的单词或碱基对。 n克是 从文本或语音语料库中收集。
两个核心 n-gram模型(和使用的算法)的优点 他们是相对简单和扩大规模的能力 - 简单地说 增加一个模型可以用来存储更多的上下文 众所周知的时空权衡,实现小型实验 非常有效地扩大规模。
问题是这些算法解决了在所有可能的算法空间内具有不同适用性的不同问题,以解决longest common subsequence问题,数据或移植可用的metric。事实上,并非所有这些都是 metrics ,因为其中一些不满足triangle inequality。
可以正确地执行此操作:使用checksums和parity bits获取数据。 Don',而不是为了定义可疑的方案来检测数据损坏。当一个更简单的解决方案可以做的时候,尝试解决一个更难的问题。
答案 1 :(得分:2)
字符串相似性有很多不同的方式。例如
但是因为一个尺码并不适合所有人。每个字符串相似度算法都是针对特定用途而设计的,尽管它们中的大部例如Levenshtein_distance是关于你改变多少个字符串以使两个字符串相等。
kitten → sitten
此处距离为1个字符更改。您可以为删除,添加和替换赋予不同的权重。例如,OCR错误和键盘错误对某些更改的权重较小。 OCR(有些字符与其他字符非常相似),键盘有些字符彼此非常接近。生物信息字符串相似性允许大量插入。
您的第二个“Jaro–Winkler 距离指标示例是专为短字符串设计的,例如人名”
因此,您应该牢记您的问题。
我想使用字符串相似性函数来查找数据库中的损坏数据。
您的数据如何损坏?这是用户错误,类似于键盘输入错误?或者它与OCR错误类似?或完全不同的东西?