首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Damerau-Levenshtein php

Damerau-Levenshtein php
EN

Stack Overflow用户
提问于 2010-07-02 18:04:23
回答 3查看 4.2K关注 0票数 11

我正在寻找PHP的Damerau–Levenshtein算法的实现,但是我的朋友谷歌似乎找不到任何东西。到目前为止,我不得不使用PHP实现的Levenshtein (没有Damerau转置,这是非常重要的),或者获得原始源代码(用C、C++、C#、Perl)并将其编写(翻译)到PHP。

有人知道PHP的实现吗?

我在公司内部网上使用soundex和double metaphone作为“你的意思是:”扩展吗?我想实现Damerau-Levenshtein算法来帮助我更好地对结果进行排序。类似于这个想法:http://www.briandrought.com/blog/?p=66,我的实现类似于前5个步骤。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-30 20:21:24

在回来的时候,我有一个stab at it,一个递归解决方案。

代码语言:javascript
复制
/*
 * Naïve implementation of Damerau-Levenshtein distance
 * (Does not work when there are neighbouring transpositions)!
 */
function DamerauLevenshtein($S1, $S2)
{
    $L1 = strlen($S1);
    $L2 = strlen($S2);
    if ($L1==0 || $L2==0) {
        // Trivial case: one string is 0-length
        return max($L1, $L2);
    }
    else {
        // The cost of substituting the last character
        $substitutionCost = ($S1[$L1-1] != $S2[$L2-1])? 1 : 0;
        // {H1,H2} are {L1,L2} with the last character chopped off
        $H1 = substr($S1, 0, $L1-1);
        $H2 = substr($S2, 0, $L2-1);
        if ($L1>1 && $L2>1 && $S1[$L1-1]==$S2[$L2-2] && $S1[$L1-2]==$S2[$L2-1]) {
            return min (
                DamerauLevenshtein($H1, $S2) + 1,
                DamerauLevenshtein($S1, $H2) + 1,
                DamerauLevenshtein($H1, $H2) + $substitutionCost,
                DamerauLevenshtein(substr($S1, 0, $L1-2), substr($S2, 0, $L2-2)) + 1
            );
        }
        return min (
            DamerauLevenshtein($H1, $S2) + 1,
            DamerauLevenshtein($S1, $H2) + 1,
            DamerauLevenshtein($H1, $H2) + $substitutionCost
        );
    }
}
票数 7
EN

Stack Overflow用户

发布于 2014-08-30 02:25:17

看看our implementation (带有测试和文档)。

票数 3
EN

Stack Overflow用户

发布于 2016-10-16 12:21:51

如果只使用内置的php函数...?

http://php.net/manual/en/function.levenshtein.php

代码语言:javascript
复制
int levenshtein ( string $str1 , string $str2 )


int levenshtein ( string $str1 , string $str2 , int $cost_ins , int $cost_rep , int $cost_del )
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3164763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档