测量无序序列间距离的算法

时间:2010-05-18 11:17:18

标签: algorithm

Levenshtein距离为我们提供了一种根据无序个体字符计算两个相似字符串之间距离的方法:

quick brown fox
quikc brown fax

Levenshtein距离= 3。

具有相似子序列的两个字符串之间距离的类似算法是什么? 例如,在

quickbrownfox
brownquickfox
Levenshtein距离是10,但这并没有考虑到这样一个事实,即字符串有两个相似的子序列,这使得它们比完全无序的单词更像“

quickbrownfox
qburiocwknfox

然而这个完全无序的版本的Levenshtein距离为8。

考虑到子序列的长度,存在哪些距离度量,而不假设子序列可以很容易地分成不同的词?

5 个答案:

答案 0 :(得分:1)

我认为您可以尝试使用Levenshtein距离shingles或它们的某些组合。

答案 1 :(得分:1)

一个简单的指标是在每个字符串中取所有n *(n-1)/ 2个子串,并查看有多少重叠。这种方法有一些简单的变体,你只需要查看一定长度的子串。

这类似于常用于评估机器翻译的BLEU分数。在BLEU的情况下,他们比较两个句子:他们从每个句子中取出所有的单词,双字母组,三元组和4克单词。他们计算每种精度和召回的版本,并基本上使用这些分数的平均值。

答案 2 :(得分:0)

初始刺:使用diff算法和差异数量作为距离

答案 3 :(得分:0)

我的印象是NP完全问题。

至少,我看不出怎样才能避免详尽的搜索。而且,我甚至看不出如何在多项式时间内验证给定的解。

答案 4 :(得分:0)

你提到的问题都属于上下文敏感语法。 你基本上定义了一个语法,在这种情况下是英语语法,然后找到语法和不匹配之间的距离。您需要先解析输入。