使用Levenshtein距离比较文件路径

奥菲克

我需要弄清楚特定文件路径的接近程度,Levenshtein距离算法的效果很好,但是我需要以某种方式对目录树中较高的目录进行加权。

例如:

我的来源是“ x:/ t / c / d”

我的两个目标是:

  • “ a:/ t / c / d”
  • “ x:/ t / y / z”

我需要第二个目标将其标识为更接近,即使“作为字符串”它的编辑距离更大(因为目标两个与源在同一父目录“ x”中,而第一个目标正在查看目录“ a” 。

如何对字符串中较早出现的字符进行加权?

阿莱弗朗兹

在我看来,完整路径上Levenshtein距离对于您要实现的目标来说并不是正确的算法。

我建议您将路径拆分为一个文件夹列表(最终在文件末尾),然后我将比较相应位置的目录名称(或驱动器),如果比较合适,则给予较高的分数匹配,随着您进一步深入目录树,降低得分。

如果不匹配,那么您仍然可以在路径上应用Levenshtein距离,并将其乘以权重,随着权重的降低,权重会降低。

比总结全部。

例如:

var source = "x:/t/c/d";
var targets = new[] { "a:/t/c/d", "x:/t/y/z" };

var separator = '/';
var sourceParts = source.Split(separator);
var weight = 10;
var match = 100;

var scores = targets.Select(target =>
{
    var score = sourceParts
        .Zip(target.Split(separator), (s, t) => new Tuple<string, string>(s, t))
        .Select(
            (tuple, i) => tuple.Item1 == tuple.Item2
                ? match * GetWeight(i)
                : LevenshteinDistance(tuple.Item1, tuple.Item2) * GetWeight(i)
        ).Sum();

    return new
    {
        Target = target,
        Score = score
    };
});

其中GetWeight()类似于:

private static int MaxWeight = 10;
private static int GetWeight(int i) => i < MaxWeight ? MaxWeight - i : 1;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

比较文件中每个线对之间的相似度或levenshtein距离?

来自分类Dev

比较多个单词名称与Levenshtein距离

来自分类Dev

PHP:使用levenshtein距离匹配单词

来自分类Dev

通配符文件路径比较

来自分类Dev

使用quickCheck生成用于levenshtein距离实现的测试用例

来自分类Dev

使用Java中的Levenshtein距离改善搜索结果

来自分类Dev

如何使用Levenshtein距离作为标准对列表进行排序?

来自分类Dev

使用Levenshtein距离在Python中实现分层聚类

来自分类Dev

了解Levenshtein距离

来自分类Dev

显示Levenshtein距离的结果

来自分类Dev

Levenshtein距离与界限/界限

来自分类Dev

Levenshtein距离组

来自分类Dev

了解Levenshtein距离

来自分类Dev

优化Levenshtein距离的速度

来自分类Dev

如何用熊猫的Levenshtein距离度量比较一列的不同行?

来自分类Dev

具有路径重构渐进复杂性的levenshtein距离实现

来自分类Dev

Levenshtein编辑距离未计算编辑距离

来自分类Dev

Damerau-Levenshtein距离实现

来自分类Dev

前缀/后缀的Levenshtein距离的替代

来自分类Dev

Python中的Levenshtein距离循环

来自分类Dev

Levenshtein距离的文本聚类

来自分类Dev

Levenshtein距离不对称

来自分类Dev

Python中的Levenshtein距离循环

来自分类Dev

Levenshtein距离不对称

来自分类Dev

Swift Trie levenshtein距离搜索

来自分类Dev

迭代版本的Damerau–Levenshtein距离

来自分类Dev

使用最近的()比较元素与点击事件的距离

来自分类Dev

使用阿多尼斯比较距离矩阵

来自分类Dev

numpy-使用numpy.fromfunction构造Jaro(或Levenshtein)距离矩阵