变音符号上的Levenshtein距离

Murval

在PHP中,我使用函数levenshtein()计算Levenshtein距离。对于简单字符,它可以按预期工作,但对于音调字符,如示例

echo levenshtein('à', 'a');

它返回“ 2”。在这种情况下,只需进行一次替换,因此我希望它返回“ 1”。

我想念什么吗?

因鲁邦

levenshtein()像许多PHP函数一样,默认的PHP不支持多字节。因此,在处理带有Unicode字符的字符串时,它将分别处理每个字节并更改两个字节。

没有多字节版本(即mb_levenshtein()),因此您有两个选择:

1)使用mb_功能自己重新实现功能。要点可能的示例代码

<?php
function levenshtein_php($str1, $str2){
    $length1 = mb_strlen( $str1, 'UTF-8');
    $length2 = mb_strlen( $str2, 'UTF-8');
    if( $length1 < $length2) return levenshtein_php($str2, $str1);
    if( $length1 == 0 ) return $length2;
    if( $str1 === $str2) return 0;
    $prevRow = range( 0, $length2);
    $currentRow = array();
    for ( $i = 0; $i < $length1; $i++ ) {
        $currentRow=array();
        $currentRow[0] = $i + 1;
        $c1 = mb_substr( $str1, $i, 1, 'UTF-8') ;
        for ( $j = 0; $j < $length2; $j++ ) {
            $c2 = mb_substr( $str2, $j, 1, 'UTF-8' );
            $insertions = $prevRow[$j+1] + 1;
            $deletions = $currentRow[$j] + 1;
            $substitutions = $prevRow[$j] + (($c1 != $c2)?1:0);
            $currentRow[] = min($insertions, $deletions, $substitutions);
        }
        $prevRow = $currentRow;
    }
    return $prevRow[$length2];
}

2)将字符串的Unicode字符转换为ASCII但是,如果您特别想计算从变音符号到非变音符号的Levenshtein差异,则可能不是您想要的。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

变音符号上的 PostgreSQL 模式匹配

来自分类Dev

如何在iOS上转换为“合并变音符号”

来自分类Dev

RedirectToAction()打破变音符号

来自分类Dev

不能写变音符号

来自分类Dev

Java删除变音符号

来自分类Dev

Python 包名称(在 pypi 上)可以包含分音符/“变音符号”吗?

来自分类Dev

DataGridView过滤器忽略单元格,单词上的变音符号(重音符号)

来自分类Dev

Python:删除希腊变音符号/重音符号

来自分类Dev

Qt SQL Server和变音符号

来自分类Dev

无法显示德语变音符号

来自分类Dev

编码变音符号的怪异问题

来自分类Dev

无法验证包含变音符号的文本

来自分类Dev

使用Go删除变音符号

来自分类Dev

在列表/集中存储变音符号

来自分类Dev

AngularJs搜索并忽略变音符号

来自分类Dev

从iOS到PHP的变音符号

来自分类Dev

字符串编码变音符号

来自分类Dev

Elasticsearch将变音符号显示为“ ??”

来自分类Dev

Webfont没有变音符号

来自分类Dev

无法验证包含变音符号的文本

来自分类Dev

Qt SQL Server和变音符号

来自分类Dev

Android HttpRequest HttpPost变音符号

来自分类Dev

编码变音符号的怪异问题

来自分类Dev

忽略变音符号的搜索功能

来自分类Dev

无法显示德语变音符号

来自分类Dev

VC ++从流中解码变音符号

来自分类Dev

删除变音符号不起作用

来自分类Dev

为什么printf“缩小”变音符号?

来自分类Dev

Laravel 变音符号不敏感搜索