【问题标题】:How to get all closest matched strings from an array?如何从数组中获取所有最接近的匹配字符串?
【发布时间】:2017-06-07 06:47:18
【问题描述】:

我正在尝试从数组中找到最接近的匹配项。为此我使用levenshtein(),但levenshtein() 只返回第一个匹配的字符串或第一个最接近的匹配。

这是我的场景:

$words = array('Break Noise','Engine Noise','Vehicle is jerking');

如果我的输入是Noise,我想同时获得Break NoiseEngine Noise

可以吗?

levenshtein() 只返回Break Noise,这是第一个元素。

【问题讨论】:

  • 获取每个元素的 Levenshtein 距离,然后按距离对数组进行排序。
  • 你是什么意思它只返回最接近的匹配? levenshtein() 返回一个数字,表示两个字符串之间的距离。

标签: php arrays string-comparison levenshtein-distance substring


【解决方案1】:

在获得两次赞成票后,我很想把这个答案留在屏幕上。

$input="Noise";
$words = array('Break Noise','Engine Noise','Noises','Vehicle is jerking','Nose','noise');
$filtered=array_filter($words,function($v)use($input){return stripos($v,$input)!==false;});

usort($filtered,function($a,$b)use($input) {
    return levenshtein($input,$a)>levenshtein($input,$b)?1:-1;
});

var_export($filtered);

输出:

array (
  0 => 'Noises',
  1 => 'noise',
  2 => 'Break Noise',
  3 => 'Engine Noise',
)

这将首先过滤掉“无噪声”元素,然后使用 levenshtein() 对数组进行排序。

【讨论】:

  • @mickmackusa,是的,我的错,对不起。
  • @mickmackusa,如果我的输入字符串是“有断音”之类的句子,那么是否可以获得相同的结果。或者我应该对代码进行哪些更改?
  • 我有描述字段,用户可以在其中放置任何随机描述(句子),所以取决于描述,我想建议诊断(只不过是数组中的值),所以我想要从数组中找到最接近的值并将该值显示给用户。
  • @MK3007 你的最新扩展与这个问题相差太远,所以我不想在这个页面上处理它——你应该打开一个新问题。但是,在您这样做之前,请花一些时间考虑您可能从用户那里遇到的数据与您可以构建的数据集。我花了 10 分钟思考如何做到这一点。这里只是您可以采用的众多方法中的 2 个(而且这些方法不是很清晰):sandbox.onlinephpfunctions.com/code/… 在寻求帮助之前,您需要花一些时间来开发您的设计。
  • ...如果您的用户要输入一个句子,您最好去掉所有作为搜索词无用的文章、连词、代词等。我想得越多,就会有数百种方法可以剥这只猫的皮。祝这个项目好运。
猜你喜欢
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
  • 2017-03-29
  • 2017-10-11
  • 1970-01-01
  • 2019-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多