首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用levenshtein匹配目标字符串+额外文本

使用levenshtein匹配目标字符串+额外文本
EN

Stack Overflow用户
提问于 2011-09-10 05:03:20
回答 2查看 1.1K关注 0票数 1

我正在做一个网站转换项目,我需要匹配不精确的字符串。我正在考虑使用leveshtein,但是我不知道我应该为我的任务设置什么参数。

假设我有一个目标字符串elephant。例如,我想拉取的匹配项是elephant mouse

代码语言:javascript
复制
<?

$target = "elephant";

$data = array(
  'elephant mouse',
  'rhinoceros',
  'alligator',
  'hippopotamus',
  'rat',
);

foreach ( $data as $datum ) {
  echo "$target >> $datum == " .  levenshtein($target, $datum) . "\n";
}

我得到的结果是

代码语言:javascript
复制
elephant >> elephant mouse == 6
elephant >> rhinoceros == 10
elephant >> alligator == 7
elephant >> hippopotamus == 10
elephant >> rat == 7

因此,虽然rhinohippo的得分是10,但在我的实际数据集中,我无法真正区分elephant mouseratalligator之间的区别,这三个词在6和7的得分不相上下。这是伪造的数据,但在我的数据集中,长度更接近的单词得到的分数只会比target + extra的分数低得多。

如何配置levenshtein()的选项?我可以为插入、替换和删除的成本设置新的整数值。什么权重能给我想要的东西?

(如果你能想到更好的标题,请编辑我的帖子)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-10 05:20:05

levenshtein($target, $datum, 1, 10, 10)给出的权重

代码语言:javascript
复制
elephant >> elephant mouse == 6
elephant >> rhinoceros == 65
elephant >> alligator == 52
elephant >> hippopotamus == 64
elephant >> rat == 60

其工作非常好:)插入是低成本的,而替换和删除都很高。这意味着target + extra的得分很低,长度相等或更短但字符不同的字符串的成本很高。

票数 2
EN

Stack Overflow用户

发布于 2011-09-10 05:13:24

您可能应该尝试使用levenshtein()匹配单个单词,而不是整个短语,因为如果某个短语包含与要搜索的单词相似的内容,您显然希望将其视为良好的匹配。换句话说,将$datum中的每个字符串拆分为单独的单词,对每个单词运行levenshtein($target, $word),然后选择最小的数字。(如果$target也可以由多个单词组成,则也需要拆分该单词。)

我非常怀疑通过调整插入/删除/替换成本是否能达到预期的效果,因为Levenshtein不考虑单个单词,只考虑整个字符串。你可以试着让插入非常便宜,但这也会给"qwErtyLasdEdgfhdPasdxcHdfjAlkjNlkhTkjh“一个很好的分数,因为它包含所有正确的字母。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7367410

复制
相关文章

相似问题

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