gpt4 book ai didi

php(模糊)搜索匹配

转载 作者:可可西里 更新时间:2023-11-01 06:44:19 30 4
gpt4 key购买 nike

如果有人曾经向 digg 提交过故事,它会检查该故事是否已经提交,我假设是通过模糊搜索。

我想实现类似的东西,想知道他们是否使用开源的 php 类?

Soundex 不这样做,句子/字符串的长度可达 250 个字符

最佳答案

不幸的是,在 PHP 中执行此操作非常昂贵(高 CPU 和内存利用率)。但是,您当然可以将该算法应用于小型数据集。

具体扩展如何创建服务器崩溃:几个内置的 PHP 函数将确定字符串之间的“距离”:levenshteinsimilar_text

虚拟数据:(假装它们是新闻标题)

$titles = <<< EOFAppleApplesOrangeOrangesBananaEOF;

$titles = explode("\n", $titles );

此时,$titles 应该只是一个字符串数组。现在,创建一个矩阵并将每个标题与其他每个标题进行相似性比较。换句话说,对于 5 个标题,您将得到一个 5 x 5 矩阵(25 个条目。)这就是 CPU 和内存槽的用武之地。

这就是为什么这种方法(通过 PHP)不能应用于数千个条目的原因。但是如果你想:

$matches = array();foreach( $titles as $title ) {    $matches[$title] = array();    foreach( $titles as $compare_to ) {        $matches[$title][$compare_to] = levenshtein( $compare_to, $title );    }    asort( $matches[$title], SORT_NUMERIC  );}

此时您基本上拥有的是一个带有“文本距离”的矩阵。在概念上(不是在实际数据中)它看起来有点像下表。请注意如何有一组 0 值沿对角线方向移动 - 这意味着在匹配循环中,两个相同的词 - 嗯,完全相同。

       Apple Apples Orange Oranges BananaApple    0     1      5      6       6Apples   1     0      6      5       6Orange   5     6      0      1       5Oranges  6     5      1      0       5Banana   6     6      5      5       0

实际的 $matches 数组看起来像这样(截断):

Array(    [Apple] => Array        (            [Apple] => 0            [Apples] => 1            [Orange] => 5            [Banana] => 6            [Oranges] => 6        )    [Apples] => Array        (      ...

无论如何,这取决于您(通过实验)确定一个好的数值距离截止值可能最匹配 - 然后应用它。否则,请阅读 sphinx-search 并使用它 - 因为它确实有 PHP 库。

Orange 你很高兴你问了这个问题?

关于php(模糊)搜索匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3208743/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com