我需要测量的物理之间的距离两个地方他们的名字被提供作为串。因为有时候的名字都写方式略有不同,我是在寻找一个图书馆,可以帮助我测量的差异,然后结合的措施的纬度和经度,以选择正确的匹配。优选的语言:Java或PHP.

任何建议?

有帮助吗?

解决方案

有一个在所述 Levenshtein距离。这是测量两个串如何不同彼此的方式。

希望我正确理解您的问题;在同一个句子为“纬度和经度”使用“距离”可以是混乱!

其他提示

虽然是用 c 编写的(带有 python 和 tcl 绑定), 自由距离 将是一个在字符串/数据上应用多个距离度量的工具。

指标包括:

  • 盛开
  • 达默劳
  • 欧几里得
  • 汉明
  • 杰卡德
  • 编辑
  • 曼哈顿
  • 明科夫斯基
  • 针曼文施

您可以使用语音算法以找到稍misspelld名字得到一些像样的成绩。

此外,如果你使用了更多的机械编辑距离,你可能会看到使用占键盘几何加权功能更好的结果(即物理上接近键是“便宜”远比更换掉的)。这是一个专利方法顺便说一句,所以要小心,不要写的东西变得太受欢迎;)

我冒昧一块我写计算Levenshtein距离成Java代码C#代码转换。这里仅仅使用两个交替的,而不是一个大的交错数组一维数组:

public static int getDifference(String a, String b)
{
    // Minimize the amount of storage needed:
    if (a.length() > b.length())
    {
        // Swap:
        String x = a;
        a = b;
        b = x;
    }

    // Store only two rows of the matrix, instead of a big one
    int[] mat1 = new int[a.length() + 1];
    int[] mat2 = new int[a.length() + 1];

    int i;
    int j;

    for (i = 1; i <= a.length(); i++)
        mat1[i] = i;

    mat2[0] = 1;

    for (j = 1; j <= b.length(); j++)
    {
        for (i = 1; i <= a.length(); i++)
        {
            int c = (a.charAt(i - 1) == b.charAt(j - 1) ? 0 : 1);

            mat2[i] =
                Math.min(mat1[i - 1] + c,
                Math.min(mat1[i] + 1, mat2[i - 1] + 1));
        }

        // Swap:
        int[] x = mat1;
        mat1 = mat2;
        mat2 = x;

        mat2[0] = mat1[0] + 1;
    }

    // It's row #1 because we swap rows at the end of each outer loop,
    // as we are to return the last number on the lowest row
    return mat1[a.length()];
}

它不是严格的测试,但它似乎是好工作。它是基于Python实现我的一个大学运动作出。希望这有助于!

我会推荐任 Levenshtein DistanceJaccard距离 用于比较的文本。

我发现 SumMetrics 在Java中,但还没有用它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top